annotate controller_info.c @ 2048:ed9a6de28158 mame_interp

Always use "call" style interp generation from CPU DSL and default to NEW_CORE in mame_interp branch
author Michael Pavone <pavone@retrodev.com>
date Tue, 21 Sep 2021 23:28:54 -0700
parents 193b804c9845
children a8af8d898a7c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <string.h>
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
2 #include <stdlib.h>
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
3 #ifndef USE_FBDEV
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include "render_sdl.h"
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
5 #endif
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 #include "controller_info.h"
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
7 #include "config.h"
1604
68b05322d971 Don't redundantly store controller GUID when saving a mapping. Remove illegal chars from controller name
Michael Pavone <pavone@retrodev.com>
parents: 1603
diff changeset
8 #include "util.h"
1852
a4cae960fd08 Allow config file to be saved with executable for "portable" setups
Michael Pavone <pavone@retrodev.com>
parents: 1779
diff changeset
9 #include "blastem.h"
1861
fc05f49075c2 Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents: 1859
diff changeset
10 #include "bindings.h"
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 typedef struct {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 char const *name;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 controller_info info;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 } heuristic;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
17 static heuristic heuristics[] = {
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 //TODO: Add more heuristic rules
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 {"DualShock 4", {.type = TYPE_PSX, .subtype = SUBTYPE_PS4}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 {"PS4", {.type = TYPE_PSX, .subtype = SUBTYPE_PS4}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 {"PS3", {.type = TYPE_PSX, .subtype = SUBTYPE_PS3}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 {"X360", {.type = TYPE_XBOX, .subtype = SUBTYPE_X360}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 {"Xbox 360", {.type = TYPE_XBOX, .subtype = SUBTYPE_X360}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 {"X-box 360", {.type = TYPE_XBOX, .subtype = SUBTYPE_X360}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 {"Xbox One", {.type = TYPE_XBOX, .subtype = SUBTYPE_XBONE}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26 {"X-box One", {.type = TYPE_XBOX, .subtype = SUBTYPE_XBONE}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 {"WiiU", {.type = TYPE_NINTENDO, .subtype = SUBTYPE_WIIU}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 {"Wii U", {.type = TYPE_NINTENDO, .subtype = SUBTYPE_WIIU}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 {"Nintendo Switch", {.type = TYPE_NINTENDO, .subtype = SUBTYPE_SWITCH}},
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 {"Saturn", {.type = TYPE_SEGA, .subtype = SUBTYPE_SATURN}}
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 const uint32_t num_heuristics = sizeof(heuristics)/sizeof(*heuristics);
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
34 static tern_node *info_config;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
35 static uint8_t loaded;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
36 static const char *subtype_names[] = {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
37 "unknown",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
38 "xbox",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
39 "xbox 360",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
40 "xbone",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
41 "ps2",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
42 "ps3",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
43 "ps4",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
44 "wiiu",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
45 "switch",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
46 "genesis",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
47 "saturn"
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
48 };
1645
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
49 static const char *subtype_human_names[] = {
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
50 "unknown",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
51 "Xbos",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
52 "Xbox 360",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
53 "Xbox One",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
54 "PS2",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
55 "PS3",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
56 "PS4",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
57 "Wii-U",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
58 "Switch",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
59 "Genesis",
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
60 "Saturn"
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
61 };
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
62 static const char *variant_names[] = {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
63 "normal",
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
64 "6b bumpers",
2015
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
65 "6b right",
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
66 "3button",
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
67 "6button",
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
68 "8button"
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
69 };
1603
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
70
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
71 static void load_ctype_config(void)
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72 {
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
73 if (!loaded) {
1852
a4cae960fd08 Allow config file to be saved with executable for "portable" setups
Michael Pavone <pavone@retrodev.com>
parents: 1779
diff changeset
74 info_config = load_overrideable_config("controller_types.cfg", "controller_types.cfg", NULL);
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
75 loaded = 1;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
76 }
1603
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
77 }
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
78
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
79 controller_info get_controller_info(int joystick)
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
80 {
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
81 #ifndef USE_FBDEV
1603
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
82 load_ctype_config();
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
83 char guid_string[33];
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
84 SDL_Joystick *stick = render_get_joystick(joystick);
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
85 SDL_GameController *control = render_get_controller(joystick);
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
86 SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(stick), guid_string, sizeof(guid_string));
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
87 tern_node *info = tern_find_node(info_config, guid_string);
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
88 if (info) {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
89 controller_info res;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
90 char *subtype = tern_find_ptr(info, "subtype");
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
91 res.subtype = SUBTYPE_UNKNOWN;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
92 if (subtype) {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
93 for (int i = 0; i < SUBTYPE_NUM; i++)
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
94 {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
95 if (!strcmp(subtype_names[i], subtype)) {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
96 res.subtype = i;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
97 break;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
98 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
99 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
100 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
101 switch (res.subtype)
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
102 {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
103 case SUBTYPE_XBOX:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
104 case SUBTYPE_X360:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
105 case SUBTYPE_XBONE:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
106 res.type = TYPE_XBOX;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
107 break;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
108 case SUBTYPE_PS2:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
109 case SUBTYPE_PS3:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
110 case SUBTYPE_PS4:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
111 res.type = TYPE_PSX;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
112 break;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
113 case SUBTYPE_WIIU:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
114 case SUBTYPE_SWITCH:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
115 res.type = TYPE_NINTENDO;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
116 break;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
117 case SUBTYPE_GENESIS:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
118 case SUBTYPE_SATURN:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
119 res.type = TYPE_SEGA;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
120 break;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
121 default:
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
122 res.type = TYPE_UNKNOWN;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
123 break;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
124 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
125 char *variant = tern_find_ptr(info, "variant");
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
126 res.variant = VARIANT_NORMAL;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
127 if (variant) {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
128 for (int i = 0; i < VARIANT_NUM; i++)
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
129 {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
130 if (!strcmp(variant_names[i], variant)) {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
131 res.variant = i;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
132 break;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
133 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
134 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
135 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
136 res.name = control ? SDL_GameControllerName(control) : SDL_JoystickName(stick);
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
137 if (control) {
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
138 SDL_GameControllerClose(control);
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
139 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
140 return res;
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
141 }
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 if (!control) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 return (controller_info) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144 .type = TYPE_UNKNOWN,
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
145 .subtype = SUBTYPE_UNKNOWN,
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
146 .variant = VARIANT_NORMAL,
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
147 .name = SDL_JoystickName(stick)
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
148 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
149 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
150 const char *name = SDL_GameControllerName(control);
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
151 SDL_GameControllerClose(control);
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
152 for (uint32_t i = 0; i < num_heuristics; i++)
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
153 {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
154 if (strstr(name, heuristics[i].name)) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
155 controller_info res = heuristics[i].info;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
156 res.name = name;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
157 return res;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
158 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
159 }
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
160 #else
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
161 const char *name = "Unknown";
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
162 #endif
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
163 //default to a 360
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
164 return (controller_info){
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
165 .type = TYPE_GENERIC_MAPPING,
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
166 .subtype = SUBTYPE_UNKNOWN,
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
167 .variant = VARIANT_NORMAL,
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
168 .name = name
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
169 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
170 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
171
1603
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
172 static void mappings_iter(char *key, tern_val val, uint8_t valtype, void *data)
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
173 {
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
174 #ifndef USE_FBDEV
1603
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
175 if (valtype != TVAL_NODE) {
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
176 return;
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
177 }
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
178 char *mapping = tern_find_ptr(val.ptrval, "mapping");
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
179 if (mapping) {
1604
68b05322d971 Don't redundantly store controller GUID when saving a mapping. Remove illegal chars from controller name
Michael Pavone <pavone@retrodev.com>
parents: 1603
diff changeset
180 const char *parts[] = {key, ",", mapping};
68b05322d971 Don't redundantly store controller GUID when saving a mapping. Remove illegal chars from controller name
Michael Pavone <pavone@retrodev.com>
parents: 1603
diff changeset
181 char * full = alloc_concat_m(3, parts);
68b05322d971 Don't redundantly store controller GUID when saving a mapping. Remove illegal chars from controller name
Michael Pavone <pavone@retrodev.com>
parents: 1603
diff changeset
182 SDL_GameControllerAddMapping(full);
68b05322d971 Don't redundantly store controller GUID when saving a mapping. Remove illegal chars from controller name
Michael Pavone <pavone@retrodev.com>
parents: 1603
diff changeset
183 free(full);
1603
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
184 }
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
185 #endif
1603
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
186 }
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
187
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
188 void controller_add_mappings(void)
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
189 {
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
190 load_ctype_config();
1604
68b05322d971 Don't redundantly store controller GUID when saving a mapping. Remove illegal chars from controller name
Michael Pavone <pavone@retrodev.com>
parents: 1603
diff changeset
191 if (info_config) {
68b05322d971 Don't redundantly store controller GUID when saving a mapping. Remove illegal chars from controller name
Michael Pavone <pavone@retrodev.com>
parents: 1603
diff changeset
192 tern_foreach(info_config, mappings_iter, NULL);
68b05322d971 Don't redundantly store controller GUID when saving a mapping. Remove illegal chars from controller name
Michael Pavone <pavone@retrodev.com>
parents: 1603
diff changeset
193 }
1603
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
194 }
c0727712d529 Read extral SDL2 mappings on startup from controller_types.cfg
Michael Pavone <pavone@retrodev.com>
parents: 1600
diff changeset
195
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
196 void save_controller_info(int joystick, controller_info *info)
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
197 {
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
198 #ifndef USE_FBDEV
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
199 char guid_string[33];
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
200 SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(render_get_joystick(joystick)), guid_string, sizeof(guid_string));
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
201 tern_node *existing = tern_find_node(info_config, guid_string);
1859
52f136052ab0 Allow changing SDL2 mapping and controller type after initial configuration
Michael Pavone <pavone@retrodev.com>
parents: 1852
diff changeset
202 existing = tern_insert_ptr(existing, "subtype", strdup(subtype_names[info->subtype]));
52f136052ab0 Allow changing SDL2 mapping and controller type after initial configuration
Michael Pavone <pavone@retrodev.com>
parents: 1852
diff changeset
203 existing = tern_insert_ptr(existing, "variant", strdup(variant_names[info->variant]));
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
204 info_config = tern_insert_node(info_config, guid_string, existing);
1852
a4cae960fd08 Allow config file to be saved with executable for "portable" setups
Michael Pavone <pavone@retrodev.com>
parents: 1779
diff changeset
205 persist_config_at(config, info_config, "controller_types.cfg");
1861
fc05f49075c2 Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents: 1859
diff changeset
206 handle_joy_added(joystick);
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
207 #endif
1599
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
208 }
1fc61c844ec5 Allow selecting controller type when controllers have an SDL 2 mapping, but heuristics fail to idenify details
Michael Pavone <pavone@retrodev.com>
parents: 1597
diff changeset
209
1600
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
210 void save_controller_mapping(int joystick, char *mapping_string)
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
211 {
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
212 #ifndef USE_FBDEV
1600
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
213 char guid_string[33];
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
214 SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(render_get_joystick(joystick)), guid_string, sizeof(guid_string));
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
215 tern_node *existing = tern_find_node(info_config, guid_string);
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
216 existing = tern_insert_ptr(existing, "mapping", mapping_string);
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
217 info_config = tern_insert_node(info_config, guid_string, existing);
1852
a4cae960fd08 Allow config file to be saved with executable for "portable" setups
Michael Pavone <pavone@retrodev.com>
parents: 1779
diff changeset
218 persist_config_at(config, info_config, "controller_types.cfg");
1861
fc05f49075c2 Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents: 1859
diff changeset
219 const char *parts[] = {guid_string, ",", mapping_string};
fc05f49075c2 Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents: 1859
diff changeset
220 char * full = alloc_concat_m(3, parts);
fc05f49075c2 Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents: 1859
diff changeset
221 SDL_GameControllerAddMapping(full);
fc05f49075c2 Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents: 1859
diff changeset
222 free(full);
fc05f49075c2 Reprocess bindings when SDL2 mappings, controller types or controller order change
Michael Pavone <pavone@retrodev.com>
parents: 1859
diff changeset
223 handle_joy_added(joystick);
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
224 #endif
1600
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
225 }
7f39c40b4b25 WIP UI for creating an SDL2 mapping for controllers that don't have one
Michael Pavone <pavone@retrodev.com>
parents: 1599
diff changeset
226
2018
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
227 void delete_controller_info(void)
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
228 {
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
229 delete_custom_config_at("controller_types.cfg");
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
230 loaded = 0;
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
231 tern_free(info_config);
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
232 info_config = NULL;
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
233 render_reset_mappings();
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
234 }
193b804c9845 Add a UI button to reset config to defaults
Michael Pavone <pavone@retrodev.com>
parents: 2015
diff changeset
235
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
236 char const *labels_xbox[] = {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
237 "A", "B", "X", "Y", "Back", NULL, "Start", "Click", "Click", "White", "Black", "LT", "RT"
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
238 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
239 char const *labels_360[] = {
1597
75aa418d0227 Use better names for "Guide" button on PS and Xbox controllers, handle d-pad directions in get_button_label
Michael Pavone <pavone@retrodev.com>
parents: 1596
diff changeset
240 "A", "B", "X", "Y", "Back", "Xbox", "Start", "Click", "Click", "LB", "RB", "LT", "RT"
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
241 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
242 static char const *labels_xbone[] = {
1597
75aa418d0227 Use better names for "Guide" button on PS and Xbox controllers, handle d-pad directions in get_button_label
Michael Pavone <pavone@retrodev.com>
parents: 1596
diff changeset
243 "A", "B", "X", "Y", "View", "Xbox", "Menu", "Click", "Click", "LB", "RB", "LT", "RT"
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
244 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
245 static char const *labels_ps3[] = {
1597
75aa418d0227 Use better names for "Guide" button on PS and Xbox controllers, handle d-pad directions in get_button_label
Michael Pavone <pavone@retrodev.com>
parents: 1596
diff changeset
246 "cross", "circle", "square", "triangle", "Select", "PS", "Start", "L3", "R3", "L1", "R1", "L2", "R2"
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
247 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
248 static char const *labels_ps4[] = {
1597
75aa418d0227 Use better names for "Guide" button on PS and Xbox controllers, handle d-pad directions in get_button_label
Michael Pavone <pavone@retrodev.com>
parents: 1596
diff changeset
249 "cross", "circle", "square", "triangle", "Share", "PS", "Options", "L3", "R3", "L1", "R1", "L2", "R2"
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
250 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
251 static char const *labels_nintendo[] = {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
252 "B", "A", "Y", "X", "-", "Home", "+", "Click", "Click", "L", "R", "ZL", "ZR"
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
253 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
254 static char const *labels_genesis[] = {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
255 "A", "B", "X", "Y", NULL, NULL, "Start", NULL, NULL, "Z", "C", NULL, "Mode"
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
256 };
2015
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
257 static char const *labels_genesis_3button[] = {
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
258 "A", "B", NULL, NULL, NULL, NULL, "Start", NULL, NULL, NULL, "C", NULL, "Mode"
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
259 };
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
260 static char const *labels_genesis_8button[] = {
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
261 "A", "B", "X", "Y", "Mode", NULL, "Start", NULL, NULL, "Z", "C", "L", "R"
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
262 };
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
263 static char const *labels_saturn[] = {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
264 "A", "B", "X", "Y", NULL, NULL, "Start", NULL, NULL, "Z", "C", "LT", "RT"
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
265 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
266
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
267 static const char** label_source(controller_info *info)
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
268 {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
269 if (info->type == TYPE_UNKNOWN || info->type == TYPE_GENERIC_MAPPING || info->subtype ==SUBTYPE_X360) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
270 return labels_360;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
271 } else if (info->type == TYPE_NINTENDO) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
272 return labels_nintendo;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
273 } else if (info->type == TYPE_PSX) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
274 if (info->subtype == SUBTYPE_PS4) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
275 return labels_ps4;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
276 } else {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
277 return labels_ps3;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
278 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
279 } else if (info->type == TYPE_XBOX) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
280 if (info->subtype == SUBTYPE_XBONE) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
281 return labels_xbone;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
282 } else {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
283 return labels_xbox;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
284 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
285 } else {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
286 if (info->subtype == SUBTYPE_GENESIS) {
2015
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
287 if (info->variant == VARIANT_8BUTTON) {
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
288 return labels_genesis_8button;
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
289 } else if (info->variant == VARIANT_3BUTTON) {
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
290 return labels_genesis_3button;
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
291 } else {
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
292 return labels_genesis;
8a64d86cc362 Use different variants for Genesis controllers to better represent what types are out there
Michael Pavone <pavone@retrodev.com>
parents: 1861
diff changeset
293 }
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
294 } else {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
295 return labels_saturn;
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
296 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
297 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
298 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
299
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
300 const char *get_button_label(controller_info *info, int button)
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
301 {
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
302 #ifndef USE_FBDEV
1597
75aa418d0227 Use better names for "Guide" button on PS and Xbox controllers, handle d-pad directions in get_button_label
Michael Pavone <pavone@retrodev.com>
parents: 1596
diff changeset
303 if (button >= SDL_CONTROLLER_BUTTON_DPAD_UP) {
75aa418d0227 Use better names for "Guide" button on PS and Xbox controllers, handle d-pad directions in get_button_label
Michael Pavone <pavone@retrodev.com>
parents: 1596
diff changeset
304 static char const * dirs[] = {"Up", "Down", "Left", "Right"};
75aa418d0227 Use better names for "Guide" button on PS and Xbox controllers, handle d-pad directions in get_button_label
Michael Pavone <pavone@retrodev.com>
parents: 1596
diff changeset
305 return dirs[button - SDL_CONTROLLER_BUTTON_DPAD_UP];
75aa418d0227 Use better names for "Guide" button on PS and Xbox controllers, handle d-pad directions in get_button_label
Michael Pavone <pavone@retrodev.com>
parents: 1596
diff changeset
306 }
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
307 #endif
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
308 return label_source(info)[button];
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
309 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
310
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
311 static char const *axis_labels[] = {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
312 "Left X", "Left Y", "Right X", "Right Y"
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
313 };
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
314 const char *get_axis_label(controller_info *info, int axis)
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
315 {
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
316 #ifndef USE_FBDEV
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
317 if (axis < SDL_CONTROLLER_AXIS_TRIGGERLEFT) {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
318 return axis_labels[axis];
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
319 } else {
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
320 return label_source(info)[axis - SDL_CONTROLLER_AXIS_TRIGGERLEFT + SDL_CONTROLLER_BUTTON_RIGHTSHOULDER + 1];
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
321 }
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
322 #else
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
323 return NULL;
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
324 #endif
1596
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
325 }
437e80a700aa Initial heuristics for detecting controller types and showing different labels in UI. Modified controller settings view to first display a list of controllers, only showing mapping after selecting controller
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
326
1608
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
327 char *make_controller_type_key(controller_info *info)
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
328 {
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
329 const char *subtype;
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
330 if (info->subtype == SUBTYPE_UNKNOWN) {
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
331 switch(info->type)
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
332 {
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
333 case TYPE_XBOX:
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
334 subtype = subtype_names[SUBTYPE_X360];
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
335 break;
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
336 case TYPE_PSX:
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
337 subtype = subtype_names[SUBTYPE_PS4];
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
338 break;
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
339 case TYPE_NINTENDO:
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
340 subtype = subtype_names[SUBTYPE_SWITCH];
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
341 break;
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
342 default:
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
343 subtype = "unknown";
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
344 }
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
345 } else {
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
346 subtype = subtype_names[info->subtype];
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
347 }
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
348 const char *variant = variant_names[info->variant];
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
349 const char *parts[] = {subtype, "_", variant};
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
350 char *ret = alloc_concat_m(3, parts);
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
351 for (char *cur = ret; *cur; cur++)
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
352 {
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
353 if (*cur == ' ')
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
354 {
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
355 *cur = '_';
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
356 }
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
357 }
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
358 return ret;
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
359 }
419a0a133b5c Allow a gamepad mapping to apply to all controllers, controllers of a particular type (i.e.e 6-button PS4 controllers) or specific controllers (based on SDL2 GUID) in addition to the controller in a certain slot
Michael Pavone <pavone@retrodev.com>
parents: 1604
diff changeset
360
1645
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
361 char *make_human_readable_type_name(controller_info *info)
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
362 {
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
363 const char *base = subtype_human_names[info->subtype];
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
364 char *prefix;
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
365 if (info->variant == VARIANT_NORMAL) {
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
366 prefix = "Normal ";
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
367 } else {
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
368 static const char *parts[] = {"6 button (", NULL, "/", NULL, ") "};
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
369 #ifdef USE_FBDEV
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
370 parts[1] = parts[3] = "??";
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
371 #else
1645
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
372 if (info->variant == VARIANT_6B_BUMPERS) {
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
373 parts[1] = get_button_label(info, SDL_CONTROLLER_BUTTON_LEFTSHOULDER);
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
374 parts[3] = get_button_label(info, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER);
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
375 } else {
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
376 parts[1] = get_button_label(info, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER);
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
377 parts[3] = get_axis_label(info, SDL_CONTROLLER_AXIS_TRIGGERRIGHT);
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
378 }
1779
3a8c4ee68568 Added raw fbdev/evdev/ALSA render backend
Michael Pavone <pavone@retrodev.com>
parents: 1645
diff changeset
379 #endif
1645
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
380 prefix = alloc_concat_m(5, parts);
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
381 }
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
382 char *ret = alloc_concat(prefix, base);
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
383 if (info->variant != VARIANT_NORMAL) {
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
384 free(prefix);
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
385 }
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
386 return ret;
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
387 }
84ef1eb2c96a Added code for actually saving new controller bindings to an appropriate key in the config file
Michael Pavone <pavone@retrodev.com>
parents: 1608
diff changeset
388