platform ps2, handle audio similar to psp
[picodrive.git] / platform / opendingux / inputmap.c
CommitLineData
58fc34b1 1#include <stdio.h>
d4bea61c 2#include <stdlib.h>
58fc34b1 3#include <string.h>
d4bea61c
PC
4#include <SDL_keysym.h>
5
6#include "../libpicofe/input.h"
7#include "../libpicofe/in_sdl.h"
58fc34b1 8#include "../libpicofe/plat.h"
d4bea61c 9#include "../common/input_pico.h"
b437951a 10#include "../common/plat_sdl.h"
58fc34b1 11#include "../common/emu.h"
d4bea61c 12
c12b126f 13struct in_default_bind _in_sdl_defbinds[] = {
8c54e0dd 14 { SDLK_UP, IN_BINDTYPE_PLAYER12, GBTN_UP },
d4bea61c
PC
15 { SDLK_DOWN, IN_BINDTYPE_PLAYER12, GBTN_DOWN },
16 { SDLK_LEFT, IN_BINDTYPE_PLAYER12, GBTN_LEFT },
17 { SDLK_RIGHT, IN_BINDTYPE_PLAYER12, GBTN_RIGHT },
18 { SDLK_LSHIFT, IN_BINDTYPE_PLAYER12, GBTN_A },
19 { SDLK_LALT, IN_BINDTYPE_PLAYER12, GBTN_B },
20 { SDLK_LCTRL, IN_BINDTYPE_PLAYER12, GBTN_C },
21 { SDLK_RETURN, IN_BINDTYPE_PLAYER12, GBTN_START },
22 { SDLK_ESCAPE, IN_BINDTYPE_EMU, PEVB_MENU },
23 { SDLK_TAB, IN_BINDTYPE_EMU, PEVB_PICO_PPREV },
24 { SDLK_BACKSPACE, IN_BINDTYPE_EMU, PEVB_PICO_PNEXT },
25 { SDLK_BACKSPACE, IN_BINDTYPE_EMU, PEVB_STATE_SAVE },
26 { SDLK_TAB, IN_BINDTYPE_EMU, PEVB_STATE_LOAD },
27 { SDLK_SPACE, IN_BINDTYPE_EMU, PEVB_FF },
28 { 0, 0, 0 }
29};
c12b126f 30const struct in_default_bind *in_sdl_defbinds = _in_sdl_defbinds;
d4bea61c 31
58fc34b1 32struct menu_keymap _in_sdl_key_map[] = {
d4bea61c
PC
33 { SDLK_UP, PBTN_UP },
34 { SDLK_DOWN, PBTN_DOWN },
35 { SDLK_LEFT, PBTN_LEFT },
36 { SDLK_RIGHT, PBTN_RIGHT },
37 { SDLK_LCTRL, PBTN_MOK },
38 { SDLK_LALT, PBTN_MBACK },
39 { SDLK_SPACE, PBTN_MA2 },
40 { SDLK_LSHIFT, PBTN_MA3 },
41 { SDLK_TAB, PBTN_L },
42 { SDLK_BACKSPACE, PBTN_R },
43};
58fc34b1 44const int in_sdl_key_map_sz = sizeof(_in_sdl_key_map) / sizeof(_in_sdl_key_map[0]);
45const struct menu_keymap *in_sdl_key_map = _in_sdl_key_map;
d4bea61c 46
58fc34b1 47const struct menu_keymap _in_sdl_joy_map[] = {
b437951a 48 { SDLK_UP, PBTN_UP },
49 { SDLK_DOWN, PBTN_DOWN },
50 { SDLK_LEFT, PBTN_LEFT },
51 { SDLK_RIGHT, PBTN_RIGHT },
52 /* joystick */
53 { SDLK_WORLD_0, PBTN_MOK },
54 { SDLK_WORLD_1, PBTN_MBACK },
55 { SDLK_WORLD_2, PBTN_MA2 },
56 { SDLK_WORLD_3, PBTN_MA3 },
57};
58fc34b1 58const int in_sdl_joy_map_sz = sizeof(_in_sdl_joy_map) / sizeof(_in_sdl_joy_map[0]);
59const struct menu_keymap *in_sdl_joy_map = _in_sdl_joy_map;
b437951a 60
58fc34b1 61const char * _in_sdl_key_names[SDLK_LAST] = {
62 /* common */
d4bea61c
PC
63 [SDLK_UP] = "UP",
64 [SDLK_DOWN] = "DOWN",
65 [SDLK_LEFT] = "LEFT",
66 [SDLK_RIGHT] = "RIGHT",
67 [SDLK_LCTRL] = "A",
68 [SDLK_LALT] = "B",
8c54e0dd 69 [SDLK_LSHIFT] = "Y",
70 [SDLK_SPACE] = "X",
d4bea61c
PC
71 [SDLK_RETURN] = "START",
72 [SDLK_ESCAPE] = "SELECT",
250c8ffb 73 [SDLK_TAB] = "L1",
74 [SDLK_BACKSPACE] = "R1",
58fc34b1 75
76 /* opendingux rg, gkd etc */
250c8ffb 77 [SDLK_PAGEUP] = "L2",
78 [SDLK_PAGEDOWN] = "R2",
79 [SDLK_KP_DIVIDE] = "L3",
80 [SDLK_KP_PERIOD] = "R3",
81 [SDLK_HOME] = "POWER",
fb79e7ba 82 /* gkd (mini) */
83 /*[SDLK_HOME] = "MENU",*/
84 [SDLK_END] = "EXIT",
58fc34b1 85 /* gcw0 */
86 [SDLK_POWER] = "POWER",
87 [SDLK_PAUSE] = "LOCK",
88 /* miyoo */
89 [SDLK_RALT] = "L2",
90 [SDLK_RSHIFT] = "R2",
91 [SDLK_RCTRL] = "RESET",
fb79e7ba 92 /* retrofw */
93 [SDLK_LEFTBRACKET] = "SETUP", /* actually brightness setting */
94 /*[SDLK_END] = "POWER",*/
8c54e0dd 95};
58fc34b1 96const char * const *in_sdl_key_names = _in_sdl_key_names;
97
98
99static void nameset(int x1, const char *name)
100{
101 _in_sdl_key_names[x1] = name;
102}
103
104static void nameswap(int x1, int x2)
105{
106 const char **p = &_in_sdl_key_names[x1];
107 const char **q = &_in_sdl_key_names[x2];
108 const char *t = *p; *p = *q; *q = t;
109}
110
111static void keyswap(int k1, int k2)
112{
113 int x1, x2, t;
114
115 for (x1 = in_sdl_key_map_sz-1; x1 >= 0; x1--)
116 if (_in_sdl_key_map[x1].key == k1) break;
117 for (x2 = in_sdl_key_map_sz-1; x2 >= 0; x2--)
118 if (_in_sdl_key_map[x2].key == k2) break;
119 if (x1 >= 0 && x2 >= 0) {
120 struct menu_keymap *p = &_in_sdl_key_map[x1];
121 struct menu_keymap *q = &_in_sdl_key_map[x2];
122 t = p->pbtn; p->pbtn = q->pbtn; q->pbtn = t;
123 }
124}
125
c12b126f 126static void bindswap(int k1, int k2)
127{
128 int i;
129
130 for (i = 0; _in_sdl_defbinds[i].code; i++)
131 if (_in_sdl_defbinds[i].code == k1)
132 _in_sdl_defbinds[i].code = k2;
133}
134
58fc34b1 135void plat_target_setup_input(void)
136{
137 if (strcmp(plat_device, "miyoo") == 0) {
138 /* swapped A/B and X/Y keys */
139 keyswap(SDLK_LALT, SDLK_LCTRL);
140 nameswap(SDLK_LALT, SDLK_LCTRL);
141 nameswap(SDLK_SPACE, SDLK_LSHIFT);
c12b126f 142 bindswap(SDLK_ESCAPE, SDLK_RCTRL);
58fc34b1 143 } else if (strcmp(plat_device, "gcw0") == 0) {
144 /* swapped X/Y keys, single L/R keys */
145 nameswap(SDLK_SPACE, SDLK_LSHIFT);
146 nameset(SDLK_TAB, "L"); nameset(SDLK_BACKSPACE, "R");
147 } else if (strcmp(plat_device, "retrofw") == 0 || strcmp(plat_device, "dingux") == 0) {
148 /* single L/R keys */
149 nameset(SDLK_TAB, "L"); nameset(SDLK_BACKSPACE, "R");
fb79e7ba 150 nameset(SDLK_END, "POWER");
58fc34b1 151 }
152}