diff --git a/McAirpos/launCharc/launCharc b/McAirpos/launCharc/launCharc index 14b1fd3..55149a8 100755 Binary files a/McAirpos/launCharc/launCharc and b/McAirpos/launCharc/launCharc differ diff --git a/McAirpos/launCharc/launCharc.c b/McAirpos/launCharc/launCharc.c index 146f4e7..f4e26f2 100644 --- a/McAirpos/launCharc/launCharc.c +++ b/McAirpos/launCharc/launCharc.c @@ -74,14 +74,21 @@ int main(int argc, char** argv) { // Read game file argument to execute char* game = ""; + char* options = ""; if (argc == 2) { game = argv[1]; - } else if (argc > 2) { - printf("usage: launchArcade [/path/to/arcadegame.elf]\n"); + } else if (argc == 3) { + game = argv[2]; + options = argv[1]; + } else if ((argc > 3) || (argc < 2)) { + printf("usage: launchArcade [nomap] [/path/to/arcadegame.elf]\n"); return 1; } + if (!strcmp(options, "nomap")) { + printf("%s, %s\n", game, options); + } else { // Determine the number of connected gamepads printf("%s\n", game); char eventPaths[100]; @@ -90,8 +97,8 @@ int main(int argc, char** argv) { int numberOfEvents = 1 + atoi(getSystemOutput("ls /dev/input | sed 's/event//' | sort -n | tail -1")); for (int i = 0; i < numberOfEvents; i++) { if (numberOfPads < 2) { - char processCommand[100]; - snprintf(processCommand, 100, "/home/pi/McAirpos/McAirpos/uinput-mapper/input-read -vp /dev/input/event%d | grep DPAD", i); + char processCommand[120]; + snprintf(processCommand, 120, "/home/pi/McAirpos/McAirpos/uinput-mapper/input-read -vp /dev/input/event%d | grep -e BTN_SOUTH -e BTN_PINKIE", i); char* event = getSystemOutput(processCommand); if (strcmp(event, "")) { printf("%s, Output:%s\n", processCommand, getSystemOutput(processCommand)); @@ -99,6 +106,7 @@ int main(int argc, char** argv) { char iString[20]; sprintf(iString, "%d", i); strcat(strcat(strcat(eventPaths, "/dev/input/event"), iString), " "); + strcat(strcat(strcat(eventPaths, "/dev/input/event"), iString), " "); numberOfPads++; } } @@ -138,8 +146,10 @@ int main(int argc, char** argv) { } snprintf(sedCommand, 100, "sed -i \"1s&.*&\"%s\"&\" /sd/arcade.cfg", defaultEvent); system(sedCommand); + } system("stty -ixon"); + // Fork game execution on launch, so that it is executed // the same way it's done in-game on reset and finish if (!fork()) { @@ -214,7 +224,7 @@ int main(int argc, char** argv) { perror("warn: ioctl KBSKBMODE failed"); } - system("stty -ixon"); + system("stty ixon"); system("clear"); } diff --git a/McAirpos/uinput-mapper/configs/arcade1.py b/McAirpos/uinput-mapper/configs/arcade1.py index 8df1df3..872b552 100644 --- a/McAirpos/uinput-mapper/configs/arcade1.py +++ b/McAirpos/uinput-mapper/configs/arcade1.py @@ -2,30 +2,146 @@ """ -Configuration for a simple Microsoft SideWinter Game Pad Pro USB version 1.0 -... as ABS input pointer device +Configuration for many EV_ABS(axis) and EV_KEY(digital buttons) directional controllers +... as EV_KEY MakeCode Arcade keyboard device """ +# Global variables +autoconf = 1 #Determines min and max for EV_ABS events automatically if 1, min and max must be set manually below if 0 +deadzone = 0.25 #Deadzone in percentage before EV_ABS events react, used to dampen reactions to axis movements + +# Variables for EV_ABS controller no. 1 +invertUp = 0 #For inverting Y axis if 1, e.g. Nimbus SteelSeries controller +invertLeft = 0 #For inverting X axis if 1 +max = 1 #Seed value = 1 for autoconf, if manual find properties using ./input-read -v -p /dev/input/eventX +min = 0 #Seed value = 0 for autoconf +mid = (min + max)/2 + +# Directional functions for EV_ABS controller no. 1 +def digitizeUp(x): + global min, mid, max, deadzone + if x < min: + min = x + mid = (min + max)/2 + + if invertUp: + if x > (mid + (max - mid) * deadzone): + x = 1 + else: + x = 0 + else: + if x < (mid - (max - mid) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeDown(x): + global min, mid, max, deadzone + if x > max: + max = x + mid = (min + max)/2 + + if invertUp: + if x < (mid - (max - mid) * deadzone): + x = 1 + else: + x = 0 + else: + if x > (mid + (max - mid) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeLeft(x): + global min, mid, max, deadzone + if x < min: + min = x + mid = (min + max)/2 + + if invertLeft: + if x > (mid + (max - mid) * deadzone): + x = 1 + else: + x = 0 + else: + if x < (mid - (max - mid) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeRight(x): + global min, mid, max, deadzone + if x > max: + max = x + mid = (min + max)/2 + + if invertLeft: + if x < (mid - (max - mid) * deadzone): + x = 1 + else: + x = 0 + else: + if x > (mid + (max - mid) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +# Variables for EV_ABS HAT controllers +hmin = -1 +hmax = 1 +hmid = 0 + +# Directional functions for EV_ABS HAT controllers +def hat0Pos(x): + global hmin, hmid, hmax + + if x > hmid: + x = 1 + else: + x = 0 + + return int(x) + +def hat0Neg(x): + global hmin, hmid, hmax + + if x < hmid: + x = 1 + else: + x = 0 + + return int(x) + + +# Button mapping config config = { (0, EV_KEY): { - BTN_DPAD_LEFT: { - 'type' : (0, EV_KEY), - 'code' : KEY_A, - 'value': None - }, - BTN_DPAD_RIGHT: { + BTN_DPAD_UP: { 'type' : (0, EV_KEY), - 'code' : KEY_D, + 'code' : 17, 'value' : None }, - BTN_DPAD_UP: { + BTN_DPAD_DOWN: { 'type' : (0, EV_KEY), - 'code' : KEY_W, + 'code' : 31, 'value' : None }, - BTN_DPAD_DOWN: { + BTN_DPAD_LEFT: { 'type' : (0, EV_KEY), - 'code' : KEY_S, + 'code' : 30, + 'value' : None + }, + BTN_DPAD_RIGHT: { + 'type' : (0, EV_KEY), + 'code' : 32, 'value' : None }, BTN_SOUTH: { @@ -33,7 +149,7 @@ 'code' : 29, 'value' : None }, - BTN_X: { + BTN_B: { 'type' : (0, EV_KEY), 'code' : 42, 'value' : None @@ -52,9 +168,90 @@ 'type' : (0, EV_KEY), 'code' : 60, 'value' : None - } + }, }, + (0, EV_ABS): { + ABS_X: { + 'type' : (0, EV_KEY), + 'code' : 30, + 'value' : digitizeLeft + }, + ABS_Y: { + 'type' : (0, EV_KEY), + 'code' : 17, + 'value' : digitizeUp + }, + ABS_HAT0X: { + 'type' : (0, EV_KEY), + 'code' : 32, + 'value' : hat0Pos + }, + ABS_HAT0Y: { + 'type' : (0, EV_KEY), + 'code' : 31, + 'value' : hat0Pos + } + }, (1, EV_KEY): { + BTN_THUMB: { + 'type' : (0, EV_KEY), + 'code' : 29, + 'value' : None + }, + BTN_THUMB2: { + 'type' : (0, EV_KEY), + 'code' : 42, + 'value' : None + }, + BTN_BASE4: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : None + }, + BTN_BASE3: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : None + }, + KEY_HOMEPAGE: { + 'type' : (0, EV_KEY), + 'code' : 60, + 'value' : None + } + }, + (1, EV_ABS): { + ABS_X: { + 'type' : (0, EV_KEY), + 'code' : 32, + 'value' : digitizeRight + }, + ABS_Y: { + 'type' : (0, EV_KEY), + 'code' : 31, + 'value' : digitizeDown + }, + ABS_Z: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : hat0Pos + }, + ABS_RZ: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : hat0Pos + }, + ABS_HAT0X: { + 'type' : (0, EV_KEY), + 'code' : 30, + 'value' : hat0Neg + }, + ABS_HAT0Y: { + 'type' : (0, EV_KEY), + 'code' : 17, + 'value' : hat0Neg + } + }, + (2, EV_KEY): { KEY_A: { 'type' : (0, EV_KEY), 'code' : 105, diff --git a/McAirpos/uinput-mapper/configs/arcade2.py b/McAirpos/uinput-mapper/configs/arcade2.py index d1a9a5a..aa433ef 100644 --- a/McAirpos/uinput-mapper/configs/arcade2.py +++ b/McAirpos/uinput-mapper/configs/arcade2.py @@ -2,30 +2,234 @@ """ -Configuration for a simple Microsoft SideWinter Game Pad Pro USB version 1.0 -... as ABS input pointer device +Configuration for many EV_ABS(axis) and EV_KEY(digital buttons) directional controllers +... as EV_KEY MakeCode Arcade keyboard device """ +# Global variables +autoconf = 1 #Determines min and max for EV_ABS events automatically if 1, min and max must be set manually below if 0 +deadzone = 0.25 #Deadzone in percentage before EV_ABS events react, used to dampen reactions to axis movements + + +# Variables for EV_ABS controller no. 1 +invertUp = 0 #For inverting Y axis if 1, e.g. Nimbus SteelSeries controller +invertLeft = 0 #For inverting X axis if 1 +max = 1 #Seed value = 1 for autoconf, if manual find properties using ./input-read -v -p /dev/input/eventX +min = 0 #Seed value = 0 for autoconf +mid = (min + max)/2 + +# Directional functions for EV_ABS controller no. 1 +def digitizeUp(x): + global min, mid, max, deadzone + if x < min: + min = x + mid = (min + max)/2 + + if invertUp: + if x > (mid + (max - mid) * deadzone): + x = 1 + else: + x = 0 + else: + if x < (mid - (max - mid) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeDown(x): + global min, mid, max, deadzone + if x > max: + max = x + mid = (min + max)/2 + + if invertUp: + if x < (mid - (max - mid) * deadzone): + x = 1 + else: + x = 0 + else: + if x > (mid + (max - mid) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeLeft(x): + global min, mid, max, deadzone + if x < min: + min = x + mid = (min + max)/2 + + if invertLeft: + if x > (mid + (max - mid) * deadzone): + x = 1 + else: + x = 0 + else: + if x < (mid - (max - mid) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeRight(x): + global min, mid, max, deadzone + if x > max: + max = x + mid = (min + max)/2 + + if invertLeft: + if x < (mid - (max - mid) * deadzone): + x = 1 + else: + x = 0 + else: + if x > (mid + (max - mid) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + + +# Variables for EV_ABS controller no. 2 +invertUp2 = 0 #For inverting Y axis if 1, e.g. Nimbus SteelSeries controller +invertLeft2 = 0 #For inverting X axis if 1 +max2 = 1 #Seed value = 1 for autoconf, if manual find properties using ./input-read -v -p /dev/input/eventX +min2 = 0 #Seed value = 0 for autoconf +mid2 = (min + max)/2 + +# Directional functions for EV_ABS controller no. 2 +def digitizeUp2(x): + global min2, mid2, max2, deadzone + if x < min2: + min2 = x + mid2 = (min2 + max2)/2 + + if invertUp2: + if x > (mid2 + (max2 - mid2) * deadzone): + x = 1 + else: + x = 0 + else: + if x < (mid2 - (max2 - mid2) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeDown2(x): + global min2, mid2, max2, deadzone + if x > max2: + max2 = x + mid2 = (min2 + max2)/2 + + if invertUp2: + if x < (mid2 - (max2 - mid2) * deadzone): + x = 1 + else: + x = 0 + else: + if x > (mid2 + (max2 - mid2) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeLeft2(x): + global min2, mid2, max2, deadzone + if x < min2: + min2 = x + mid2 = (min2 + max2)/2 + + if invertLeft2: + if x > (mid2 + (max2 - mid2) * deadzone): + x = 1 + else: + x = 0 + else: + if x < (mid2 - (max2 - mid2) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + +def digitizeRight2(x): + global min2, mid2, max2, deadzone + if x > max2: + max2 = x + mid2 = (min2 + max2)/2 + + if invertLeft2: + if x < (mid2 - (max2 - mid2) * deadzone): + x = 1 + else: + x = 0 + else: + if x > (mid2 + (max2 - mid2) * deadzone): + x = 1 + else: + x = 0 + + return int(x) + + +# Variables for EV_ABS HAT controllers +hmin = -1 +hmax = 1 +hmid = 0 + +# Directional functions for EV_ABS HAT controllers +def hat0Pos(x): + global hmin, hmid, hmax + + if x > hmid: + x = 1 + else: + x = 0 + + return int(x) + +def hat0Neg(x): + global hmin, hmid, hmax + + if x < hmid: + x = 1 + else: + x = 0 + + return int(x) + + +# Button mapping config config = { + # Controller no. 1 (0, EV_KEY): { - BTN_DPAD_LEFT: { - 'type' : (0, EV_KEY), - 'code' : KEY_A, - 'value': None - }, - BTN_DPAD_RIGHT: { + BTN_DPAD_UP: { 'type' : (0, EV_KEY), - 'code' : KEY_D, + 'code' : 17, 'value' : None }, - BTN_DPAD_UP: { + BTN_DPAD_DOWN: { 'type' : (0, EV_KEY), - 'code' : KEY_W, + 'code' : 31, 'value' : None }, - BTN_DPAD_DOWN: { + BTN_DPAD_LEFT: { 'type' : (0, EV_KEY), - 'code' : KEY_S, + 'code' : 30, + 'value' : None + }, + BTN_DPAD_RIGHT: { + 'type' : (0, EV_KEY), + 'code' : 32, 'value' : None }, BTN_SOUTH: { @@ -33,7 +237,7 @@ 'code' : 29, 'value' : None }, - BTN_X: { + BTN_B: { 'type' : (0, EV_KEY), 'code' : 42, 'value' : None @@ -52,19 +256,91 @@ 'type' : (0, EV_KEY), 'code' : 60, 'value' : None - } + }, }, + (0, EV_ABS): { + ABS_X: { + 'type' : (0, EV_KEY), + 'code' : 30, + 'value' : digitizeLeft + }, + ABS_Y: { + 'type' : (0, EV_KEY), + 'code' : 17, + 'value' : digitizeUp + }, + ABS_HAT0X: { + 'type' : (0, EV_KEY), + 'code' : 32, + 'value' : hat0Pos + }, + ABS_HAT0Y: { + 'type' : (0, EV_KEY), + 'code' : 31, + 'value' : hat0Pos + } + }, (1, EV_KEY): { - BTN_DPAD_LEFT: { - 'type' : (0, EV_KEY), - 'code' : 105, - 'value': None - }, - BTN_DPAD_RIGHT: { + BTN_THUMB: { 'type' : (0, EV_KEY), - 'code' : 106, + 'code' : 29, + 'value' : None + }, + BTN_THUMB2: { + 'type' : (0, EV_KEY), + 'code' : 42, + 'value' : None + }, + BTN_BASE4: { + 'type' : (0, EV_KEY), + 'code' : 1, 'value' : None }, + BTN_BASE3: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : None + }, + KEY_HOMEPAGE: { + 'type' : (0, EV_KEY), + 'code' : 60, + 'value' : None + } + }, + (1, EV_ABS): { + ABS_X: { + 'type' : (0, EV_KEY), + 'code' : 32, + 'value' : digitizeRight + }, + ABS_Y: { + 'type' : (0, EV_KEY), + 'code' : 31, + 'value' : digitizeDown + }, + ABS_Z: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : hat0Pos + }, + ABS_RZ: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : hat0Pos + }, + ABS_HAT0X: { + 'type' : (0, EV_KEY), + 'code' : 30, + 'value' : hat0Neg + }, + ABS_HAT0Y: { + 'type' : (0, EV_KEY), + 'code' : 17, + 'value' : hat0Neg + } + }, + # Controller no. 2 + (2, EV_KEY): { BTN_DPAD_UP: { 'type' : (0, EV_KEY), 'code' : 103, @@ -75,12 +351,22 @@ 'code' : 108, 'value' : None }, + BTN_DPAD_LEFT: { + 'type' : (0, EV_KEY), + 'code' : 105, + 'value' : None + }, + BTN_DPAD_RIGHT: { + 'type' : (0, EV_KEY), + 'code' : 106, + 'value' : None + }, BTN_SOUTH: { 'type' : (0, EV_KEY), 'code' : 100, 'value' : None }, - BTN_X: { + BTN_B: { 'type' : (0, EV_KEY), 'code' : 57, 'value' : None @@ -99,6 +385,87 @@ 'type' : (0, EV_KEY), 'code' : 60, 'value' : None + }, + }, + (2, EV_ABS): { + ABS_X: { + 'type' : (0, EV_KEY), + 'code' : 105, + 'value' : digitizeLeft2 + }, + ABS_Y: { + 'type' : (0, EV_KEY), + 'code' : 103, + 'value' : digitizeUp2 + }, + ABS_HAT0X: { + 'type' : (0, EV_KEY), + 'code' : 106, + 'value' : hat0Pos + }, + ABS_HAT0Y: { + 'type' : (0, EV_KEY), + 'code' : 108, + 'value' : hat0Pos + } + }, + (3, EV_KEY): { + BTN_THUMB: { + 'type' : (0, EV_KEY), + 'code' : 100, + 'value' : None + }, + BTN_THUMB2: { + 'type' : (0, EV_KEY), + 'code' : 57, + 'value' : None + }, + BTN_BASE4: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : None + }, + BTN_BASE3: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : None + }, + KEY_HOMEPAGE: { + 'type' : (0, EV_KEY), + 'code' : 60, + 'value' : None + } + }, + (3, EV_ABS): { + ABS_X: { + 'type' : (0, EV_KEY), + 'code' : 106, + 'value' : digitizeRight2 + }, + ABS_Y: { + 'type' : (0, EV_KEY), + 'code' : 108, + 'value' : digitizeDown2 + }, + ABS_Z: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : hat0Pos + }, + ABS_RZ: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : hat0Pos + }, + ABS_HAT0X: { + 'type' : (0, EV_KEY), + 'code' : 105, + 'value' : hat0Neg + }, + ABS_HAT0Y: { + 'type' : (0, EV_KEY), + 'code' : 103, + 'value' : hat0Neg } } } diff --git a/McAirpos/uinput-mapper/configs/keymouse.py b/McAirpos/uinput-mapper/configs/examples/keymouse.py similarity index 100% rename from McAirpos/uinput-mapper/configs/keymouse.py rename to McAirpos/uinput-mapper/configs/examples/keymouse.py diff --git a/McAirpos/uinput-mapper/configs/examples/ps3_dpad1.py b/McAirpos/uinput-mapper/configs/examples/ps3_dpad1.py new file mode 100644 index 0000000..8df1df3 --- /dev/null +++ b/McAirpos/uinput-mapper/configs/examples/ps3_dpad1.py @@ -0,0 +1,114 @@ +from uinputmapper.cinput import * + + +""" +Configuration for a simple Microsoft SideWinter Game Pad Pro USB version 1.0 +... as ABS input pointer device +""" + +config = { + (0, EV_KEY): { + BTN_DPAD_LEFT: { + 'type' : (0, EV_KEY), + 'code' : KEY_A, + 'value': None + }, + BTN_DPAD_RIGHT: { + 'type' : (0, EV_KEY), + 'code' : KEY_D, + 'value' : None + }, + BTN_DPAD_UP: { + 'type' : (0, EV_KEY), + 'code' : KEY_W, + 'value' : None + }, + BTN_DPAD_DOWN: { + 'type' : (0, EV_KEY), + 'code' : KEY_S, + 'value' : None + }, + BTN_SOUTH: { + 'type' : (0, EV_KEY), + 'code' : 29, + 'value' : None + }, + BTN_X: { + 'type' : (0, EV_KEY), + 'code' : 42, + 'value' : None + }, + BTN_START: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : None + }, + BTN_SELECT: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : None + }, + BTN_MODE: { + 'type' : (0, EV_KEY), + 'code' : 60, + 'value' : None + } + }, + (1, EV_KEY): { + KEY_A: { + 'type' : (0, EV_KEY), + 'code' : 105, + 'value': None + }, + KEY_D: { + 'type' : (0, EV_KEY), + 'code' : 106, + 'value' : None + }, + KEY_W: { + 'type' : (0, EV_KEY), + 'code' : 103, + 'value' : None + }, + KEY_S: { + 'type' : (0, EV_KEY), + 'code' : 108, + 'value' : None + }, + KEY_LEFTCTRL: { + 'type' : (0, EV_KEY), + 'code' : 100, + 'value' : None + }, + KEY_LEFTSHIFT: { + 'type' : (0, EV_KEY), + 'code' : 57, + 'value' : None + }, + KEY_ESC: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : None + }, + KEY_F1: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : None + }, + KEY_F2: { + 'type' : (0, EV_KEY), + 'code' : 60, + 'value' : None + } + } +} + +names = { + 0 : 'MakeCode_Arcade' + +} + +def config_merge(c, n): + c.clear() + c.update(config) + n.update(names) diff --git a/McAirpos/uinput-mapper/configs/examples/ps3_dpad2.py b/McAirpos/uinput-mapper/configs/examples/ps3_dpad2.py new file mode 100644 index 0000000..d1a9a5a --- /dev/null +++ b/McAirpos/uinput-mapper/configs/examples/ps3_dpad2.py @@ -0,0 +1,114 @@ +from uinputmapper.cinput import * + + +""" +Configuration for a simple Microsoft SideWinter Game Pad Pro USB version 1.0 +... as ABS input pointer device +""" + +config = { + (0, EV_KEY): { + BTN_DPAD_LEFT: { + 'type' : (0, EV_KEY), + 'code' : KEY_A, + 'value': None + }, + BTN_DPAD_RIGHT: { + 'type' : (0, EV_KEY), + 'code' : KEY_D, + 'value' : None + }, + BTN_DPAD_UP: { + 'type' : (0, EV_KEY), + 'code' : KEY_W, + 'value' : None + }, + BTN_DPAD_DOWN: { + 'type' : (0, EV_KEY), + 'code' : KEY_S, + 'value' : None + }, + BTN_SOUTH: { + 'type' : (0, EV_KEY), + 'code' : 29, + 'value' : None + }, + BTN_X: { + 'type' : (0, EV_KEY), + 'code' : 42, + 'value' : None + }, + BTN_START: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : None + }, + BTN_SELECT: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : None + }, + BTN_MODE: { + 'type' : (0, EV_KEY), + 'code' : 60, + 'value' : None + } + }, + (1, EV_KEY): { + BTN_DPAD_LEFT: { + 'type' : (0, EV_KEY), + 'code' : 105, + 'value': None + }, + BTN_DPAD_RIGHT: { + 'type' : (0, EV_KEY), + 'code' : 106, + 'value' : None + }, + BTN_DPAD_UP: { + 'type' : (0, EV_KEY), + 'code' : 103, + 'value' : None + }, + BTN_DPAD_DOWN: { + 'type' : (0, EV_KEY), + 'code' : 108, + 'value' : None + }, + BTN_SOUTH: { + 'type' : (0, EV_KEY), + 'code' : 100, + 'value' : None + }, + BTN_X: { + 'type' : (0, EV_KEY), + 'code' : 57, + 'value' : None + }, + BTN_START: { + 'type' : (0, EV_KEY), + 'code' : 1, + 'value' : None + }, + BTN_SELECT: { + 'type' : (0, EV_KEY), + 'code' : 59, + 'value' : None + }, + BTN_MODE: { + 'type' : (0, EV_KEY), + 'code' : 60, + 'value' : None + } + } +} + +names = { + 0 : 'MakeCode_Arcade' + +} + +def config_merge(c, n): + c.clear() + c.update(config) + n.update(names) diff --git a/McAirpos/uinput-mapper/configs/sidewinder-rel.py b/McAirpos/uinput-mapper/configs/examples/sidewinder-rel.py similarity index 100% rename from McAirpos/uinput-mapper/configs/sidewinder-rel.py rename to McAirpos/uinput-mapper/configs/examples/sidewinder-rel.py diff --git a/McAirpos/uinput-mapper/configs/sidewinder.py b/McAirpos/uinput-mapper/configs/examples/sidewinder.py similarity index 100% rename from McAirpos/uinput-mapper/configs/sidewinder.py rename to McAirpos/uinput-mapper/configs/examples/sidewinder.py diff --git a/McAirpos/uinput-mapper/configs/techinc.py b/McAirpos/uinput-mapper/configs/examples/techinc.py similarity index 100% rename from McAirpos/uinput-mapper/configs/techinc.py rename to McAirpos/uinput-mapper/configs/examples/techinc.py diff --git a/McAirpos/uinput-mapper/configs/tg.py b/McAirpos/uinput-mapper/configs/examples/tg.py similarity index 100% rename from McAirpos/uinput-mapper/configs/tg.py rename to McAirpos/uinput-mapper/configs/examples/tg.py diff --git a/McAirpos/uinput-mapper/configs/touchscreen.py b/McAirpos/uinput-mapper/configs/examples/touchscreen.py similarity index 100% rename from McAirpos/uinput-mapper/configs/touchscreen.py rename to McAirpos/uinput-mapper/configs/examples/touchscreen.py