Cleanup and moving of NanoCoat VM specific headers to their own include directory...
[SquirrelJME.git] / nanocoat / frontend / libretro / input.c
blob4b2e1f7025d58e78a00354b85929259725199b7a
1 /* -*- Mode: C; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
3 // SquirrelJME
4 // Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
5 // ---------------------------------------------------------------------------
6 // SquirrelJME is under the Mozilla Public License Version 2.0.
7 // See license.mkd for licensing and copyright information.
8 // -------------------------------------------------------------------------*/
10 #include <string.h>
12 #include "sjme/nvm/nvm.h"
13 #include "sjme/debug.h"
14 #include "3rdparty/libretro/libretro.h"
15 #include "frontend/libretro/shared.h"
17 /** The description of input controls. */
18 const struct retro_controller_description sjme_libretro_inputControlDesc[] =
20 {"Dial Pad", RETRO_DEVICE_JOYPAD},
21 {"Game Pad", RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1)}
24 /** Controller information. */
25 const struct retro_controller_info sjme_libretro_inputControllers[] =
27 {sjme_libretro_inputControlDesc, 2},
28 {0, 0}
31 /** Input descriptions:
32 * [SOFT LEFT] [SOFT RIGHT]
33 * [BACK]
34 * [1 o~o] [2 abc] [3 def]
35 * [4 ghi] [5 jkl] [6 mno]
36 * [7 pqrs] [8 tuv] [9 wxyz]
37 * [* shf] [0 +] [# spac]
38 * RetroPad looks like so:
39 * X-1
40 * Y-7 A-3
41 * B-9
43 static const struct retro_input_descriptor sjme_libretro_descDialPad[] =
45 /* SOFT LEFT. */
46 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
47 RETRO_DEVICE_ID_JOYPAD_SELECT, "Soft 1 (Left Shoulder)"},
49 /* SOFT RIGHT. */
50 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
51 RETRO_DEVICE_ID_JOYPAD_START, "Soft 2 (Right Shoulder)"},
53 /* [1 o~o] */
54 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
55 RETRO_DEVICE_ID_JOYPAD_X, "1 Voicemail (Game A)"},
57 /* [2 abc] */
58 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
59 RETRO_DEVICE_ID_JOYPAD_UP, "2 ABC (Game Up)"},
61 /* [3 def] */
62 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
63 RETRO_DEVICE_ID_JOYPAD_A, "3 DEF (Game B)"},
65 /* [4 ghi] */
66 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
67 RETRO_DEVICE_ID_JOYPAD_LEFT, "4 GHI (Game Left)"},
69 /* [5 jkl] */
70 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
71 RETRO_DEVICE_ID_JOYPAD_L2, "5 JKL (Game Fire/Select)"},
73 /* [6 mno] */
74 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
75 RETRO_DEVICE_ID_JOYPAD_RIGHT, "6 MNO (Game Right)"},
77 /* [7 pqrs] */
78 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
79 RETRO_DEVICE_ID_JOYPAD_Y, "7 PQRS (Game C)"},
81 /* [8 tuv] */
82 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
83 RETRO_DEVICE_ID_JOYPAD_DOWN, "8 TUV (Game Down)"},
85 /* [9 wxyz] */
86 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
87 RETRO_DEVICE_ID_JOYPAD_B, "9 WXYZ (Game D)"},
89 /* [* shf] */
90 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
91 RETRO_DEVICE_ID_JOYPAD_L, "Star (Shift)"},
93 /* [0 +] */
94 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
95 RETRO_DEVICE_ID_JOYPAD_R2, "0 Operator (Plus)"},
97 /* [# spac] */
98 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
99 RETRO_DEVICE_ID_JOYPAD_R, "Pound (Space)"},
101 /* Touchscreen (via pointer). */
102 {SJME_LIBRETRO_POINTER_PORT, RETRO_DEVICE_POINTER, 0,
103 RETRO_DEVICE_ID_POINTER_X, "Touchscreen X"},
104 {SJME_LIBRETRO_POINTER_PORT, RETRO_DEVICE_POINTER, 0,
105 RETRO_DEVICE_ID_POINTER_Y, "Touchscreen Y"},
106 {SJME_LIBRETRO_POINTER_PORT, RETRO_DEVICE_POINTER, 0,
107 RETRO_DEVICE_ID_POINTER_PRESSED, "Touchscreen Pressed"},
109 /* End. */
110 {0, 0, 0, 0, NULL}
113 /** Game pad controller. */
114 static const struct retro_input_descriptor sjme_libretro_descGamePad[] =
116 /* Shoulders. */
117 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
118 RETRO_DEVICE_ID_JOYPAD_SELECT, "Soft 1 (Left Command)"},
119 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
120 RETRO_DEVICE_ID_JOYPAD_START, "Soft 2 (Right Command)"},
122 /* Digital pad. */
123 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
124 RETRO_DEVICE_ID_JOYPAD_UP, "Digital Up"},
125 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
126 RETRO_DEVICE_ID_JOYPAD_DOWN, "Digital Down"},
127 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
128 RETRO_DEVICE_ID_JOYPAD_LEFT, "Digital Left"},
129 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
130 RETRO_DEVICE_ID_JOYPAD_RIGHT, "Digital Right"},
131 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
132 RETRO_DEVICE_ID_JOYPAD_L, "Digital Center"},
134 /* Just Game Keys. */
135 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
136 RETRO_DEVICE_ID_JOYPAD_R, "Game Fire/Select"},
137 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
138 RETRO_DEVICE_ID_JOYPAD_X, "Game A"},
139 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
140 RETRO_DEVICE_ID_JOYPAD_A, "Game B"},
141 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
142 RETRO_DEVICE_ID_JOYPAD_Y, "Game C"},
143 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
144 RETRO_DEVICE_ID_JOYPAD_B, "Game D"},
146 /* Touchscreen (via pointer). */
147 {SJME_LIBRETRO_POINTER_PORT, RETRO_DEVICE_POINTER, 0,
148 RETRO_DEVICE_ID_POINTER_X, "Touchscreen X"},
149 {SJME_LIBRETRO_POINTER_PORT, RETRO_DEVICE_POINTER, 0,
150 RETRO_DEVICE_ID_POINTER_Y, "Touchscreen Y"},
151 {SJME_LIBRETRO_POINTER_PORT, RETRO_DEVICE_POINTER, 0,
152 RETRO_DEVICE_ID_POINTER_PRESSED, "Touchscreen Pressed"},
154 /* End. */
155 {0, 0, 0, 0, NULL}
158 #if defined(RETRO_ENVIRONMENT_SET_EXTENDED_RETROPAD)
159 /** Extra core buttons. */
160 static const struct retro_core_extended_retropad_button
161 sjme_libretro_descExtPad[] =
163 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
164 SJME_LIBRETRO_EXTRA_ID_SOFT_THREE,
165 "Soft 3 (Middle Command)", NULL},
167 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
168 SJME_LIBRETRO_EXTRA_ID_VOLUME_UP,
169 "Volume Up", NULL},
170 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
171 SJME_LIBRETRO_EXTRA_ID_VOLUME_DOWN,
172 "Volume Down", NULL},
174 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
175 SJME_LIBRETRO_EXTRA_ID_START_CALL,
176 "Start Call", NULL},
177 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
178 SJME_LIBRETRO_EXTRA_ID_END_CALL,
179 "End Call", NULL},
181 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
182 SJME_LIBRETRO_EXTRA_ID_IAPPLI,
183 "i-Appli/i-Mode Button", NULL},
184 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
185 SJME_LIBRETRO_EXTRA_ID_CAMERA,
186 "Camera Button", NULL},
187 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
188 SJME_LIBRETRO_EXTRA_ID_WEB_BROWSER,
189 "Web Browser Button", NULL},
190 {SJME_LIBRETRO_JOYPAD_PORT, RETRO_DEVICE_JOYPAD, 0,
191 SJME_LIBRETRO_EXTRA_ID_STOREFRONT,
192 "Storefront Button", NULL},
194 /* End. */
195 {0, 0, 0, 0, NULL, NULL}
198 static void sjme_libretro_inputSetExtPad(void)
200 struct retro_core_extended_retropad config;
202 /* Setup config. */
203 memset(&config, 0, sizeof(config));
204 config.actions = sjme_libretro_descExtPad;
206 /* Initialize extra commands accordingly. */
207 sjme_libretro_envCallback(RETRO_ENVIRONMENT_SET_EXTENDED_RETROPAD,
208 (void*)&config);
210 #endif
212 sjme_attrUnused RETRO_API void retro_set_input_poll(retro_input_poll_t poll)
214 static sjme_jint trigger;
215 if (!(trigger++))
216 sjme_message("Impl. %s?", __func__);
219 sjme_attrUnused RETRO_API void retro_set_input_state(
220 retro_input_state_t state)
222 static sjme_jint trigger;
223 if (!(trigger++))
224 sjme_message("Impl. %s?", __func__);
227 sjme_attrUnused RETRO_API void retro_set_controller_port_device(
228 unsigned port, unsigned device)
230 const struct retro_input_descriptor* baseDesc;
231 sjme_jint numBaseDesc, at;
233 /* Which device to use? */
234 if (device == RETRO_DEVICE_JOYPAD)
235 baseDesc = sjme_libretro_descDialPad;
236 else
237 baseDesc = sjme_libretro_descGamePad;
239 /* Count the number of base desc items. */
240 numBaseDesc = 0;
241 for (at = 0; baseDesc[at].description != NULL; at++)
242 numBaseDesc++;
244 /* Extended controls. */
245 #if defined(RETRO_ENVIRONMENT_SET_EXTENDED_RETROPAD)
246 sjme_libretro_inputSetExtPad();
247 #endif
249 /* Set standard controls. */
250 sjme_libretro_envCallback(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS,
251 (void*)baseDesc);
253 /* Set input controllers. */
254 sjme_libretro_envCallback(RETRO_ENVIRONMENT_SET_CONTROLLER_INFO,
255 (void*)&sjme_libretro_inputControllers);