1 /* RetroArch - A frontend for libretro. 2 * Copyright (C) 2010-2014 - Hans-Kristian Arntzen 3 * Copyright (C) 2011-2017 - Daniel De Matteis 4 * 5 * RetroArch is free software: you can redistribute it and/or modify it under the terms 6 * of the GNU General Public License as published by the Free Software Found- 7 * ation, either version 3 of the License, or (at your option) any later version. 8 * 9 * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 10 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 11 * PURPOSE. See the GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License along with RetroArch. 14 * If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17 #ifndef __INPUT_DEFINES__H 18 #define __INPUT_DEFINES__H 19 20 #include <stdint.h> 21 #include <string.h> 22 23 #include <retro_common_api.h> 24 25 RETRO_BEGIN_DECLS 26 27 #define MAX_USERS 16 28 29 #define MAX_INPUT_DEVICES 16 30 31 #define RARCH_MAX_KEYS 137 32 33 #define RARCH_FIRST_CUSTOM_BIND 16 34 #define RARCH_FIRST_LIGHTGUN_BIND RARCH_ANALOG_BIND_LIST_END 35 #define RARCH_FIRST_MISC_CUSTOM_BIND RARCH_LIGHTGUN_BIND_LIST_END 36 #define RARCH_FIRST_META_KEY RARCH_CUSTOM_BIND_LIST_END 37 38 #define RARCH_UNMAPPED 1024 39 40 /* RetroArch specific bind IDs. */ 41 enum 42 { 43 /* Custom binds that extend the scope of RETRO_DEVICE_JOYPAD for 44 * RetroArch specifically. 45 * Analogs (RETRO_DEVICE_ANALOG) */ 46 RARCH_ANALOG_LEFT_X_PLUS = RARCH_FIRST_CUSTOM_BIND, 47 RARCH_ANALOG_LEFT_X_MINUS, 48 RARCH_ANALOG_LEFT_Y_PLUS, 49 RARCH_ANALOG_LEFT_Y_MINUS, 50 RARCH_ANALOG_RIGHT_X_PLUS, 51 RARCH_ANALOG_RIGHT_X_MINUS, 52 RARCH_ANALOG_RIGHT_Y_PLUS, 53 RARCH_ANALOG_RIGHT_Y_MINUS, 54 RARCH_ANALOG_BIND_LIST_END, 55 56 /* Lightgun */ 57 RARCH_LIGHTGUN_TRIGGER = RARCH_FIRST_LIGHTGUN_BIND, 58 RARCH_LIGHTGUN_RELOAD, 59 RARCH_LIGHTGUN_AUX_A, 60 RARCH_LIGHTGUN_AUX_B, 61 RARCH_LIGHTGUN_AUX_C, 62 RARCH_LIGHTGUN_START, 63 RARCH_LIGHTGUN_SELECT, 64 RARCH_LIGHTGUN_DPAD_UP, 65 RARCH_LIGHTGUN_DPAD_DOWN, 66 RARCH_LIGHTGUN_DPAD_LEFT, 67 RARCH_LIGHTGUN_DPAD_RIGHT, 68 RARCH_LIGHTGUN_BIND_LIST_END, 69 70 /* Turbo */ 71 RARCH_TURBO_ENABLE = RARCH_FIRST_MISC_CUSTOM_BIND, 72 73 RARCH_CUSTOM_BIND_LIST_END, 74 75 /* Command binds. Not related to game input, 76 * only usable for port 0. */ 77 RARCH_FAST_FORWARD_KEY = RARCH_FIRST_META_KEY, 78 RARCH_FAST_FORWARD_HOLD_KEY, 79 RARCH_SLOWMOTION_KEY, 80 RARCH_SLOWMOTION_HOLD_KEY, 81 RARCH_LOAD_STATE_KEY, 82 RARCH_SAVE_STATE_KEY, 83 RARCH_FULLSCREEN_TOGGLE_KEY, 84 RARCH_CLOSE_CONTENT_KEY, 85 RARCH_QUIT_KEY, 86 RARCH_STATE_SLOT_PLUS, 87 RARCH_STATE_SLOT_MINUS, 88 RARCH_REWIND, 89 RARCH_BSV_RECORD_TOGGLE, 90 RARCH_PAUSE_TOGGLE, 91 RARCH_FRAMEADVANCE, 92 RARCH_RESET, 93 RARCH_SHADER_NEXT, 94 RARCH_SHADER_PREV, 95 RARCH_CHEAT_INDEX_PLUS, 96 RARCH_CHEAT_INDEX_MINUS, 97 RARCH_CHEAT_TOGGLE, 98 RARCH_SCREENSHOT, 99 RARCH_MUTE, 100 RARCH_OSK, 101 RARCH_FPS_TOGGLE, 102 RARCH_SEND_DEBUG_INFO, 103 RARCH_NETPLAY_HOST_TOGGLE, 104 RARCH_NETPLAY_GAME_WATCH, 105 RARCH_ENABLE_HOTKEY, 106 RARCH_VOLUME_UP, 107 RARCH_VOLUME_DOWN, 108 RARCH_OVERLAY_NEXT, 109 RARCH_DISK_EJECT_TOGGLE, 110 RARCH_DISK_NEXT, 111 RARCH_DISK_PREV, 112 RARCH_GRAB_MOUSE_TOGGLE, 113 RARCH_GAME_FOCUS_TOGGLE, 114 RARCH_UI_COMPANION_TOGGLE, 115 116 RARCH_MENU_TOGGLE, 117 118 RARCH_RECORDING_TOGGLE, 119 RARCH_STREAMING_TOGGLE, 120 RARCH_RUNAHEAD_TOGGLE, 121 122 RARCH_AI_SERVICE, 123 124 RARCH_BIND_LIST_END, 125 RARCH_BIND_LIST_END_NULL 126 }; 127 128 enum analog_dpad_mode 129 { 130 ANALOG_DPAD_NONE = 0, 131 ANALOG_DPAD_LSTICK, 132 ANALOG_DPAD_RSTICK, 133 ANALOG_DPAD_LSTICK_FORCED, 134 ANALOG_DPAD_RSTICK_FORCED, 135 ANALOG_DPAD_LAST 136 }; 137 138 enum input_toggle_type 139 { 140 INPUT_TOGGLE_NONE = 0, 141 INPUT_TOGGLE_DOWN_Y_L_R, 142 INPUT_TOGGLE_L3_R3, 143 INPUT_TOGGLE_L1_R1_START_SELECT, 144 INPUT_TOGGLE_START_SELECT, 145 INPUT_TOGGLE_L3_R, 146 INPUT_TOGGLE_L_R, 147 INPUT_TOGGLE_HOLD_START, 148 INPUT_TOGGLE_HOLD_SELECT, 149 INPUT_TOGGLE_DOWN_SELECT, 150 INPUT_TOGGLE_L2_R2, 151 INPUT_TOGGLE_LAST 152 }; 153 154 enum input_turbo_mode 155 { 156 INPUT_TURBO_MODE_CLASSIC = 0, 157 INPUT_TURBO_MODE_SINGLEBUTTON, 158 INPUT_TURBO_MODE_SINGLEBUTTON_HOLD, 159 INPUT_TURBO_MODE_LAST 160 }; 161 162 enum input_turbo_default_button 163 { 164 INPUT_TURBO_DEFAULT_BUTTON_B = 0, 165 INPUT_TURBO_DEFAULT_BUTTON_Y, 166 INPUT_TURBO_DEFAULT_BUTTON_A, 167 INPUT_TURBO_DEFAULT_BUTTON_X, 168 INPUT_TURBO_DEFAULT_BUTTON_L, 169 INPUT_TURBO_DEFAULT_BUTTON_R, 170 INPUT_TURBO_DEFAULT_BUTTON_L2, 171 INPUT_TURBO_DEFAULT_BUTTON_R2, 172 INPUT_TURBO_DEFAULT_BUTTON_L3, 173 INPUT_TURBO_DEFAULT_BUTTON_R3, 174 INPUT_TURBO_DEFAULT_BUTTON_LAST 175 }; 176 177 enum input_action 178 { 179 INPUT_ACTION_NONE = 0, 180 INPUT_ACTION_AXIS_THRESHOLD, 181 INPUT_ACTION_MAX_USERS 182 }; 183 184 /* Specialized _MOUSE that targets the full screen regardless of viewport. 185 */ 186 #define RARCH_DEVICE_MOUSE_SCREEN (RETRO_DEVICE_MOUSE | 0x10000) 187 188 /* Specialized _POINTER that targets the full screen regardless of viewport. 189 * Should not be used by a libretro implementation as coordinates returned 190 * make no sense. 191 * 192 * It is only used internally for overlays. */ 193 #define RARCH_DEVICE_POINTER_SCREEN (RETRO_DEVICE_POINTER | 0x10000) 194 195 #define RARCH_DEVICE_ID_POINTER_BACK (RETRO_DEVICE_ID_POINTER_PRESSED | 0x10000) 196 197 /* libretro has 16 buttons from 0-15 (libretro.h) 198 * Analog binds use RETRO_DEVICE_ANALOG, but we follow the same scheme 199 * internally in RetroArch for simplicity, so they are mapped into [16, 23]. 200 */ 201 202 #define AXIS_NEG(x) (((uint32_t)(x) << 16) | 0xFFFFU) 203 #define AXIS_POS(x) ((uint32_t)(x) | 0xFFFF0000UL) 204 #define AXIS_NONE 0xFFFFFFFFUL 205 #define AXIS_DIR_NONE 0xFFFFU 206 207 #define AXIS_NEG_GET(x) (((uint32_t)(x) >> 16) & 0xFFFFU) 208 #define AXIS_POS_GET(x) ((uint32_t)(x) & 0xFFFFU) 209 210 #define NO_BTN 0xFFFFU 211 212 #define HAT_UP_SHIFT 15 213 #define HAT_DOWN_SHIFT 14 214 #define HAT_LEFT_SHIFT 13 215 #define HAT_RIGHT_SHIFT 12 216 #define HAT_UP_MASK (1 << HAT_UP_SHIFT) 217 #define HAT_DOWN_MASK (1 << HAT_DOWN_SHIFT) 218 #define HAT_LEFT_MASK (1 << HAT_LEFT_SHIFT) 219 #define HAT_RIGHT_MASK (1 << HAT_RIGHT_SHIFT) 220 #define HAT_MAP(x, hat) ((x & ((1 << 12) - 1)) | hat) 221 222 #define HAT_MASK (HAT_UP_MASK | HAT_DOWN_MASK | HAT_LEFT_MASK | HAT_RIGHT_MASK) 223 #define GET_HAT_DIR(x) (x & HAT_MASK) 224 #define GET_HAT(x) (x & (~HAT_MASK)) 225 226 RETRO_END_DECLS 227 228 #endif 229