From b3b70c12e20eaa4096558638d4173b1988b2c674 Mon Sep 17 00:00:00 2001 From: Clay Smith Date: Wed, 15 Feb 2023 04:52:13 -0600 Subject: All devices now getting event from proc directory, not sure student is working anymore, is my scanf when opening devices to blame? --- handle_devices.c | 66 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 25 deletions(-) (limited to 'handle_devices.c') diff --git a/handle_devices.c b/handle_devices.c index 7481f61..4e84a3b 100644 --- a/handle_devices.c +++ b/handle_devices.c @@ -81,13 +81,20 @@ void open_ps4_bt(int* controller_event_fptrs, uint64_t* connected_controllers, i } void open_ps4_wired(int* controller_event_fptrs, uint64_t* connected_controllers, int choice) { - controller_event_fptrs[PS4_WIRED_GYRO] = open("/dev/input/by-id/usb-Sony_Interactive_Entertainment_Wireless_Controller-event-if03", O_RDONLY); - controller_event_fptrs[PS4_WIRED_BUTTONS] = open("/dev/input/by-id/usb-Sony_Interactive_Entertainment_Wireless_Controller-if03-event-joystick", O_RDONLY); - controller_event_fptrs[PS4_WIRED_TOUCH] = open("/dev/input/by-id/usb-Sony_Interactive_Entertainment_Wireless_Controller-if03-event-mouse", O_RDONLY); - if (controller_event_fptrs[PS4_WIRED_GYRO] != -1 && controller_event_fptrs[PS4_WIRED_BUTTONS] != -1 && controller_event_fptrs[PS4_WIRED_TOUCH] != -1) { + int ps4[NUM_EVENTS_PS4] = { 0 }; + FILE* ps4_wired_pipe = popen("cat /proc/bus/input/devices | grep -A 5 \"^I: Bus=0003 Vendor=054c Product=09cc\" | grep \"event\" | cut -d 't' -f2 | paste - -s", "r"); + fscanf(ps4_wired_pipe, "%2d %2d %2d", &ps4[TOUCHPAD], &ps4[GYRO], &ps4[BUTTONS]); + if ( ps4[TOUCHPAD] != 0 && ps4[GYRO] != 0 && ps4[BUTTONS] != 0) { + char ps4_events[NUM_EVENTS_PS4][26]; + snprintf(ps4_events[TOUCHPAD], 25, "/dev/input/event%d", ps4[TOUCHPAD]); + snprintf(ps4_events[GYRO], 25, "/dev/input/event%d", ps4[GYRO]); + snprintf(ps4_events[BUTTONS], 25, "/dev/input/event%d", ps4[BUTTONS]); + controller_event_fptrs[PS4_WIRED_TOUCH] = open(ps4_events[TOUCHPAD], O_RDONLY); + controller_event_fptrs[PS4_WIRED_GYRO] = open(ps4_events[GYRO], O_RDONLY); + controller_event_fptrs[PS4_WIRED_BUTTONS] = open(ps4_events[BUTTONS], O_RDONLY); *connected_controllers |= PS4_WIRED_ALL_BITS; if (choice) { - fprintf(stderr, "%4d: PS4 WIRED TOUCH\n", PS4_WIRED_TOUCH_BIT); + fprintf(stderr, "%4d: PS4 WIRED TOUCH \n", PS4_WIRED_TOUCH_BIT); fprintf(stderr, "%4d: PS4 WIRED GYRO\n", PS4_WIRED_GYRO_BIT); fprintf(stderr, "%4d: PS4 WIRED BUTTONS\n", PS4_WIRED_BUTTONS_BIT); fprintf(stderr, "%4d: PS4 WIRED TOUCH AND GYRO \n", PS4_WIRED_TOUCH_AND_GYRO); @@ -95,28 +102,37 @@ void open_ps4_wired(int* controller_event_fptrs, uint64_t* connected_controllers fprintf(stderr, "%4d: PS4 WIRED GYRO AND BUTTONS\n", PS4_WIRED_GYRO_AND_BUTTONS); fprintf(stderr, "%4d: ALL PS4 WIRED\n", PS4_WIRED_ALL_BITS); } - } + } } void open_steam(int* controller_event_fptrs, uint64_t* connected_controllers, int choice) { - controller_event_fptrs[VALVE_STEAM] = open("/dev/input/by-id/usb-Valve_Software_Wired_Controller-if02-event-joystick", O_RDONLY); - if (controller_event_fptrs[VALVE_STEAM] != -1) { - *connected_controllers |= (uint64_t) 1; + int steam_event_number = 0; + FILE* steam_pipe = popen("cat /proc/bus/input/devices | grep -A 5 \"^I: Bus=0003 Vendor=28de Product=1102\" | tail -n 6 | grep \"event\" | cut -d \"t\" -f2", "r"); + fscanf(steam_pipe, "%2d", &steam_event_number); + if ( steam_event_number != 0) { + char steam_event_string[26]; + snprintf(steam_event_string, 25, "/dev/input/event%d", steam_event_number); + controller_event_fptrs[VALVE_STEAM] = open(steam_event_string, O_RDONLY); + *connected_controllers |= STEAM_BIT; if (choice) { - fprintf(stderr, "%4d: VALVE STEAM\n", 1); + fprintf(stderr, "%4d: STEAM \n", STEAM_BIT); } - } - + } } void open_xbox_360(int* controller_event_fptrs, uint64_t* connected_controllers, int choice) { - controller_event_fptrs[XBOX_360] = open("/dev/input/by-id/usb-©Microsoft_Xbox_360_Wireless_Receiver_for_Windows_E15D4C50-event-joystick", O_RDONLY); - if (controller_event_fptrs[XBOX_360] != -1) { - *connected_controllers |= (uint64_t) 2; + int xbox_360_event_number = 0; + FILE* xbox_360_pipe = popen("cat /proc/bus/input/devices | grep -A 5 \"^I: Bus=0003 Vendor=045e Product=02a1\" | tail -n1 | cut -d \"t\" -f2", "r"); + fscanf(xbox_360_pipe, "%2d", &xbox_360_event_number); + if ( xbox_360_event_number != 0) { + char xbox_360_event_string[26]; + snprintf(xbox_360_event_string, 25, "/dev/input/event%d", xbox_360_event_number); + controller_event_fptrs[XBOX_360] = open(xbox_360_event_string, O_RDONLY); + *connected_controllers |= XBOX_360_BIT; if (choice) { - fprintf(stderr, "%4d: XBOX 360\n", 2); + fprintf(stderr, "%4d: XBOX 360 \n", XBOX_360_BIT); } - } + } } @@ -220,7 +236,7 @@ void print_multiple_events(int num_exceptions, int controller_event_fptrs[], ... while (read(controller_event_fptrs[pairs[0].event_fptr_index], &event[0], event_size) != -1) { *shared_usec = event[0].time.tv_usec; if (event[0].type == 0) continue; -///* +/* printf("%d %lu.%-6lu %d %3d %11d\n", pairs[0].event_user_num, event[0].time.tv_sec - start_sec, @@ -228,8 +244,8 @@ void print_multiple_events(int num_exceptions, int controller_event_fptrs[], ... event[0].type, event[0].code, event[0].value); -//*/ -/* +*/ +///* snprintf(buffer, BUFSIZE, "%d %lu.%-6lu %d %3d %11d\n", pairs[0].event_user_num, event[0].time.tv_sec - start_sec, @@ -238,7 +254,7 @@ void print_multiple_events(int num_exceptions, int controller_event_fptrs[], ... event[0].code, event[0].value); write(STDOUT_FILENO, buffer, sizeof(buffer)); -*/ +//*/ } fprintf(stderr, "DISCONNECTED\n"); } @@ -256,7 +272,7 @@ void print_multiple_events(int num_exceptions, int controller_event_fptrs[], ... } while (read(controller_event_fptrs[pairs[i+1].event_fptr_index], &event[i+1], event_size) != -1) { if (event[i+1].type == 0) continue; -///* +/* printf("%d %zu.%-6zu %d %3d %11d\n", pairs[i+1].event_user_num, event[i+1].time.tv_sec - start_sec, @@ -265,8 +281,8 @@ void print_multiple_events(int num_exceptions, int controller_event_fptrs[], ... event[i+1].type, event[i+1].code, event[i+1].value); - -/* +*/ +///* snprintf(buffer, BUFSIZE, "%d %zu.%-6zu %d %3d %11d\n", pairs[i+1].event_user_num, event[i+1].time.tv_sec - start_sec, @@ -275,7 +291,7 @@ void print_multiple_events(int num_exceptions, int controller_event_fptrs[], ... event[i+1].code, event[i+1].value); write(STDOUT_FILENO, buffer, sizeof(buffer)); -*/ +//*/ } fprintf(stderr, "DISCONNECTED\n"); } -- cgit v1.2.1