Keep gyro and gamepad separated
This commit is contained in:
parent
19e2bfa537
commit
01476a4884
4 changed files with 20 additions and 21 deletions
10
input_dev.c
10
input_dev.c
|
|
@ -240,9 +240,15 @@ static void* iio_read_thread_func(void* ptr) {
|
|||
// clear out flags
|
||||
msg->flags = 0x00000000U;
|
||||
|
||||
if (queue_push(ctx->queue, (void*)msg) != 0) {
|
||||
fprintf(stderr, "Error pushing event.\n");
|
||||
const uint32_t input_filter_res = ctx->input_filter_fn(msg->ev, &msg->ev_size, &msg->ev_count);
|
||||
if (((input_filter_res & INPUT_FILTER_FLAGS_DO_NOT_EMIT) == 0) && (msg->ev_count > 0)) {
|
||||
if (queue_push(ctx->queue, (void*)msg) != 0) {
|
||||
fprintf(stderr, "Error pushing iio event.\n");
|
||||
|
||||
// flag the memory to be safe to reuse
|
||||
msg->flags |= MESSAGE_FLAGS_HANDLE_DONE;
|
||||
}
|
||||
} else {
|
||||
// flag the memory to be safe to reuse
|
||||
msg->flags |= MESSAGE_FLAGS_HANDLE_DONE;
|
||||
}
|
||||
|
|
|
|||
17
main.c
17
main.c
|
|
@ -4,14 +4,13 @@
|
|||
#include "output_dev.h"
|
||||
#include "platform.h"
|
||||
|
||||
queue_t gamepad_ev;
|
||||
|
||||
queue_t global_ev_queue;
|
||||
|
||||
static output_dev_t out_gamepadd_dev = {
|
||||
.gamepad_fd = -1,
|
||||
.imu_fd = -1,
|
||||
.crtl_flags = 0x00000000U,
|
||||
.queue = &gamepad_ev,
|
||||
.queue = &global_ev_queue,
|
||||
};
|
||||
|
||||
static iio_filters_t in_iio_filters = {
|
||||
|
|
@ -22,7 +21,7 @@ static input_dev_t in_iio_dev = {
|
|||
.dev_type = input_dev_type_iio,
|
||||
.crtl_flags = 0x00000000U,
|
||||
.iio_filters = &in_iio_filters,
|
||||
.queue = &gamepad_ev,
|
||||
.queue = &global_ev_queue,
|
||||
.input_filter_fn = input_filter_imu_identity,
|
||||
};
|
||||
|
||||
|
|
@ -34,7 +33,7 @@ static input_dev_t in_asus_kb_1_dev = {
|
|||
.dev_type = input_dev_type_uinput,
|
||||
.crtl_flags = 0x00000000U,
|
||||
.ev_filters = &in_asus_kb_1_filters,
|
||||
.queue = &gamepad_ev,
|
||||
.queue = &global_ev_queue,
|
||||
.input_filter_fn = input_filter_asus_kb,
|
||||
};
|
||||
|
||||
|
|
@ -46,7 +45,7 @@ static input_dev_t in_asus_kb_2_dev = {
|
|||
.dev_type = input_dev_type_uinput,
|
||||
.crtl_flags = 0x00000000U,
|
||||
.ev_filters = &in_asus_kb_2_filters,
|
||||
.queue = &gamepad_ev,
|
||||
.queue = &global_ev_queue,
|
||||
.input_filter_fn = input_filter_asus_kb,
|
||||
};
|
||||
|
||||
|
|
@ -58,7 +57,7 @@ static input_dev_t in_asus_kb_3_dev = {
|
|||
.dev_type = input_dev_type_uinput,
|
||||
.crtl_flags = 0x00000000U,
|
||||
.ev_filters = &in_asus_kb_3_filters,
|
||||
.queue = &gamepad_ev,
|
||||
.queue = &global_ev_queue,
|
||||
.input_filter_fn = input_filter_asus_kb,
|
||||
};
|
||||
|
||||
|
|
@ -70,7 +69,7 @@ static input_dev_t in_xbox_dev = {
|
|||
.dev_type = input_dev_type_uinput,
|
||||
.crtl_flags = 0x00000000U,
|
||||
.ev_filters = &in_xbox_filters,
|
||||
.queue = &gamepad_ev,
|
||||
.queue = &global_ev_queue,
|
||||
.input_filter_fn = input_filter_identity,
|
||||
};
|
||||
|
||||
|
|
@ -94,7 +93,7 @@ void sig_handler(int signo)
|
|||
int main(int argc, char ** argv) {
|
||||
init_global_mode();
|
||||
|
||||
queue_init(&gamepad_ev, 32);
|
||||
queue_init(&global_ev_queue, 128);
|
||||
|
||||
int imu_fd = create_output_dev("/dev/uinput", output_dev_imu);
|
||||
if (imu_fd < 0) {
|
||||
|
|
|
|||
|
|
@ -449,6 +449,8 @@ void *output_dev_thread_func(void *ptr) {
|
|||
fd = out_dev->imu_fd;
|
||||
} else if ((msg->flags & INPUT_FILTER_FLAGS_MOUSE) != 0) {
|
||||
fd = out_dev->mouse_fd;
|
||||
} else {
|
||||
fd = out_dev->gamepad_fd;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < msg->ev_count; ++i) {
|
||||
|
|
@ -464,12 +466,6 @@ void *output_dev_thread_func(void *ptr) {
|
|||
ev.time = now;
|
||||
}
|
||||
|
||||
/*
|
||||
if ((ev.type == EV_KEY) && (ev.code == KEY_PROG1)) { // To be wired to F16
|
||||
ev.code = KEY_F12;
|
||||
}
|
||||
*/
|
||||
|
||||
#if defined(INCLUDE_OUTPUT_DEBUG)
|
||||
printf(
|
||||
"Output: Received event %s (%s): %d\n",
|
||||
|
|
|
|||
|
|
@ -2,13 +2,11 @@
|
|||
|
||||
#include "queue.h"
|
||||
|
||||
/*
|
||||
// Emulates a "Generic" controller:
|
||||
#define OUTPUT_DEV_NAME "ROGueENEMY"
|
||||
#define OUTPUT_DEV_VENDOR_ID 0x108c
|
||||
#define OUTPUT_DEV_PRODUCT_ID 0x0323
|
||||
#define OUTPUT_DEV_VERSION 0x0111
|
||||
*/
|
||||
|
||||
/*
|
||||
// Emulates a steam controller
|
||||
|
|
@ -27,14 +25,14 @@
|
|||
#define OUTPUT_DEV_BUS_TYPE BUS_BLUETOOTH
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
// Emulates a DualShock controller
|
||||
#define OUTPUT_DEV_NAME "Sony Interactive Entertainment DualSense Wireless Controller"
|
||||
#define OUTPUT_DEV_VENDOR_ID 0x054c
|
||||
#define OUTPUT_DEV_PRODUCT_ID 0x0ce6
|
||||
#define OUTPUT_DEV_VERSION 0x8111
|
||||
#define OUTPUT_DEV_BUS_TYPE BUS_USB
|
||||
|
||||
*/
|
||||
|
||||
#define PHYS_STR "00:11:22:33:44:55"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue