1 /*
2  * OpenBOR - http://www.LavaLit.com
3  * -----------------------------------------------------------------------
4  * All rights reserved, see LICENSE in OpenBOR root for details.
5  *
6  * Copyright (c) 2004 - 2011 OpenBOR Team
7  */
8 
9 #ifndef	CONTROL_H
10 #define	CONTROL_H
11 
12 // Generic control stuff (keyboard+joystick).
13 #if ANDROID || DARWIN || SDL2
14 #include "SDL_keycode.h"
15 #else
16 #include <SDL_keysym.h>
17 #endif
18 #include "joysticks.h"
19 
20 #ifdef OPENDINGUX
21 	#define	CONTROL_ESC                 OPENDINGUX_BUTTON_SELECT
22 	#define	CONTROL_DEFAULT1_START		OPENDINGUX_BUTTON_START
23 	#define	CONTROL_DEFAULT1_UP         OPENDINGUX_BUTTON_UP
24 	#define	CONTROL_DEFAULT1_DOWN		OPENDINGUX_BUTTON_DOWN
25 	#define	CONTROL_DEFAULT1_LEFT		OPENDINGUX_BUTTON_LEFT
26 	#define	CONTROL_DEFAULT1_RIGHT		OPENDINGUX_BUTTON_RIGHT
27 	#define	CONTROL_DEFAULT1_FIRE1		OPENDINGUX_BUTTON_A
28 	#define	CONTROL_DEFAULT1_FIRE2		OPENDINGUX_BUTTON_Y
29 	#define	CONTROL_DEFAULT1_FIRE3		OPENDINGUX_BUTTON_R
30 	#define	CONTROL_DEFAULT1_FIRE4		OPENDINGUX_BUTTON_L
31 	#define	CONTROL_DEFAULT1_FIRE5		OPENDINGUX_BUTTON_B
32 	#define	CONTROL_DEFAULT1_FIRE6		OPENDINGUX_BUTTON_X
33 	#define	CONTROL_DEFAULT1_SCREENSHOT	SDLK_F12
34 #elif GP2X
35 	#define	CONTROL_ESC                 (JOY_LIST_FIRST + 15)
36 	#define	CONTROL_DEFAULT1_UP         (JOY_LIST_FIRST + 1)
37 	#define	CONTROL_DEFAULT1_RIGHT		(JOY_LIST_FIRST + 2)
38 	#define	CONTROL_DEFAULT1_DOWN		(JOY_LIST_FIRST + 3)
39 	#define	CONTROL_DEFAULT1_LEFT		(JOY_LIST_FIRST + 4)
40 	#define CONTROL_DEFAULT1_FIRE1		(JOY_LIST_FIRST + 5)
41 	#define CONTROL_DEFAULT1_FIRE2		(JOY_LIST_FIRST + 6)
42 	#define	CONTROL_DEFAULT1_FIRE3		(JOY_LIST_FIRST + 7)
43 	#define	CONTROL_DEFAULT1_FIRE4		(JOY_LIST_FIRST + 8)
44 	#define	CONTROL_DEFAULT1_FIRE5		(JOY_LIST_FIRST + 9)
45 	#define	CONTROL_DEFAULT1_FIRE6		(JOY_LIST_FIRST + 10)
46 	#define CONTROL_DEFAULT1_START		(JOY_LIST_FIRST + 11)
47 	#define CONTROL_DEFAULT1_SCREENSHOT (JOY_LIST_FIRST + 12)
48 #else
49 #ifdef SDL2
50 	#define	CONTROL_ESC                 SDL_SCANCODE_ESCAPE
51 	#define	CONTROL_DEFAULT1_START		SDL_SCANCODE_RETURN
52 	#define	CONTROL_DEFAULT1_UP         SDL_SCANCODE_UP
53 	#define	CONTROL_DEFAULT1_DOWN		SDL_SCANCODE_DOWN
54 	#define	CONTROL_DEFAULT1_LEFT		SDL_SCANCODE_LEFT
55 	#define	CONTROL_DEFAULT1_RIGHT		SDL_SCANCODE_RIGHT
56 	#define	CONTROL_DEFAULT1_FIRE1		SDL_SCANCODE_A
57 	#define	CONTROL_DEFAULT1_FIRE2		SDL_SCANCODE_S
58 	#define	CONTROL_DEFAULT1_FIRE3		SDL_SCANCODE_Z
59 	#define	CONTROL_DEFAULT1_FIRE4		SDL_SCANCODE_X
60 	#define	CONTROL_DEFAULT1_FIRE5		SDL_SCANCODE_D
61 	#define	CONTROL_DEFAULT1_FIRE6		SDL_SCANCODE_F
62 	#define	CONTROL_DEFAULT1_SCREENSHOT	SDL_SCANCODE_F12
63 #else
64 	#define	CONTROL_ESC                 SDLK_ESCAPE
65 	#define	CONTROL_DEFAULT1_START		SDLK_RETURN
66 	#define	CONTROL_DEFAULT1_UP         SDLK_UP
67 	#define	CONTROL_DEFAULT1_DOWN		SDLK_DOWN
68 	#define	CONTROL_DEFAULT1_LEFT		SDLK_LEFT
69 	#define	CONTROL_DEFAULT1_RIGHT		SDLK_RIGHT
70 	#define	CONTROL_DEFAULT1_FIRE1		SDLK_a
71 	#define	CONTROL_DEFAULT1_FIRE2		SDLK_s
72 	#define	CONTROL_DEFAULT1_FIRE3		SDLK_z
73 	#define	CONTROL_DEFAULT1_FIRE4		SDLK_x
74 	#define	CONTROL_DEFAULT1_FIRE5		SDLK_d
75 	#define	CONTROL_DEFAULT1_FIRE6		SDLK_f
76 	#define	CONTROL_DEFAULT1_SCREENSHOT	SDLK_F12
77 #endif
78 #endif
79 
80 #define	CONTROL_DEFAULT2_UP			((JOY_LIST_FIRST + 1) + JOY_MAX_INPUTS)
81 #define	CONTROL_DEFAULT2_RIGHT		((JOY_LIST_FIRST + 2) + JOY_MAX_INPUTS)
82 #define	CONTROL_DEFAULT2_DOWN		((JOY_LIST_FIRST + 3) + JOY_MAX_INPUTS)
83 #define	CONTROL_DEFAULT2_LEFT		((JOY_LIST_FIRST + 4) + JOY_MAX_INPUTS)
84 #define CONTROL_DEFAULT2_FIRE1		((JOY_LIST_FIRST + 5) + JOY_MAX_INPUTS)
85 #define CONTROL_DEFAULT2_FIRE2		((JOY_LIST_FIRST + 6) + JOY_MAX_INPUTS)
86 #define	CONTROL_DEFAULT2_FIRE3		((JOY_LIST_FIRST + 7) + JOY_MAX_INPUTS)
87 #define	CONTROL_DEFAULT2_FIRE4		((JOY_LIST_FIRST + 8) + JOY_MAX_INPUTS)
88 #define	CONTROL_DEFAULT2_FIRE5		((JOY_LIST_FIRST + 9) + JOY_MAX_INPUTS)
89 #define	CONTROL_DEFAULT2_FIRE6		((JOY_LIST_FIRST + 10) + JOY_MAX_INPUTS)
90 #define CONTROL_DEFAULT2_START		((JOY_LIST_FIRST + 11) + JOY_MAX_INPUTS)
91 #define CONTROL_DEFAULT2_SCREENSHOT ((JOY_LIST_FIRST + 12) + JOY_MAX_INPUTS)
92 
93 #define	CONTROL_DEFAULT3_UP			((JOY_LIST_FIRST + 1) + (JOY_MAX_INPUTS * 2))
94 #define	CONTROL_DEFAULT3_RIGHT		((JOY_LIST_FIRST + 2) + (JOY_MAX_INPUTS * 2))
95 #define	CONTROL_DEFAULT3_DOWN		((JOY_LIST_FIRST + 3) + (JOY_MAX_INPUTS * 2))
96 #define	CONTROL_DEFAULT3_LEFT		((JOY_LIST_FIRST + 4) + (JOY_MAX_INPUTS * 2))
97 #define CONTROL_DEFAULT3_FIRE1		((JOY_LIST_FIRST + 5) + (JOY_MAX_INPUTS * 2))
98 #define CONTROL_DEFAULT3_FIRE2		((JOY_LIST_FIRST + 6) + (JOY_MAX_INPUTS * 2))
99 #define	CONTROL_DEFAULT3_FIRE3		((JOY_LIST_FIRST + 7) + (JOY_MAX_INPUTS * 2))
100 #define	CONTROL_DEFAULT3_FIRE4		((JOY_LIST_FIRST + 8) + (JOY_MAX_INPUTS * 2))
101 #define	CONTROL_DEFAULT3_FIRE5		((JOY_LIST_FIRST + 9) + (JOY_MAX_INPUTS * 2))
102 #define	CONTROL_DEFAULT3_FIRE6		((JOY_LIST_FIRST + 10) + (JOY_MAX_INPUTS * 2))
103 #define CONTROL_DEFAULT3_START		((JOY_LIST_FIRST + 11) + (JOY_MAX_INPUTS * 2))
104 #define CONTROL_DEFAULT3_SCREENSHOT ((JOY_LIST_FIRST + 12) + (JOY_MAX_INPUTS * 2))
105 
106 #define	CONTROL_DEFAULT4_UP			((JOY_LIST_FIRST + 1) + (JOY_MAX_INPUTS * 3))
107 #define	CONTROL_DEFAULT4_RIGHT		((JOY_LIST_FIRST + 2) + (JOY_MAX_INPUTS * 3))
108 #define	CONTROL_DEFAULT4_DOWN		((JOY_LIST_FIRST + 3) + (JOY_MAX_INPUTS * 3))
109 #define	CONTROL_DEFAULT4_LEFT		((JOY_LIST_FIRST + 4) + (JOY_MAX_INPUTS * 3))
110 #define CONTROL_DEFAULT4_FIRE1		((JOY_LIST_FIRST + 5) + (JOY_MAX_INPUTS * 3))
111 #define CONTROL_DEFAULT4_FIRE2		((JOY_LIST_FIRST + 6) + (JOY_MAX_INPUTS * 3))
112 #define	CONTROL_DEFAULT4_FIRE3		((JOY_LIST_FIRST + 7) + (JOY_MAX_INPUTS * 3))
113 #define	CONTROL_DEFAULT4_FIRE4		((JOY_LIST_FIRST + 8) + (JOY_MAX_INPUTS * 3))
114 #define	CONTROL_DEFAULT4_FIRE5		((JOY_LIST_FIRST + 9) + (JOY_MAX_INPUTS * 3))
115 #define	CONTROL_DEFAULT4_FIRE6		((JOY_LIST_FIRST + 10) + (JOY_MAX_INPUTS * 3))
116 #define CONTROL_DEFAULT4_START		((JOY_LIST_FIRST + 11) + (JOY_MAX_INPUTS * 3))
117 #define CONTROL_DEFAULT4_SCREENSHOT ((JOY_LIST_FIRST + 12) + (JOY_MAX_INPUTS * 3))
118 
119 #define JOYBUTTON(index, btn) (1 + i * JOY_MAX_INPUTS + btn)
120 #define JOYAXIS(index, axis, dir) (JOYBUTTON(index, joysticks[index].NumButtons) + 2 * axis + dir)
121 
122 #ifdef SDL2
123 #define SDLK_FIRST SDL_SCANCODE_UNKNOWN
124 #define SDLK_LAST  SDL_NUM_SCANCODES
125 #define SDL_GetKeyState SDL_GetKeyboardState
126 #define SDL_JoystickName(x) SDL_JoystickName(joystick[x])
127 #endif
128 
129 
130 typedef struct{
131 	int		settings[JOY_MAX_INPUTS];
132 	u32		keyflags, newkeyflags;
133 	int		kb_break;
134 }s_playercontrols;
135 
136 void control_exit();
137 void control_init(int joy_enable);
138 int control_usejoy(int enable);
139 int control_getjoyenabled();
140 
141 void control_setkey(s_playercontrols * pcontrols, unsigned int flag, int key);
142 int control_scankey();
143 
144 char *control_getkeyname(unsigned int keycode);
145 void control_update(s_playercontrols ** playercontrols, int numplayers);
146 void control_rumble(int port, int msec);
147 int keyboard_getlastkey();
148 
149 #endif
150 
151