From 2548e88a53e9a4cebab8ca77eb696ae1e85aadb9 Mon Sep 17 00:00:00 2001 From: Clay Smith Date: Thu, 26 Jan 2023 17:30:38 -0600 Subject: almost everything works but PS4 and Wii Nunchuck? --- main.c | 144 +++++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 77 insertions(+), 67 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 9f9b7dd..01aecf3 100644 --- a/main.c +++ b/main.c @@ -9,32 +9,37 @@ int main(void) uint64_t connected_controllers = 0; //Determine if WII REMOTE is connected via bluetooth - int wii[NUM_EVENTS_WII_PS4] = { 0 }; + int wii[4] = { 0 }; FILE* wii_pipe = popen("cat /proc/bus/input/devices | grep -A 5 \"^I: Bus=0005 Vendor=057e Product=0306\" | grep \"event\" | cut -d 't' -f2 | paste - -s", "r"); - fscanf(wii_pipe, "%2d %2d %2d", &wii[GYRO], &wii[IR], &wii[BUTTONS]); + fscanf(wii_pipe, "%2d %2d %2d %2d", &wii[GYRO], &wii[IR], &wii[BUTTONS], &wii[NUNCHUCK]); if ( wii[GYRO] != 0 && wii[IR] != 0 && wii[BUTTONS] != 0) { //wii is connected, create strings of event PATHS, open event files - char wii_events[NUM_EVENTS_WII_PS4][26]; + char wii_events[NUM_EVENTS_WII][26]; snprintf(wii_events[GYRO], 25, "/dev/input/event%d", wii[GYRO]); snprintf(wii_events[IR], 25, "/dev/input/event%d", wii[IR]); snprintf(wii_events[BUTTONS], 25, "/dev/input/event%d", wii[BUTTONS]); controller_event_fptrs[WII_GYRO] = open(wii_events[GYRO], O_RDONLY); controller_event_fptrs[WII_IR] = open(wii_events[IR], O_RDONLY); controller_event_fptrs[WII_BUTTONS] = open(wii_events[BUTTONS], O_RDONLY); + if (wii[NUNCHUCK] != 0) { //NUNCHUCK ATTACHED + snprintf(wii_events[NUNCHUCK], 25, "/dev/input/event%d", wii[NUNCHUCK]); + controller_event_fptrs[WII_NUNCHUCK] = open(wii_events[NUNCHUCK], O_RDONLY); + } //tell user and program that this device is available for use connected_controllers |= NINTENDO_ALL_BITS; printf("%4d: NINTENDO WII GYRO\n", NINTENDO_GYRO_BIT); printf("%4d: NINTENDO WII IR \n", NINTENDO_IR_BIT); printf("%4d: NINTENDO WII BUTTONS\n", NINTENDO_BUTTONS_BIT); + printf("%4d: NINTENDO WII NUNCHUCK\n", NINTENDO_NUNCHUCK_BIT); printf("%4d: ALL NINTENDO BT\n", NINTENDO_ALL_BITS); } //PS4 Bluetooth - int ps4[NUM_EVENTS_WII_PS4] = { 0 }; + int ps4[NUM_EVENTS_PS4] = { 0 }; FILE* ps4_bt_pipe = popen("cat /proc/bus/input/devices | grep -A 5 \"^I: Bus=0005 Vendor=054c Product=09cc\" | grep \"event\" | cut -d 't' -f2 | paste - -s", "r"); fscanf(ps4_bt_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_WII_PS4][26]; + 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]); @@ -83,7 +88,6 @@ DUMB_USER: printf("\n\nPress the number corresponding to the device above that you would like to use and then press ENTER.\n"); short choice; - int chosen_fd[3] = {-1}; scanf("%d", &choice); struct input_event event1; @@ -93,31 +97,40 @@ DUMB_USER: switch (choice) { case 1: //valve steam controller //easy { - chosen_fd[0] = controller_event_fptrs[VALVE_STEAM]; - for (int i = 0; i < NUM_EVENTS; ++i) { - if (i == VALVE_STEAM) continue; - close(controller_event_fptrs[i]); + printf("You chose: VALVE_STEAM\n"); + for (int i = 0; i < NUM_EVENTS - 1; ++i) { + if (i != VALVE_STEAM) { + close(controller_event_fptrs[i]); + } } - read(chosen_fd[0], &event1, ievt_size); + int ird = read(controller_event_fptrs[VALVE_STEAM], &event1, ievt_size); start_sec = event1.time.tv_sec; - while (1) { - read(chosen_fd[0], &event1, ievt_size); - if (event1.type == 0) continue; - printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); + if (ird == -1) fprintf(stderr, "PROBLEM READING FILE\n"); + while (ird != -1) { + int ird = read(controller_event_fptrs[VALVE_STEAM], &event1, ievt_size); + if (ird == -1) { + fprintf(stderr, "PROBLEM READING FILE\n"); + } + printf("%zu.%-6zu %d %3d %6d\n", + event1.time.tv_sec - start_sec, + event1.time.tv_usec, + event1.type, + event1.code, + event1.value); } break; } case 2: //xbox 360 controller //easy { - chosen_fd[0] = controller_event_fptrs[XBOX_360]; - for (int i = 0; i < NUM_EVENTS; ++i) { + printf("You chose: XBOX_360\n"); + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == XBOX_360) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[XBOX_360], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[XBOX_360], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -125,15 +138,14 @@ DUMB_USER: } case PS4_WIRED_TOUCH_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[PS4_WIRED_TOUCH]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == PS4_WIRED_TOUCH) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_WIRED_TOUCH], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_WIRED_TOUCH], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -141,15 +153,14 @@ DUMB_USER: } case PS4_WIRED_GYRO_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[PS4_WIRED_GYRO]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == PS4_WIRED_GYRO) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_WIRED_GYRO], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_WIRED_GYRO], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -157,15 +168,14 @@ DUMB_USER: } case PS4_WIRED_BUTTONS_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[PS4_WIRED_BUTTONS]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == PS4_WIRED_BUTTONS) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_WIRED_BUTTONS], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_WIRED_BUTTONS], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -174,10 +184,7 @@ DUMB_USER: case PS4_WIRED_ALL_BITS: //HARD { struct input_event event2, event3; - chosen_fd[0] = controller_event_fptrs[PS4_WIRED_TOUCH]; - chosen_fd[1] = controller_event_fptrs[PS4_WIRED_GYRO]; - chosen_fd[2] = controller_event_fptrs[PS4_WIRED_BUTTONS]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == PS4_WIRED_TOUCH || i == PS4_WIRED_GYRO || i == PS4_WIRED_BUTTONS) continue; close(controller_event_fptrs[i]); } @@ -185,15 +192,14 @@ DUMB_USER: } case PS4_BT_TOUCH_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[PS4_BT_TOUCH]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == PS4_BT_TOUCH) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_BT_TOUCH], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_BT_TOUCH], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -201,15 +207,14 @@ DUMB_USER: } case PS4_BT_GYRO_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[PS4_BT_GYRO]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == PS4_BT_GYRO) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_BT_GYRO], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_BT_GYRO], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -217,15 +222,14 @@ DUMB_USER: } case PS4_BT_BUTTONS_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[PS4_BT_BUTTONS]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == PS4_BT_BUTTONS) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_BT_BUTTONS], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[PS4_BT_BUTTONS], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -234,10 +238,7 @@ DUMB_USER: case PS4_BT_ALL_BITS: //HARD { struct input_event event2, event3; - chosen_fd[0] = controller_event_fptrs[PS4_BT_TOUCH]; - chosen_fd[1] = controller_event_fptrs[PS4_BT_GYRO]; - chosen_fd[2] = controller_event_fptrs[PS4_BT_BUTTONS]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == PS4_BT_TOUCH || i == PS4_BT_GYRO || i == PS4_BT_BUTTONS) continue; close(controller_event_fptrs[i]); } @@ -245,15 +246,14 @@ DUMB_USER: } case NINTENDO_GYRO_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[WII_GYRO]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == WII_GYRO) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[WII_GYRO], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[WII_GYRO], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -261,15 +261,14 @@ DUMB_USER: } case NINTENDO_IR_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[WII_IR]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == WII_IR) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[WII_IR], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[WII_IR], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -277,15 +276,29 @@ DUMB_USER: } case NINTENDO_BUTTONS_BIT: //easy { - chosen_fd[0] = controller_event_fptrs[WII_BUTTONS]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == WII_BUTTONS) continue; close(controller_event_fptrs[i]); } - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[WII_BUTTONS], &event1, ievt_size); + start_sec = event1.time.tv_sec; + while (1) { + read(controller_event_fptrs[WII_BUTTONS], &event1, ievt_size); + if (event1.type == 0) continue; + printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); + } + break; + } + case NINTENDO_NUNCHUCK_BIT: //easy + { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { + if (i == WII_NUNCHUCK) continue; + close(controller_event_fptrs[i]); + } + read(controller_event_fptrs[WII_NUNCHUCK], &event1, ievt_size); start_sec = event1.time.tv_sec; while (1) { - read(chosen_fd[0], &event1, ievt_size); + read(controller_event_fptrs[WII_NUNCHUCK], &event1, ievt_size); if (event1.type == 0) continue; printf("%zu.%-6zu %d %3d %6d\n", event1.time.tv_sec - start_sec, event1.time.tv_usec, event1.type, event1.code, event1.value); } @@ -294,10 +307,7 @@ DUMB_USER: case NINTENDO_ALL_BITS: //HARD { struct input_event event2, event3; - chosen_fd[0] = controller_event_fptrs[WII_GYRO]; - chosen_fd[1] = controller_event_fptrs[WII_IR]; - chosen_fd[2] = controller_event_fptrs[WII_BUTTONS]; - for (int i = 0; i < NUM_EVENTS; ++i) { + for (int i = 0; i < NUM_EVENTS - 1; ++i) { if (i == WII_GYRO || i == WII_IR || i == WII_BUTTONS) continue; close(controller_event_fptrs[i]); } -- cgit v1.2.1