Keep gyro and gamepad separated

This commit is contained in:
Denis 2023-11-13 02:11:45 +01:00
parent 19e2bfa537
commit 01476a4884
No known key found for this signature in database
GPG key ID: DD9B63F805CF5C03
4 changed files with 20 additions and 21 deletions

View file

@ -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
View file

@ -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) {

View file

@ -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",

View file

@ -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"