1 /* 2 * UAE - The Un*x Amiga Emulator 3 * 4 * Joystick, mouse and keyboard emulation prototypes and definitions 5 * 6 * Copyright 1995 Bernd Schmidt 7 * Copyright 2001-2002 Toni Wilen 8 */ 9 10 #define DIR_LEFT_BIT 0 11 #define DIR_RIGHT_BIT 1 12 #define DIR_UP_BIT 2 13 #define DIR_DOWN_BIT 3 14 #define DIR_LEFT (1 << DIR_LEFT_BIT) 15 #define DIR_RIGHT (1 << DIR_RIGHT_BIT) 16 #define DIR_UP (1 << DIR_UP_BIT) 17 #define DIR_DOWN (1 << DIR_DOWN_BIT) 18 19 #define JOYBUTTON_1 0 /* fire/left mousebutton */ 20 #define JOYBUTTON_2 1 /* 2nd/right mousebutton */ 21 #define JOYBUTTON_3 2 /* 3rd/middle mousebutton */ 22 #define JOYBUTTON_CD32_PLAY 3 23 #define JOYBUTTON_CD32_RWD 4 24 #define JOYBUTTON_CD32_FFW 5 25 #define JOYBUTTON_CD32_GREEN 6 26 #define JOYBUTTON_CD32_YELLOW 7 27 #define JOYBUTTON_CD32_RED 8 28 #define JOYBUTTON_CD32_BLUE 9 29 30 #define IDTYPE_JOYSTICK 0 31 #define IDTYPE_MOUSE 1 32 #define IDTYPE_KEYBOARD 2 33 #define IDTYPE_INTERNALEVENT 3 34 #define IDTYPE_MAX 4 35 36 struct inputdevice_functions { 37 int (*init) (void); 38 void (*close) (void); 39 int (*acquire) (int,int); 40 void (*unacquire) (int); 41 void (*read) (void); 42 int (*get_num) (void); 43 TCHAR* (*get_friendlyname) (int); 44 TCHAR* (*get_uniquename) (int); 45 int (*get_widget_num) (int); 46 int (*get_widget_type) (int,int,TCHAR*,uae_u32*); 47 int (*get_widget_first) (int,int); 48 int (*get_flags) (int); 49 }; 50 extern struct inputdevice_functions inputdevicefunc_joystick; 51 extern struct inputdevice_functions inputdevicefunc_mouse; 52 extern struct inputdevice_functions inputdevicefunc_keyboard; 53 extern int pause_emulation; 54 55 struct uae_input_device_default_node 56 { 57 int evt; 58 uae_u64 flags; 59 }; 60 61 struct uae_input_device_kbr_default { 62 int scancode; 63 struct uae_input_device_default_node node[MAX_INPUT_SUB_EVENT]; 64 }; 65 66 struct inputevent { 67 const TCHAR *confname; 68 const TCHAR *name; 69 int allow_mask; 70 int type; 71 int unit; 72 int data; 73 }; 74 75 #define MAX_INPUT_QUALIFIERS (8 + 5) 76 77 /* event flags */ 78 #define ID_FLAG_AUTOFIRE 1 79 #define ID_FLAG_TOGGLE 2 80 #define ID_FLAG_GAMEPORTSCUSTOM1 4 81 #define ID_FLAG_GAMEPORTSCUSTOM2 8 82 #define ID_FLAG_INVERTTOGGLE 16 83 #define ID_FLAG_INVERT 32 84 85 #define ID_FLAG_GAMEPORTSCUSTOM_MASK (ID_FLAG_GAMEPORTSCUSTOM1 | ID_FLAG_GAMEPORTSCUSTOM2) 86 #define ID_FLAG_AUTOFIRE_MASK (ID_FLAG_TOGGLE | ID_FLAG_INVERTTOGGLE | ID_FLAG_AUTOFIRE) 87 88 #define ID_FLAG_QUALIFIER1 0x000000100000000 89 #define ID_FLAG_QUALIFIER1_R 0x000000200000000 90 #define ID_FLAG_QUALIFIER2 0x000000400000000 91 #define ID_FLAG_QUALIFIER3 0x000001000000000 92 #define ID_FLAG_QUALIFIER4 0x000004000000000 93 #define ID_FLAG_QUALIFIER5 0x000010000000000 94 #define ID_FLAG_QUALIFIER6 0x000040000000000 95 #define ID_FLAG_QUALIFIER7 0x000100000000000 96 #define ID_FLAG_QUALIFIER8 0x000400000000000 97 #define ID_FLAG_QUALIFIER_SPECIAL 0x001000000000000 98 #define ID_FLAG_QUALIFIER_SPECIAL_R 0x002000000000000 99 #define ID_FLAG_QUALIFIER_SHIFT 0x004000000000000 100 #define ID_FLAG_QUALIFIER_CONTROL 0x010000000000000 101 #define ID_FLAG_QUALIFIER_ALT 0x040000000000000 102 #define ID_FLAG_QUALIFIER_WIN 0x100000000000000 103 #define ID_FLAG_QUALIFIER_MASK 0xfffffff00000000 104 #define ID_FLAG_QUALIFIER_MASK_R 0xaaaaaaa00000000 105 106 #define IDEV_WIDGET_NONE 0 107 #define IDEV_WIDGET_BUTTON 1 108 #define IDEV_WIDGET_AXIS 2 109 #define IDEV_WIDGET_BUTTONAXIS 3 110 #define IDEV_WIDGET_KEY 4 111 112 #define IDEV_MAPPED_AUTOFIRE_POSSIBLE 1 113 #define IDEV_MAPPED_AUTOFIRE_SET 2 114 #define IDEV_MAPPED_TOGGLE 4 115 #define IDEV_MAPPED_INVERTTOGGLE 8 116 #define IDEV_MAPPED_GAMEPORTSCUSTOM1 16 117 #define IDEV_MAPPED_GAMEPORTSCUSTOM2 32 118 #define IDEV_MAPPED_INVERT 64 119 #define IDEV_MAPPED_QUALIFIER1 0x000000100000000 120 #define IDEV_MAPPED_QUALIFIER2 0x000000400000000 121 #define IDEV_MAPPED_QUALIFIER3 0x000001000000000 122 #define IDEV_MAPPED_QUALIFIER4 0x000004000000000 123 #define IDEV_MAPPED_QUALIFIER5 0x000010000000000 124 #define IDEV_MAPPED_QUALIFIER6 0x000040000000000 125 #define IDEV_MAPPED_QUALIFIER7 0x000100000000000 126 #define IDEV_MAPPED_QUALIFIER8 0x000400000000000 127 #define IDEV_MAPPED_QUALIFIER_SPECIAL 0x001000000000000 128 #define IDEV_MAPPED_QUALIFIER_SHIFT 0x004000000000000 129 #define IDEV_MAPPED_QUALIFIER_CONTROL 0x010000000000000 130 #define IDEV_MAPPED_QUALIFIER_ALT 0x040000000000000 131 #define IDEV_MAPPED_QUALIFIER_WIN 0x100000000000000 132 #define IDEV_MAPPED_QUALIFIER_MASK 0xfffffff00000000 133 134 #define ID_BUTTON_OFFSET 0 135 #define ID_BUTTON_TOTAL 32 136 #define ID_AXIS_OFFSET 32 137 #define ID_AXIS_TOTAL 32 138 139 #define MAX_COMPA_INPUTLIST 30 140 141 int inputdevice_iterate (int devnum, int num, TCHAR *name, int *af); 142 bool inputdevice_set_gameports_mapping (struct uae_prefs *prefs, int devnum, int num, int evtnum, uae_u64 flags, int port); 143 int inputdevice_set_mapping (int devnum, int num, const TCHAR *name, TCHAR *custom, uae_u64 flags, int port, int sub); 144 int inputdevice_get_mapping (int devnum, int num, uae_u64 *pflags, int *port, TCHAR *name, TCHAR *custom, int sub); 145 void inputdevice_copyconfig (const struct uae_prefs *src, struct uae_prefs *dst); 146 void inputdevice_copy_single_config (struct uae_prefs *p, int src, int dst, int devnum, int selectedwidget); 147 void inputdevice_swap_ports (struct uae_prefs *p, int devnum); 148 void inputdevice_swap_compa_ports (struct uae_prefs *p, int portswap); 149 void inputdevice_config_change (void); 150 int inputdevice_config_change_test (void); 151 int inputdevice_get_device_index (int devnum); 152 TCHAR *inputdevice_get_device_name (int type, int devnum); 153 TCHAR *inputdevice_get_device_name2 (int devnum); 154 TCHAR *inputdevice_get_device_unique_name (int type, int devnum); 155 int inputdevice_get_device_status (int devnum); 156 void inputdevice_set_device_status (int devnum, int enabled); 157 int inputdevice_get_device_total (int type); 158 int inputdevice_get_widget_num (int devnum); 159 int inputdevice_get_widget_type (int devnum, int num, TCHAR *name); 160 161 int input_get_default_mouse (struct uae_input_device *uid, int num, int port, int af, bool gp, bool wheel); 162 int input_get_default_lightpen (struct uae_input_device *uid, int num, int port, int af, bool gp); 163 int input_get_default_joystick (struct uae_input_device *uid, int num, int port, int af, int mode, bool gp); 164 int input_get_default_joystick_analog (struct uae_input_device *uid, int num, int port, int af, bool gp); 165 int input_get_default_keyboard (int num); 166 167 #define DEFEVENT(A, B, C, D, E, F) INPUTEVENT_ ## A, 168 enum inputevents { 169 INPUTEVENT_ZERO, 170 #include "inputevents.def" 171 INPUTEVENT_END 172 }; 173 #undef DEFEVENT 174 175 void handle_cd32_joystick_cia (uae_u8, uae_u8); 176 uae_u8 handle_parport_joystick (int port, uae_u8 pra, uae_u8 dra); 177 uae_u8 handle_joystick_buttons (uae_u8, uae_u8); 178 179 #define MAGICMOUSE_BOTH 0 180 #define MAGICMOUSE_NATIVE_ONLY 1 181 #define MAGICMOUSE_HOST_ONLY 2 182 183 int magicmouse_alive (void); 184 int inputdevice_is_tablet (void); 185 int input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr vp, uae_u32 moffset); 186 void input_mousehack_mouseoffset (uaecptr pointerprefs); 187 int mousehack_alive (void); 188 void setmouseactive (int); 189 190 void setmousebuttonstateall (int mouse, uae_u32 buttonbits, uae_u32 buttonmask); 191 void setjoybuttonstateall (int joy, uae_u32 buttonbits, uae_u32 buttonmask); 192 void setjoybuttonstate (int joy, int button, int state); 193 void setmousebuttonstate (int mouse, int button, int state); 194 void setjoystickstate (int joy, int axle, int state, int max); 195 int getjoystickstate (int mouse); 196 void setmousestate (int mouse, int axis, int data, int isabs); 197 int getmousestate (int mouse); 198 void inputdevice_updateconfig (const struct uae_prefs *srcprefs, struct uae_prefs *dstprefs); 199 void inputdevice_updateconfig_internal (const struct uae_prefs *srcprefs, struct uae_prefs *dstprefs); 200 void inputdevice_devicechange (struct uae_prefs *prefs); 201 202 #define INTERNALEVENT_CPURESET 0 203 #define INTERNALEVENT_KBRESET 1 204 205 void send_internalevent (int eventid); 206 207 int inputdevice_translatekeycode (int keyboard, int scancode, int state); 208 void inputdevice_checkqualifierkeycode (int keyboard, int scancode, int state); 209 void inputdevice_setkeytranslation (struct uae_input_device_kbr_default **trans, int **kbmaps); 210 void inputdevice_do_keyboard (int code, int state); 211 int inputdevice_iskeymapped (int keyboard, int scancode); 212 int inputdevice_synccapslock (int, int*); 213 void inputdevice_testrecord (int type, int num, int wtype, int wnum, int state, int max); 214 int inputdevice_get_compatibility_input (struct uae_prefs*, int index, int *typelist, int *inputlist, const int **at); 215 struct inputevent *inputdevice_get_eventinfo (int evt); 216 bool inputdevice_get_eventname (const struct inputevent *ie, TCHAR *out); 217 void inputdevice_compa_prepare_custom (struct uae_prefs *prefs, int index, int mode, bool removeold); 218 void inputdevice_compa_clear (struct uae_prefs *prefs, int index); 219 int intputdevice_compa_get_eventtype (int evt, const int **axistable); 220 void inputdevice_sparecopy (struct uae_input_device *uid, int num, int sub); 221 222 uae_u16 potgo_value; 223 uae_u16 POTGOR (void); 224 void POTGO (uae_u16 v); 225 uae_u16 POT0DAT (void); 226 uae_u16 POT1DAT (void); 227 void JOYTEST (uae_u16 v); 228 uae_u16 JOY0DAT (void); 229 uae_u16 JOY1DAT (void); 230 void JOYSET (int num, uae_u16 v); 231 uae_u16 JOYGET (int num); 232 233 void inputdevice_vsync (void); 234 void inputdevice_hsync (void); 235 void inputdevice_reset (void); 236 237 void write_inputdevice_config (struct uae_prefs *p, struct zfile *f); 238 void read_inputdevice_config (struct uae_prefs *p, const TCHAR *option, TCHAR *value); 239 void reset_inputdevice_config (struct uae_prefs *pr); 240 int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type); 241 int inputdevice_getjoyportdevice (int port, int val); 242 243 void inputdevice_init (void); 244 void inputdevice_close (void); 245 void inputdevice_default_prefs (struct uae_prefs *p); 246 247 void inputdevice_acquire (int allmode); 248 void inputdevice_unacquire (void); 249 250 void indicator_leds (int num, int state); 251 252 void warpmode (int mode); 253 void pausemode (int mode); 254 255 void inputdevice_add_inputcode (int code, int state); 256 void inputdevice_handle_inputcode (void); 257 258 void inputdevice_tablet (int x, int y, int z, 259 int pressure, uae_u32 buttonbits, int inproximity, 260 int ax, int ay, int az); 261 void inputdevice_tablet_info (int maxx, int maxy, int maxz, int maxax, int maxay, int maxaz, int xres, int yres); 262 void inputdevice_tablet_strobe (void); 263 264 uae_u64 input_getqualifiers (void); 265 266 #define JSEM_MODE_DEFAULT 0 267 #define JSEM_MODE_WHEELMOUSE 1 268 #define JSEM_MODE_MOUSE 2 269 #define JSEM_MODE_JOYSTICK 3 270 #define JSEM_MODE_GAMEPAD 4 271 #define JSEM_MODE_JOYSTICK_ANALOG 5 272 #define JSEM_MODE_MOUSE_CDTV 6 273 #define JSEM_MODE_JOYSTICK_CD32 7 274 #define JSEM_MODE_LIGHTPEN 8 275 276 #define JSEM_KBDLAYOUT 0 277 #define JSEM_JOYS 100 278 #define JSEM_MICE 200 279 #define JSEM_END 300 280 #define JSEM_XARCADE1LAYOUT (JSEM_KBDLAYOUT + 3) 281 #define JSEM_XARCADE2LAYOUT (JSEM_KBDLAYOUT + 4) 282 #define JSEM_DECODEVAL(port,p) ((p)->jports[port].id) 283 #define JSEM_ISNUMPAD(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT) 284 #define JSEM_ISCURSOR(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 1) 285 #define JSEM_ISSOMEWHEREELSE(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 2) 286 #define JSEM_ISXARCADE1(port,p) (jsem_iskbdjoy(port,p) == JSEM_XARCADE1LAYOUT) 287 #define JSEM_ISXARCADE2(port,p) (jsem_iskbdjoy(port,p) == JSEM_XARCADE2LAYOUT) 288 #define JSEM_LASTKBD 5 289 #define JSEM_ISANYKBD(port,p) (jsem_iskbdjoy(port,p) >= JSEM_KBDLAYOUT && jsem_iskbdjoy(port,p) < JSEM_KBDLAYOUT + JSEM_LASTKBD) 290 291 int jsem_isjoy (int port, const struct uae_prefs *p); 292 int jsem_ismouse (int port, const struct uae_prefs *p); 293 int jsem_iskbdjoy (int port, const struct uae_prefs *p); 294 295 int inputdevice_uaelib (const TCHAR *, const TCHAR *); 296 297 int inputdevice_testread (int*, int*, int*, bool); 298 int inputdevice_istest (void); 299 void inputdevice_settest (int); 300 int inputdevice_testread_count (void); 301 302