linux-dist: Drop hardcoded mappings in favor of mapping files

This commit is contained in:
Jan Holthuis 2015-08-18 21:50:19 +02:00
parent 5c01098cab
commit 528cd5a793
4 changed files with 36 additions and 238 deletions

View File

@ -75,7 +75,7 @@
return mapping;
}
int input_evdev_init(Controller* controller, const char* device, const char* mapping_fname = NULL)
int input_evdev_init(Controller* controller, const char* device, const char* custom_mapping_fname = NULL)
{
char name[256] = "Unknown";
@ -97,53 +97,61 @@
controller->fd = fd;
if(mapping_fname != NULL)
const char* mapping_fname;
if(custom_mapping_fname != NULL)
{
if(loaded_mappings.count(string(mapping_fname)) == 0)
{
FILE* mapping_fd = fopen(mapping_fname, "r");
if(mapping_fd != NULL)
{
printf("evdev: reading custom mapping file: '%s'\n", mapping_fname);
loaded_mappings.insert(std::make_pair(string(mapping_fname), load_mapping(mapping_fd)));
fclose(mapping_fd);
}
else
{
printf("evdev: unable to open custom mapping file '%s'\n", mapping_fname);
return -3;
}
}
controller->mapping = &loaded_mappings[string(mapping_fname)];
mapping_fname = custom_mapping_fname;
}
else
{
#if defined(TARGET_PANDORA)
*controller.mapping = &controller_mapping_pandora;
mapping_fname = "controller_pandora.cfg";
#elif defined(TARGET_GCW0)
*controller.mapping = &controller_mapping_gcwz;
mapping_fname = "controller_gcwz.cfg";
#else
if (strcmp(name, "Microsoft X-Box 360 pad") == 0 ||
strcmp(name, "Xbox 360 Wireless Receiver") == 0 ||
strcmp(name, "Xbox 360 Wireless Receiver (XBOX)") == 0)
{
controller->mapping = &controller_mapping_xpad;
mapping_fname = "controller_xpad.cfg";
}
else if (strstr(name, "Xbox Gamepad (userspace driver)") != NULL)
{
controller->mapping = &controller_mapping_xboxdrv;
mapping_fname = "controller_xboxdrv.cfg";
}
else if (strstr(name, "keyboard") != NULL ||
strstr(name, "Keyboard") != NULL)
{
controller->mapping = &controller_mapping_keyboard;
mapping_fname = "keyboard.cfg";
}
else
{
controller->mapping = &controller_mapping_generic;
mapping_fname = "controller_generic.cfg";
}
#endif
}
if(loaded_mappings.count(string(mapping_fname)) == 0)
{
size_t size_needed = snprintf(NULL, 0, EVDEV_MAPPING_PATH, mapping_fname) + 1;
char* mapping_path = (char*)malloc(size_needed);
sprintf(mapping_path, EVDEV_MAPPING_PATH, mapping_fname);
FILE* mapping_fd = fopen(GetPath(mapping_path).c_str(), "r");
free(mapping_path);
if(mapping_fd != NULL)
{
printf("evdev: reading mapping file: '%s'\n", mapping_fname);
loaded_mappings.insert(std::make_pair(string(mapping_fname), load_mapping(mapping_fd)));
fclose(mapping_fd);
}
else
{
printf("evdev: unable to open mapping file '%s'\n", mapping_fname);
return -3;
}
}
controller->mapping = &loaded_mappings[string(mapping_fname)];
printf("evdev: Using '%s' mapping\n", controller->mapping->name);
return 0;
}

View File

