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 #ifndef UAE_INPUTDEVICE_H 11 #define UAE_INPUTDEVICE_H 12 13 #include "uae/types.h" 14 #ifdef FSUAE 15 #include "options.h" 16 #endif 17 18 #define DIR_LEFT_BIT 0 19 #define DIR_RIGHT_BIT 1 20 #define DIR_UP_BIT 2 21 #define DIR_DOWN_BIT 3 22 #define DIR_LEFT (1 << DIR_LEFT_BIT) 23 #define DIR_RIGHT (1 << DIR_RIGHT_BIT) 24 #define DIR_UP (1 << DIR_UP_BIT) 25 #define DIR_DOWN (1 << DIR_DOWN_BIT) 26 27 #define JOYBUTTON_1 0 /* fire/left mousebutton */ 28 #define JOYBUTTON_2 1 /* 2nd/right mousebutton */ 29 #define JOYBUTTON_3 2 /* 3rd/middle mousebutton */ 30 #define JOYBUTTON_CD32_PLAY 3 31 #define JOYBUTTON_CD32_RWD 4 32 #define JOYBUTTON_CD32_FFW 5 33 #define JOYBUTTON_CD32_GREEN 6 34 #define JOYBUTTON_CD32_YELLOW 7 35 #define JOYBUTTON_CD32_RED 8 36 #define JOYBUTTON_CD32_BLUE 9 37 38 #define IDTYPE_JOYSTICK 0 39 #define IDTYPE_MOUSE 1 40 #define IDTYPE_KEYBOARD 2 41 #define IDTYPE_INTERNALEVENT 3 42 #define IDTYPE_MAX 4 43 44 struct inputdevice_functions { 45 int (*init)(void); 46 void (*close)(void); 47 int (*acquire)(int,int); 48 void (*unacquire)(int); 49 void (*read)(void); 50 int (*get_num)(void); 51 TCHAR* (*get_friendlyname)(int); 52 TCHAR* (*get_uniquename)(int); 53 int (*get_widget_num)(int); 54 int (*get_widget_type)(int,int,TCHAR*,uae_u32*); 55 int (*get_widget_first)(int,int); 56 int (*get_flags)(int); 57 }; 58 extern struct inputdevice_functions inputdevicefunc_joystick; 59 extern struct inputdevice_functions inputdevicefunc_mouse; 60 extern struct inputdevice_functions inputdevicefunc_keyboard; 61 extern int pause_emulation; 62 63 struct uae_input_device_default_node 64 { 65 int evt; 66 uae_u64 flags; 67 }; 68 69 struct uae_input_device_kbr_default { 70 int scancode; 71 struct uae_input_device_default_node node[MAX_INPUT_SUB_EVENT]; 72 }; 73 74 struct inputevent { 75 const TCHAR *confname; 76 const TCHAR *name; 77 const TCHAR *shortname; 78 int allow_mask; 79 int type; 80 int unit; 81 int data; 82 int portid; 83 }; 84 85 #define MAX_INPUT_QUALIFIERS (8 + 5) 86 87 /* event flags */ 88 #define ID_FLAG_AUTOFIRE 1 89 #define ID_FLAG_TOGGLE 2 90 #define ID_FLAG_GAMEPORTSCUSTOM1 4 91 #define ID_FLAG_GAMEPORTSCUSTOM2 8 92 #define ID_FLAG_INVERTTOGGLE 16 93 #define ID_FLAG_INVERT 32 94 #define ID_FLAG_RESERVEDGAMEPORTSCUSTOM 64 95 #define ID_FLAG_SET_ONOFF 128 96 #define ID_FLAG_SET_ONOFF_VAL 256 97 98 #define ID_FLAG_GAMEPORTSCUSTOM_MASK (ID_FLAG_GAMEPORTSCUSTOM1 | ID_FLAG_GAMEPORTSCUSTOM2) 99 #define ID_FLAG_AUTOFIRE_MASK (ID_FLAG_TOGGLE | ID_FLAG_INVERTTOGGLE | ID_FLAG_AUTOFIRE) 100 101 #define ID_FLAG_QUALIFIER1 0x000000100000000ULL 102 #define ID_FLAG_QUALIFIER1_R 0x000000200000000ULL 103 #define ID_FLAG_QUALIFIER2 0x000000400000000ULL 104 #define ID_FLAG_QUALIFIER3 0x000001000000000ULL 105 #define ID_FLAG_QUALIFIER4 0x000004000000000ULL 106 #define ID_FLAG_QUALIFIER5 0x000010000000000ULL 107 #define ID_FLAG_QUALIFIER6 0x000040000000000ULL 108 #define ID_FLAG_QUALIFIER7 0x000100000000000ULL 109 #define ID_FLAG_QUALIFIER8 0x000400000000000ULL 110 #define ID_FLAG_QUALIFIER_SPECIAL 0x001000000000000ULL 111 #define ID_FLAG_QUALIFIER_SPECIAL_R 0x002000000000000ULL 112 #define ID_FLAG_QUALIFIER_SHIFT 0x004000000000000ULL 113 #define ID_FLAG_QUALIFIER_CONTROL 0x010000000000000ULL 114 #define ID_FLAG_QUALIFIER_ALT 0x040000000000000ULL 115 #define ID_FLAG_QUALIFIER_WIN 0x100000000000000ULL 116 #define ID_FLAG_QUALIFIER_MASK 0xfffffff00000000ULL 117 #define ID_FLAG_QUALIFIER_MASK_R 0xaaaaaaa00000000ULL 118 119 #define ID_FLAG_SAVE_MASK_CONFIG 0x000001ff 120 #define ID_FLAG_SAVE_MASK_QUALIFIERS ID_FLAG_QUALIFIER_MASK 121 #define ID_FLAG_SAVE_MASK_FULL (ID_FLAG_SAVE_MASK_CONFIG | ID_FLAG_SAVE_MASK_QUALIFIERS) 122 123 #define IDEV_WIDGET_NONE 0 124 #define IDEV_WIDGET_BUTTON 1 125 #define IDEV_WIDGET_AXIS 2 126 #define IDEV_WIDGET_BUTTONAXIS 3 127 #define IDEV_WIDGET_KEY 4 128 129 #define IDEV_MAPPED_AUTOFIRE_POSSIBLE 1 130 #define IDEV_MAPPED_AUTOFIRE_SET 2 131 #define IDEV_MAPPED_TOGGLE 4 132 #define IDEV_MAPPED_INVERTTOGGLE 8 133 #define IDEV_MAPPED_GAMEPORTSCUSTOM1 16 134 #define IDEV_MAPPED_GAMEPORTSCUSTOM2 32 135 #define IDEV_MAPPED_INVERT 64 136 #define IDEV_MAPPED_SET_ONOFF 128 137 #define IDEV_MAPPED_SET_ONOFF_VAL 256 138 139 #define IDEV_MAPPED_QUALIFIER1 0x000000100000000ULL 140 #define IDEV_MAPPED_QUALIFIER2 0x000000400000000ULL 141 #define IDEV_MAPPED_QUALIFIER3 0x000001000000000ULL 142 #define IDEV_MAPPED_QUALIFIER4 0x000004000000000ULL 143 #define IDEV_MAPPED_QUALIFIER5 0x000010000000000ULL 144 #define IDEV_MAPPED_QUALIFIER6 0x000040000000000ULL 145 #define IDEV_MAPPED_QUALIFIER7 0x000100000000000ULL 146 #define IDEV_MAPPED_QUALIFIER8 0x000400000000000ULL 147 #define IDEV_MAPPED_QUALIFIER_SPECIAL 0x001000000000000ULL 148 #define IDEV_MAPPED_QUALIFIER_SHIFT 0x004000000000000ULL 149 #define IDEV_MAPPED_QUALIFIER_CONTROL 0x010000000000000ULL 150 #define IDEV_MAPPED_QUALIFIER_ALT 0x040000000000000ULL 151 #define IDEV_MAPPED_QUALIFIER_WIN 0x100000000000000ULL 152 #define IDEV_MAPPED_QUALIFIER_MASK 0xfffffff00000000ULL 153 154 #define SET_ONOFF_ON_VALUE 0x7fffff01 155 #define SET_ONOFF_OFF_VALUE 0x7fffff00 156 157 #define ID_BUTTON_OFFSET 0 158 #define ID_BUTTON_TOTAL 32 159 #define ID_AXIS_OFFSET 32 160 #define ID_AXIS_TOTAL 32 161 162 #define MAX_COMPA_INPUTLIST 30 163 164 /* event masks */ 165 #define AM_KEY 1 /* keyboard allowed */ 166 #define AM_JOY_BUT 2 /* joystick buttons allowed */ 167 #define AM_JOY_AXIS 4 /* joystick axis allowed */ 168 #define AM_MOUSE_BUT 8 /* mouse buttons allowed */ 169 #define AM_MOUSE_AXIS 16 /* mouse direction allowed */ 170 #define AM_AF 32 /* supports autofire */ 171 #define AM_INFO 64 /* information data for gui */ 172 #define AM_DUMMY 128 /* placeholder */ 173 #define AM_CUSTOM 256 /* custom event */ 174 #define AM_SETTOGGLE 512 /* on/off/toggle */ 175 #define AM_K (AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT|AM_AF) /* generic button/switch */ 176 #define AM_KK (AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT) 177 #define AM_KT (AM_K|AM_SETTOGGLE) 178 179 extern int inputdevice_iterate (int devnum, int num, TCHAR *name, int *af); 180 extern bool inputdevice_set_gameports_mapping (struct uae_prefs *prefs, int devnum, int num, int evtnum, uae_u64 flags, int port, int input_selected_setting); 181 extern int inputdevice_set_mapping (int devnum, int num, const TCHAR *name, TCHAR *custom, uae_u64 flags, int port, int sub); 182 extern int inputdevice_get_mapping (int devnum, int num, uae_u64 *pflags, int *port, TCHAR *name, TCHAR *custom, int sub); 183 extern void inputdevice_copyconfig (const struct uae_prefs *src, struct uae_prefs *dst); 184 extern void inputdevice_copy_single_config (struct uae_prefs *p, int src, int dst, int devnum, int selectedwidget); 185 extern void inputdevice_swap_ports (struct uae_prefs *p, int devnum); 186 extern void inputdevice_swap_compa_ports (struct uae_prefs *p, int portswap); 187 extern void inputdevice_config_change (void); 188 extern int inputdevice_config_change_test (void); 189 extern int inputdevice_get_device_index (int devnum); 190 extern TCHAR *inputdevice_get_device_name (int type, int devnum); 191 extern TCHAR *inputdevice_get_device_name2 (int devnum); 192 extern TCHAR *inputdevice_get_device_unique_name (int type, int devnum); 193 extern int inputdevice_get_device_status (int devnum); 194 extern void inputdevice_set_device_status (int devnum, int enabled); 195 extern int inputdevice_get_device_total (int type); 196 extern int inputdevice_get_widget_num (int devnum); 197 extern int inputdevice_get_widget_type (int devnum, int num, TCHAR *name); 198 199 extern int input_get_default_mouse (struct uae_input_device *uid, int num, int port, int af, bool gp, bool wheel, bool joymouseswap); 200 extern int input_get_default_lightpen (struct uae_input_device *uid, int num, int port, int af, bool gp, bool joymouseswap); 201 extern int input_get_default_joystick (struct uae_input_device *uid, int num, int port, int af, int mode, bool gp, bool joymouseswap); 202 extern int input_get_default_joystick_analog (struct uae_input_device *uid, int num, int port, int af, bool gp, bool joymouseswap); 203 extern int input_get_default_keyboard (int num); 204 205 #define DEFEVENT(A, B, C, D, E, F) INPUTEVENT_ ## A, 206 #define DEFEVENT2(A, B, B2, C, D, E, F, G) INPUTEVENT_ ## A, 207 enum inputevents { 208 INPUTEVENT_ZERO, 209 #include "../inputevents.def" 210 INPUTEVENT_END 211 }; 212 #undef DEFEVENT 213 #undef DEFEVENT2 214 215 extern void handle_cd32_joystick_cia (uae_u8, uae_u8); 216 extern uae_u8 handle_parport_joystick (int port, uae_u8 pra, uae_u8 dra); 217 extern uae_u8 handle_joystick_buttons (uae_u8, uae_u8); 218 219 #define MAGICMOUSE_BOTH 0 220 #define MAGICMOUSE_NATIVE_ONLY 1 221 #define MAGICMOUSE_HOST_ONLY 2 222 223 extern int magicmouse_alive (void); 224 extern int is_tablet (void); 225 extern int inputdevice_is_tablet (void); 226 extern int input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr vp, uae_u32 moffset); 227 extern void input_mousehack_mouseoffset (uaecptr pointerprefs); 228 extern int mousehack_alive (void); 229 extern void mousehack_wakeup(void); 230 extern void mousehack_write(int reg, uae_u16 val); 231 extern void setmouseactive (int); 232 extern bool ismouseactive (void); 233 234 extern void setmousebuttonstateall (int mouse, uae_u32 buttonbits, uae_u32 buttonmask); 235 extern void setjoybuttonstateall (int joy, uae_u32 buttonbits, uae_u32 buttonmask); 236 extern void setjoybuttonstate (int joy, int button, int state); 237 extern void setmousebuttonstate (int mouse, int button, int state); 238 extern void setjoystickstate (int joy, int axle, int state, int max); 239 extern int getjoystickstate (int mouse); 240 void setmousestate (int mouse, int axis, int data, int isabs); 241 extern int getmousestate (int mouse); 242 extern void inputdevice_updateconfig (const struct uae_prefs *srcprefs, struct uae_prefs *dstprefs); 243 extern void inputdevice_updateconfig_internal (const struct uae_prefs *srcprefs, struct uae_prefs *dstprefs); 244 extern void inputdevice_devicechange (struct uae_prefs *prefs); 245 246 #define INTERNALEVENT_CPURESET 0 247 #define INTERNALEVENT_KBRESET 1 248 249 extern void send_internalevent (int eventid); 250 251 extern int inputdevice_translatekeycode (int keyboard, int scancode, int state); 252 extern void inputdevice_checkqualifierkeycode (int keyboard, int scancode, int state); 253 extern void inputdevice_setkeytranslation (struct uae_input_device_kbr_default **trans, int **kbmaps); 254 extern void inputdevice_do_keyboard (int code, int state); 255 extern int inputdevice_iskeymapped (int keyboard, int scancode); 256 extern int inputdevice_synccapslock (int, int*); 257 extern void inputdevice_testrecord (int type, int num, int wtype, int wnum, int state, int max); 258 extern int inputdevice_get_compatibility_input (struct uae_prefs*, int index, int *typelist, int *inputlist, const int **at); 259 extern const struct inputevent *inputdevice_get_eventinfo (int evt); 260 extern bool inputdevice_get_eventname (const struct inputevent *ie, TCHAR *out); 261 extern void inputdevice_compa_prepare_custom (struct uae_prefs *prefs, int index, int mode, bool removeold); 262 extern void inputdevice_compa_clear (struct uae_prefs *prefs, int index); 263 extern int intputdevice_compa_get_eventtype (int evt, const int **axistable); 264 extern void inputdevice_sparecopy (struct uae_input_device *uid, int num, int sub); 265 extern void inputdevice_parse_jport_custom(struct uae_prefs *pr, int index, int port, TCHAR *outname); 266 extern void inputdevice_generate_jport_custom(struct uae_prefs *pr, int port); 267 268 extern uae_u16 potgo_value; 269 extern uae_u16 POTGOR (void); 270 extern void POTGO (uae_u16 v); 271 extern uae_u16 POT0DAT (void); 272 extern uae_u16 POT1DAT (void); 273 extern void JOYTEST (uae_u16 v); 274 extern uae_u16 JOY0DAT (void); 275 extern uae_u16 JOY1DAT (void); 276 extern void JOYSET (int num, uae_u16 v); 277 extern uae_u16 JOYGET (int num); 278 279 extern void inputdevice_vsync (void); 280 extern void inputdevice_hsync (void); 281 extern void inputdevice_reset (void); 282 283 extern void write_inputdevice_config (struct uae_prefs *p, struct zfile *f); 284 extern void read_inputdevice_config (struct uae_prefs *p, const TCHAR *option, TCHAR *value); 285 extern void reset_inputdevice_config (struct uae_prefs *pr); 286 extern int inputdevice_joyport_config(struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type); 287 extern void inputdevice_joyport_config_store(struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type); 288 extern int inputdevice_getjoyportdevice (int port, int val); 289 extern void inputdevice_validate_jports (struct uae_prefs *p, int changedport, bool *fixedports); 290 extern void inputdevice_fix_prefs(struct uae_prefs *p); 291 extern void inputdevice_config_load_start(struct uae_prefs *p); 292 293 extern void inputdevice_init (void); 294 extern void inputdevice_close (void); 295 extern void inputdevice_default_prefs (struct uae_prefs *p); 296 297 extern void inputdevice_acquire (int allmode); 298 extern void inputdevice_unacquire(void); 299 extern void inputdevice_unacquire(bool emulationactive, int inputmask); 300 301 extern void indicator_leds (int num, int state); 302 303 extern void warpmode (int mode); 304 extern void pausemode (int mode); 305 306 extern void inputdevice_add_inputcode (int code, int state); 307 extern void inputdevice_handle_inputcode (void); 308 309 extern void inputdevice_tablet (int x, int y, int z, 310 int pressure, uae_u32 buttonbits, int inproximity, 311 int ax, int ay, int az); 312 extern void inputdevice_tablet_info (int maxx, int maxy, int maxz, int maxax, int maxay, int maxaz, int xres, int yres); 313 extern void inputdevice_tablet_strobe (void); 314 315 extern uae_u64 input_getqualifiers (void); 316 317 extern void setsystime (void); 318 319 #define JSEM_MODE_DEFAULT 0 320 #define JSEM_MODE_WHEELMOUSE 1 321 #define JSEM_MODE_MOUSE 2 322 #define JSEM_MODE_JOYSTICK 3 323 #define JSEM_MODE_GAMEPAD 4 324 #define JSEM_MODE_JOYSTICK_ANALOG 5 325 #define JSEM_MODE_MOUSE_CDTV 6 326 #define JSEM_MODE_JOYSTICK_CD32 7 327 #define JSEM_MODE_LIGHTPEN 8 328 329 #define JSEM_KBDLAYOUT 0 330 #define JSEM_CUSTOM 10 331 #define JSEM_JOYS 100 332 #define JSEM_MICE 200 333 #define JSEM_END 300 334 #define JSEM_DECODEVAL(port,p) ((p)->jports[port].id) 335 #define JSEM_ISNUMPAD(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT) 336 #define JSEM_ISCURSOR(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 1) 337 #define JSEM_ISSOMEWHEREELSE(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 2) 338 #define JSEM_ISCUSTOM(port,p) ((p)->jports[port].id >= JSEM_CUSTOM && (p)->jports[port].id < JSEM_CUSTOM + MAX_JPORTS_CUSTOM) 339 #define JSEM_GETCUSTOMIDX(port,p) ((p)->jports[port].id - JSEM_CUSTOM) 340 #define JSEM_LASTKBD 3 341 #define JSEM_ISANYKBD(port,p) (jsem_iskbdjoy(port,p) >= JSEM_KBDLAYOUT && jsem_iskbdjoy(port,p) < JSEM_KBDLAYOUT + JSEM_LASTKBD) 342 343 extern int jsem_isjoy (int port, const struct uae_prefs *p); 344 extern int jsem_ismouse (int port, const struct uae_prefs *p); 345 extern int jsem_iskbdjoy (int port, const struct uae_prefs *p); 346 347 extern int inputdevice_uaelib (const TCHAR *, const TCHAR *); 348 extern int inputdevice_uaelib(const TCHAR *s, int parm, int max, bool autofire); 349 350 extern int inputdevice_testread (int*, int*, int*, bool); 351 extern int inputdevice_istest (void); 352 extern void inputdevice_settest (int); 353 extern int inputdevice_testread_count (void); 354 355 extern bool target_can_autoswitchdevice(void); 356 357 #endif /* UAE_INPUTDEVICE_H */ 358