summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--global_defs.h13
-rw-r--r--main.c144
2 files changed, 85 insertions, 72 deletions
diff --git a/global_defs.h b/global_defs.h
index 17269c9..248da05 100644
--- a/global_defs.h
+++ b/global_defs.h
@@ -7,8 +7,9 @@
#include <stdint.h>
//magic numbers
-#define NUM_EVENTS 12 //steam + xbox + ps4 * 6 + wii * 3 + mouse
-#define NUM_EVENTS_WII_PS4 3
+#define NUM_EVENTS 14 //steam + xbox + ps4 * 6 + wii * 4 + mouse
+#define NUM_EVENTS_PS4 3
+#define NUM_EVENTS_WII 4
#define PS4_BT_TOUCH_BIT 32
#define PS4_BT_GYRO_BIT 64
@@ -23,10 +24,11 @@
#define NINTENDO_GYRO_BIT 256
#define NINTENDO_IR_BIT 512
#define NINTENDO_BUTTONS_BIT 1024
-#define NINTENDO_ALL_BITS 1792 // 1024 + 512 + 256
+#define NINTENDO_NUNCHUCK_BIT 2048
+#define NINTENDO_ALL_BITS 3840 // 2048 + 1024 + 512 + 256
enum {
- IR = 0, TOUCHPAD = 0, GYRO = 1, BUTTONS = 2
+ IR = 0, TOUCHPAD = 0, GYRO = 1, BUTTONS = 2, NUNCHUCK = 3
};
enum {
@@ -34,6 +36,7 @@ enum {
XBOX_360 = 1,
PS4_WIRED_GYRO = 2, PS4_WIRED_BUTTONS = 3, PS4_WIRED_TOUCH = 4,
PS4_BT_GYRO = 5, PS4_BT_BUTTONS = 6, PS4_BT_TOUCH = 7,
- WII_GYRO = 8, WII_IR = 9, WII_BUTTONS = 10, MOUSE = 11
+ WII_GYRO = 8, WII_IR = 9, WII_BUTTONS = 10, WII_NUNCHUCK = 11,
+ MOUSE = 12
};
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]);
}