@ -1,191 +0,0 @@
#include "linux-dist/evdev_mappings.h"
#if defined(USE_EVDEV)
ControllerMapping controller_mapping_generic = {
"Generic Controller",
0x130, // BTN_A
0x131, // BTN_B
0x132, // BTN_C
0x13d, // BTN_THUMBL
0x133, // BTN_X
0x134, // BTN_Y
0x135, // BTN_Z
0x13b, // BTN_START
0x13a, // BTN_SELECT
0x220, // BTN_DPAD_LEFT
0x221, // BTN_DPAD_RIGHT
0x222, // BTN_DPAD_UP
0x223, // BTN_DPAD_DOWN
-1,
-1,
-1,
-1,
0x136, // BTN_TL
0x137, // BTN_TR
0x10, // ABS_HAT0X
0x11, // ABS_HAT0Y
0x12, // ABS_HAT1X
0x13, // ABS_HAT1Y
0x00, // ABS_X
0x01, // ABS_Y
0x02, // ABS_Z
0x05, // ABS_RZ
};
ControllerMapping controller_mapping_keyboard = {
"Generic Keyboard",
30, // KEY_A
48, // KEY_B
46, // KEY_C
32, // KEY_D
45, // KEY_X
21, // KEY_Y
44, // KEY_Z
28, // KEY_ENTER
1, // KEY_ESC
105, // KEY_LEFT
106, // KEY_RIGHT
103, // KEY_UP
108, // KEY_DOWN
-1,
-1,
-1,
-1,
29, // KEY_LEFTCTRL
97, // KEY_RIGHTCTRL
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1
};
ControllerMapping controller_mapping_xpad = {
"Xbox 360 Controller (xpad driver)",
0x130, // BTN_A
0x131, // BTN_B
0x136, // BTN_TL
0x137, // BTN_TR
0x133, // BTN_X
0x134, // BTN_Y
0x13d, // BTN_THUMBL
0x13b, // BTN_START
0x13a, // BTN_SELECT
0x2c0, // BTN_TRIGGER_HAPPY1
0x2c1, // BTN_TRIGGER_HAPPY2
0x2c2, // BTN_TRIGGER_HAPPY3
0x2c3, // BTN_TRIGGER_HAPPY4
-1,
-1,
-1,
-1,
-1,
-1,
0x10, // ABS_HAT0X
0x11, // ABS_HAT0Y
0x12, // ABS_HAT1X
0x13, // ABS_HAT1Y
0x00, // ABS_X
0x01, // ABS_Y
0x02, // ABS_Z
0x05, // ABS_RZ
};
ControllerMapping controller_mapping_xboxdrv = {
"Xbox 360 Controller (xboxdrv userspace driver)",
0x130, // BTN_A
0x131, // BTN_B
0x136, // BTN_TL
0x137, // BTN_TR
0x133, // BTN_X
0x134, // BTN_Y
0x13d, // BTN_THUMBL
0x13b, // BTN_START
0x13a, // BTN_SELECT
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
0x10, // ABS_HAT0X
0x11, // ABS_HAT0Y
0x12, // ABS_HAT1X
0x13, // ABS_HAT1Y
0x00, // ABS_X
0x01, // ABS_Y
0x0a, // ABS_BRAKE
0x09, // ABS_GAS
};
ControllerMapping controller_mapping_gcwz = {
"GCW Zero",
0x1D, // GCWZ_BTN_A
0x38, // GCWZ_BTN_B
0x0F, // GCWZ_BTN_L
0x0E, // GCWZ_BTN_R
0x2A, // GCWZ_BTN_X
0x39, // GCWZ_BTN_Y
-1,
0x1C, // GCWZ_BTN_START
0x01, // GCWZ_BTN_SELECT
0x69, // GCWZ_BTN_LEFT
0x6A, // GCWZ_BTN_RIGHT
0x67, // GCWZ_BTN_UP
0x6C, // GCWZ_BTN_DOWN
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1
};
ControllerMapping controller_mapping_pandora = {
"Pandora",
109, // KEY_PAGEDOWN
107, // KEY_END
57, // KEY_SPACE
-1,
102, // KEY_HOME
104, // KEY_PAGEUP
-1,
56, // KEY_LEFTALT
139, // KEY_MENU,
105, // KEY_LEFT
106, // KEY_RIGHT
103, // KEY_UP
108, // KEY_DOWN
-1,
-1,
-1,
-1,
54, // KEY_RIGHTSHIFT
97, // KEY_RIGHTCTRL
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1
};
#endif

View File

@ -32,10 +32,3 @@ struct s_evdev_controller_mapping
const int Axis_Trigger_Right;
};
typedef struct s_evdev_controller_mapping ControllerMapping;
extern ControllerMapping controller_mapping_generic;
extern ControllerMapping controller_mapping_keyboard;
extern ControllerMapping controller_mapping_xpad;
extern ControllerMapping controller_mapping_xboxdrv;
extern ControllerMapping controller_mapping_gcwz;
extern ControllerMapping controller_mapping_pandora;

View File

@ -98,9 +98,7 @@ void SetupInput()
evdev_init_keycodes(); //FIXME: This sucks, but initializer lists for maps are only available with std=c++0x
int evdev_device_id[4] = { -1, -1, -1, -1 };
char* mapping = NULL;
size_t size_needed;
int evdev_device_length, port, i;
int port, i;
char* evdev_device;
@ -132,24 +130,14 @@ void SetupInput()
evdev_device = (char*)malloc(size_needed);
sprintf(evdev_device, EVDEV_DEVICE_STRING, evdev_device_id[port]);
mapping = NULL;
size_needed = snprintf(NULL, 0, EVDEV_MAPPING_CONFIG_KEY, port+1) + 1;
evdev_config_key = (char*)malloc(size_needed);
sprintf(evdev_config_key, EVDEV_MAPPING_CONFIG_KEY, port+1);
if (cfgExists("input", evdev_config_key) == 2)
{
string mapping_name = cfgLoadStr("input", evdev_config_key, "");
size_needed = snprintf(NULL, 0, EVDEV_MAPPING_PATH, mapping_name.c_str()) + 1;
char* evdev_mapping_fname = (char*)malloc(size_needed);
sprintf(evdev_mapping_fname, EVDEV_MAPPING_PATH, mapping_name.c_str());
mapping = (char*)GetPath(evdev_mapping_fname).c_str();
free(evdev_mapping_fname);
}
const char* mapping = (cfgExists("input", evdev_config_key) == 2 ? cfgLoadStr("input", evdev_config_key, "").c_str() : NULL);
free(evdev_config_key);
input_evdev_init(&controllers[port], evdev_device, mapping);
free(evdev_device);
}
}