HID-over-GATT implementation with the BLE API. This library allows to create devices such as mouse, keyboard or joystick, over Bluetooth Low Energy.

Dependents:   BLENano_HID BLE_HID_MouseScrollDemo BLE_HID_KeyboardStreamDemo Shervs_TestKeyboard_TinyBLE ... more

The development repository is currently hosted on github. It contains examples and documentation. This is a snapshot of the library. The documentation can be read on github, or on docs.mbed.com.

Committer:
Jean-Philippe Brucker
Date:
Thu Nov 19 15:00:39 2015 +0000
Revision:
3:4f8429a1905b
Parent:
1:7a6c2e2c9371
Version 0.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jean-Philippe Brucker 1:7a6c2e2c9371 1 /* Copyright (c) 2015 mbed.org, MIT License
Jean-Philippe Brucker 1:7a6c2e2c9371 2 *
Jean-Philippe Brucker 1:7a6c2e2c9371 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Jean-Philippe Brucker 1:7a6c2e2c9371 4 * and associated documentation files (the "Software"), to deal in the Software without
Jean-Philippe Brucker 1:7a6c2e2c9371 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
Jean-Philippe Brucker 1:7a6c2e2c9371 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
Jean-Philippe Brucker 1:7a6c2e2c9371 7 * Software is furnished to do so, subject to the following conditions:
Jean-Philippe Brucker 1:7a6c2e2c9371 8 *
Jean-Philippe Brucker 1:7a6c2e2c9371 9 * The above copyright notice and this permission notice shall be included in all copies or
Jean-Philippe Brucker 1:7a6c2e2c9371 10 * substantial portions of the Software.
Jean-Philippe Brucker 1:7a6c2e2c9371 11 *
Jean-Philippe Brucker 1:7a6c2e2c9371 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
Jean-Philippe Brucker 1:7a6c2e2c9371 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Jean-Philippe Brucker 1:7a6c2e2c9371 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
Jean-Philippe Brucker 1:7a6c2e2c9371 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Jean-Philippe Brucker 1:7a6c2e2c9371 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Jean-Philippe Brucker 1:7a6c2e2c9371 17 *
Jean-Philippe Brucker 1:7a6c2e2c9371 18 * Note: this file was pulled from different parts of the USBHID library, in mbed SDK
Jean-Philippe Brucker 1:7a6c2e2c9371 19 */
Jean-Philippe Brucker 1:7a6c2e2c9371 20
Jean-Philippe Brucker 0:cfd70fa91663 21 #ifndef KEYBOARD_DEFS_H
Jean-Philippe Brucker 0:cfd70fa91663 22 #define KEYBOARD_DEFS_H
Jean-Philippe Brucker 0:cfd70fa91663 23
Jean-Philippe Brucker 0:cfd70fa91663 24 #define REPORT_ID_KEYBOARD 1
Jean-Philippe Brucker 0:cfd70fa91663 25 #define REPORT_ID_VOLUME 3
Jean-Philippe Brucker 0:cfd70fa91663 26
Jean-Philippe Brucker 0:cfd70fa91663 27 /* Modifiers */
Jean-Philippe Brucker 0:cfd70fa91663 28 enum MODIFIER_KEY {
Jean-Philippe Brucker 0:cfd70fa91663 29 KEY_CTRL = 1,
Jean-Philippe Brucker 0:cfd70fa91663 30 KEY_SHIFT = 2,
Jean-Philippe Brucker 0:cfd70fa91663 31 KEY_ALT = 4,
Jean-Philippe Brucker 0:cfd70fa91663 32 };
Jean-Philippe Brucker 0:cfd70fa91663 33
Jean-Philippe Brucker 0:cfd70fa91663 34
Jean-Philippe Brucker 0:cfd70fa91663 35 enum MEDIA_KEY {
Jean-Philippe Brucker 0:cfd70fa91663 36 KEY_NEXT_TRACK, /*!< next Track Button */
Jean-Philippe Brucker 0:cfd70fa91663 37 KEY_PREVIOUS_TRACK, /*!< Previous track Button */
Jean-Philippe Brucker 0:cfd70fa91663 38 KEY_STOP, /*!< Stop Button */
Jean-Philippe Brucker 0:cfd70fa91663 39 KEY_PLAY_PAUSE, /*!< Play/Pause Button */
Jean-Philippe Brucker 0:cfd70fa91663 40 KEY_MUTE, /*!< Mute Button */
Jean-Philippe Brucker 0:cfd70fa91663 41 KEY_VOLUME_UP, /*!< Volume Up Button */
Jean-Philippe Brucker 0:cfd70fa91663 42 KEY_VOLUME_DOWN, /*!< Volume Down Button */
Jean-Philippe Brucker 0:cfd70fa91663 43 };
Jean-Philippe Brucker 0:cfd70fa91663 44
Jean-Philippe Brucker 0:cfd70fa91663 45 enum FUNCTION_KEY {
Jean-Philippe Brucker 0:cfd70fa91663 46 KEY_F1 = 128, /* F1 key */
Jean-Philippe Brucker 0:cfd70fa91663 47 KEY_F2, /* F2 key */
Jean-Philippe Brucker 0:cfd70fa91663 48 KEY_F3, /* F3 key */
Jean-Philippe Brucker 0:cfd70fa91663 49 KEY_F4, /* F4 key */
Jean-Philippe Brucker 0:cfd70fa91663 50 KEY_F5, /* F5 key */
Jean-Philippe Brucker 0:cfd70fa91663 51 KEY_F6, /* F6 key */
Jean-Philippe Brucker 0:cfd70fa91663 52 KEY_F7, /* F7 key */
Jean-Philippe Brucker 0:cfd70fa91663 53 KEY_F8, /* F8 key */
Jean-Philippe Brucker 0:cfd70fa91663 54 KEY_F9, /* F9 key */
Jean-Philippe Brucker 0:cfd70fa91663 55 KEY_F10, /* F10 key */
Jean-Philippe Brucker 0:cfd70fa91663 56 KEY_F11, /* F11 key */
Jean-Philippe Brucker 0:cfd70fa91663 57 KEY_F12, /* F12 key */
Jean-Philippe Brucker 0:cfd70fa91663 58
Jean-Philippe Brucker 0:cfd70fa91663 59 KEY_PRINT_SCREEN, /* Print Screen key */
Jean-Philippe Brucker 0:cfd70fa91663 60 KEY_SCROLL_LOCK, /* Scroll lock */
Jean-Philippe Brucker 0:cfd70fa91663 61 KEY_CAPS_LOCK, /* caps lock */
Jean-Philippe Brucker 0:cfd70fa91663 62 KEY_NUM_LOCK, /* num lock */
Jean-Philippe Brucker 0:cfd70fa91663 63 KEY_INSERT, /* Insert key */
Jean-Philippe Brucker 0:cfd70fa91663 64 KEY_HOME, /* Home key */
Jean-Philippe Brucker 0:cfd70fa91663 65 KEY_PAGE_UP, /* Page Up key */
Jean-Philippe Brucker 0:cfd70fa91663 66 KEY_PAGE_DOWN, /* Page Down key */
Jean-Philippe Brucker 0:cfd70fa91663 67
Jean-Philippe Brucker 0:cfd70fa91663 68 RIGHT_ARROW, /* Right arrow */
Jean-Philippe Brucker 0:cfd70fa91663 69 LEFT_ARROW, /* Left arrow */
Jean-Philippe Brucker 0:cfd70fa91663 70 DOWN_ARROW, /* Down arrow */
Jean-Philippe Brucker 0:cfd70fa91663 71 UP_ARROW, /* Up arrow */
Jean-Philippe Brucker 0:cfd70fa91663 72 };
Jean-Philippe Brucker 0:cfd70fa91663 73
Jean-Philippe Brucker 0:cfd70fa91663 74 typedef struct {
Jean-Philippe Brucker 0:cfd70fa91663 75 unsigned char usage;
Jean-Philippe Brucker 0:cfd70fa91663 76 unsigned char modifier;
Jean-Philippe Brucker 0:cfd70fa91663 77 } KEYMAP;
Jean-Philippe Brucker 0:cfd70fa91663 78
Jean-Philippe Brucker 0:cfd70fa91663 79 #ifdef US_KEYBOARD
Jean-Philippe Brucker 0:cfd70fa91663 80 /* US keyboard (as HID standard) */
Jean-Philippe Brucker 0:cfd70fa91663 81 #define KEYMAP_SIZE (152)
Jean-Philippe Brucker 0:cfd70fa91663 82 const KEYMAP keymap[KEYMAP_SIZE] = {
Jean-Philippe Brucker 0:cfd70fa91663 83 {0, 0}, /* NUL */
Jean-Philippe Brucker 0:cfd70fa91663 84 {0, 0}, /* SOH */
Jean-Philippe Brucker 0:cfd70fa91663 85 {0, 0}, /* STX */
Jean-Philippe Brucker 0:cfd70fa91663 86 {0, 0}, /* ETX */
Jean-Philippe Brucker 0:cfd70fa91663 87 {0, 0}, /* EOT */
Jean-Philippe Brucker 0:cfd70fa91663 88 {0, 0}, /* ENQ */
Jean-Philippe Brucker 0:cfd70fa91663 89 {0, 0}, /* ACK */
Jean-Philippe Brucker 0:cfd70fa91663 90 {0, 0}, /* BEL */
Jean-Philippe Brucker 0:cfd70fa91663 91 {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */
Jean-Philippe Brucker 0:cfd70fa91663 92 {0x2b, 0}, /* TAB */ /* Keyboard Tab */
Jean-Philippe Brucker 0:cfd70fa91663 93 {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */
Jean-Philippe Brucker 0:cfd70fa91663 94 {0, 0}, /* VT */
Jean-Philippe Brucker 0:cfd70fa91663 95 {0, 0}, /* FF */
Jean-Philippe Brucker 0:cfd70fa91663 96 {0, 0}, /* CR */
Jean-Philippe Brucker 0:cfd70fa91663 97 {0, 0}, /* SO */
Jean-Philippe Brucker 0:cfd70fa91663 98 {0, 0}, /* SI */
Jean-Philippe Brucker 0:cfd70fa91663 99 {0, 0}, /* DEL */
Jean-Philippe Brucker 0:cfd70fa91663 100 {0, 0}, /* DC1 */
Jean-Philippe Brucker 0:cfd70fa91663 101 {0, 0}, /* DC2 */
Jean-Philippe Brucker 0:cfd70fa91663 102 {0, 0}, /* DC3 */
Jean-Philippe Brucker 0:cfd70fa91663 103 {0, 0}, /* DC4 */
Jean-Philippe Brucker 0:cfd70fa91663 104 {0, 0}, /* NAK */
Jean-Philippe Brucker 0:cfd70fa91663 105 {0, 0}, /* SYN */
Jean-Philippe Brucker 0:cfd70fa91663 106 {0, 0}, /* ETB */
Jean-Philippe Brucker 0:cfd70fa91663 107 {0, 0}, /* CAN */
Jean-Philippe Brucker 0:cfd70fa91663 108 {0, 0}, /* EM */
Jean-Philippe Brucker 0:cfd70fa91663 109 {0, 0}, /* SUB */
Jean-Philippe Brucker 0:cfd70fa91663 110 {0, 0}, /* ESC */
Jean-Philippe Brucker 0:cfd70fa91663 111 {0, 0}, /* FS */
Jean-Philippe Brucker 0:cfd70fa91663 112 {0, 0}, /* GS */
Jean-Philippe Brucker 0:cfd70fa91663 113 {0, 0}, /* RS */
Jean-Philippe Brucker 0:cfd70fa91663 114 {0, 0}, /* US */
Jean-Philippe Brucker 0:cfd70fa91663 115 {0x2c, 0}, /* */
Jean-Philippe Brucker 0:cfd70fa91663 116 {0x1e, KEY_SHIFT}, /* ! */
Jean-Philippe Brucker 0:cfd70fa91663 117 {0x34, KEY_SHIFT}, /* " */
Jean-Philippe Brucker 0:cfd70fa91663 118 {0x20, KEY_SHIFT}, /* # */
Jean-Philippe Brucker 0:cfd70fa91663 119 {0x21, KEY_SHIFT}, /* $ */
Jean-Philippe Brucker 0:cfd70fa91663 120 {0x22, KEY_SHIFT}, /* % */
Jean-Philippe Brucker 0:cfd70fa91663 121 {0x24, KEY_SHIFT}, /* & */
Jean-Philippe Brucker 0:cfd70fa91663 122 {0x34, 0}, /* ' */
Jean-Philippe Brucker 0:cfd70fa91663 123 {0x26, KEY_SHIFT}, /* ( */
Jean-Philippe Brucker 0:cfd70fa91663 124 {0x27, KEY_SHIFT}, /* ) */
Jean-Philippe Brucker 0:cfd70fa91663 125 {0x25, KEY_SHIFT}, /* * */
Jean-Philippe Brucker 0:cfd70fa91663 126 {0x2e, KEY_SHIFT}, /* + */
Jean-Philippe Brucker 0:cfd70fa91663 127 {0x36, 0}, /* , */
Jean-Philippe Brucker 0:cfd70fa91663 128 {0x2d, 0}, /* - */
Jean-Philippe Brucker 0:cfd70fa91663 129 {0x37, 0}, /* . */
Jean-Philippe Brucker 0:cfd70fa91663 130 {0x38, 0}, /* / */
Jean-Philippe Brucker 0:cfd70fa91663 131 {0x27, 0}, /* 0 */
Jean-Philippe Brucker 0:cfd70fa91663 132 {0x1e, 0}, /* 1 */
Jean-Philippe Brucker 0:cfd70fa91663 133 {0x1f, 0}, /* 2 */
Jean-Philippe Brucker 0:cfd70fa91663 134 {0x20, 0}, /* 3 */
Jean-Philippe Brucker 0:cfd70fa91663 135 {0x21, 0}, /* 4 */
Jean-Philippe Brucker 0:cfd70fa91663 136 {0x22, 0}, /* 5 */
Jean-Philippe Brucker 0:cfd70fa91663 137 {0x23, 0}, /* 6 */
Jean-Philippe Brucker 0:cfd70fa91663 138 {0x24, 0}, /* 7 */
Jean-Philippe Brucker 0:cfd70fa91663 139 {0x25, 0}, /* 8 */
Jean-Philippe Brucker 0:cfd70fa91663 140 {0x26, 0}, /* 9 */
Jean-Philippe Brucker 0:cfd70fa91663 141 {0x33, KEY_SHIFT}, /* : */
Jean-Philippe Brucker 0:cfd70fa91663 142 {0x33, 0}, /* ; */
Jean-Philippe Brucker 0:cfd70fa91663 143 {0x36, KEY_SHIFT}, /* < */
Jean-Philippe Brucker 0:cfd70fa91663 144 {0x2e, 0}, /* = */
Jean-Philippe Brucker 0:cfd70fa91663 145 {0x37, KEY_SHIFT}, /* > */
Jean-Philippe Brucker 0:cfd70fa91663 146 {0x38, KEY_SHIFT}, /* ? */
Jean-Philippe Brucker 0:cfd70fa91663 147 {0x1f, KEY_SHIFT}, /* @ */
Jean-Philippe Brucker 0:cfd70fa91663 148 {0x04, KEY_SHIFT}, /* A */
Jean-Philippe Brucker 0:cfd70fa91663 149 {0x05, KEY_SHIFT}, /* B */
Jean-Philippe Brucker 0:cfd70fa91663 150 {0x06, KEY_SHIFT}, /* C */
Jean-Philippe Brucker 0:cfd70fa91663 151 {0x07, KEY_SHIFT}, /* D */
Jean-Philippe Brucker 0:cfd70fa91663 152 {0x08, KEY_SHIFT}, /* E */
Jean-Philippe Brucker 0:cfd70fa91663 153 {0x09, KEY_SHIFT}, /* F */
Jean-Philippe Brucker 0:cfd70fa91663 154 {0x0a, KEY_SHIFT}, /* G */
Jean-Philippe Brucker 0:cfd70fa91663 155 {0x0b, KEY_SHIFT}, /* H */
Jean-Philippe Brucker 0:cfd70fa91663 156 {0x0c, KEY_SHIFT}, /* I */
Jean-Philippe Brucker 0:cfd70fa91663 157 {0x0d, KEY_SHIFT}, /* J */
Jean-Philippe Brucker 0:cfd70fa91663 158 {0x0e, KEY_SHIFT}, /* K */
Jean-Philippe Brucker 0:cfd70fa91663 159 {0x0f, KEY_SHIFT}, /* L */
Jean-Philippe Brucker 0:cfd70fa91663 160 {0x10, KEY_SHIFT}, /* M */
Jean-Philippe Brucker 0:cfd70fa91663 161 {0x11, KEY_SHIFT}, /* N */
Jean-Philippe Brucker 0:cfd70fa91663 162 {0x12, KEY_SHIFT}, /* O */
Jean-Philippe Brucker 0:cfd70fa91663 163 {0x13, KEY_SHIFT}, /* P */
Jean-Philippe Brucker 0:cfd70fa91663 164 {0x14, KEY_SHIFT}, /* Q */
Jean-Philippe Brucker 0:cfd70fa91663 165 {0x15, KEY_SHIFT}, /* R */
Jean-Philippe Brucker 0:cfd70fa91663 166 {0x16, KEY_SHIFT}, /* S */
Jean-Philippe Brucker 0:cfd70fa91663 167 {0x17, KEY_SHIFT}, /* T */
Jean-Philippe Brucker 0:cfd70fa91663 168 {0x18, KEY_SHIFT}, /* U */
Jean-Philippe Brucker 0:cfd70fa91663 169 {0x19, KEY_SHIFT}, /* V */
Jean-Philippe Brucker 0:cfd70fa91663 170 {0x1a, KEY_SHIFT}, /* W */
Jean-Philippe Brucker 0:cfd70fa91663 171 {0x1b, KEY_SHIFT}, /* X */
Jean-Philippe Brucker 0:cfd70fa91663 172 {0x1c, KEY_SHIFT}, /* Y */
Jean-Philippe Brucker 0:cfd70fa91663 173 {0x1d, KEY_SHIFT}, /* Z */
Jean-Philippe Brucker 0:cfd70fa91663 174 {0x2f, 0}, /* [ */
Jean-Philippe Brucker 0:cfd70fa91663 175 {0x31, 0}, /* \ */
Jean-Philippe Brucker 0:cfd70fa91663 176 {0x30, 0}, /* ] */
Jean-Philippe Brucker 0:cfd70fa91663 177 {0x23, KEY_SHIFT}, /* ^ */
Jean-Philippe Brucker 0:cfd70fa91663 178 {0x2d, KEY_SHIFT}, /* _ */
Jean-Philippe Brucker 0:cfd70fa91663 179 {0x35, 0}, /* ` */
Jean-Philippe Brucker 0:cfd70fa91663 180 {0x04, 0}, /* a */
Jean-Philippe Brucker 0:cfd70fa91663 181 {0x05, 0}, /* b */
Jean-Philippe Brucker 0:cfd70fa91663 182 {0x06, 0}, /* c */
Jean-Philippe Brucker 0:cfd70fa91663 183 {0x07, 0}, /* d */
Jean-Philippe Brucker 0:cfd70fa91663 184 {0x08, 0}, /* e */
Jean-Philippe Brucker 0:cfd70fa91663 185 {0x09, 0}, /* f */
Jean-Philippe Brucker 0:cfd70fa91663 186 {0x0a, 0}, /* g */
Jean-Philippe Brucker 0:cfd70fa91663 187 {0x0b, 0}, /* h */
Jean-Philippe Brucker 0:cfd70fa91663 188 {0x0c, 0}, /* i */
Jean-Philippe Brucker 0:cfd70fa91663 189 {0x0d, 0}, /* j */
Jean-Philippe Brucker 0:cfd70fa91663 190 {0x0e, 0}, /* k */
Jean-Philippe Brucker 0:cfd70fa91663 191 {0x0f, 0}, /* l */
Jean-Philippe Brucker 0:cfd70fa91663 192 {0x10, 0}, /* m */
Jean-Philippe Brucker 0:cfd70fa91663 193 {0x11, 0}, /* n */
Jean-Philippe Brucker 0:cfd70fa91663 194 {0x12, 0}, /* o */
Jean-Philippe Brucker 0:cfd70fa91663 195 {0x13, 0}, /* p */
Jean-Philippe Brucker 0:cfd70fa91663 196 {0x14, 0}, /* q */
Jean-Philippe Brucker 0:cfd70fa91663 197 {0x15, 0}, /* r */
Jean-Philippe Brucker 0:cfd70fa91663 198 {0x16, 0}, /* s */
Jean-Philippe Brucker 0:cfd70fa91663 199 {0x17, 0}, /* t */
Jean-Philippe Brucker 0:cfd70fa91663 200 {0x18, 0}, /* u */
Jean-Philippe Brucker 0:cfd70fa91663 201 {0x19, 0}, /* v */
Jean-Philippe Brucker 0:cfd70fa91663 202 {0x1a, 0}, /* w */
Jean-Philippe Brucker 0:cfd70fa91663 203 {0x1b, 0}, /* x */
Jean-Philippe Brucker 0:cfd70fa91663 204 {0x1c, 0}, /* y */
Jean-Philippe Brucker 0:cfd70fa91663 205 {0x1d, 0}, /* z */
Jean-Philippe Brucker 0:cfd70fa91663 206 {0x2f, KEY_SHIFT}, /* { */
Jean-Philippe Brucker 0:cfd70fa91663 207 {0x31, KEY_SHIFT}, /* | */
Jean-Philippe Brucker 0:cfd70fa91663 208 {0x30, KEY_SHIFT}, /* } */
Jean-Philippe Brucker 0:cfd70fa91663 209 {0x35, KEY_SHIFT}, /* ~ */
Jean-Philippe Brucker 0:cfd70fa91663 210 {0,0}, /* DEL */
Jean-Philippe Brucker 0:cfd70fa91663 211
Jean-Philippe Brucker 0:cfd70fa91663 212 {0x3a, 0}, /* F1 */
Jean-Philippe Brucker 0:cfd70fa91663 213 {0x3b, 0}, /* F2 */
Jean-Philippe Brucker 0:cfd70fa91663 214 {0x3c, 0}, /* F3 */
Jean-Philippe Brucker 0:cfd70fa91663 215 {0x3d, 0}, /* F4 */
Jean-Philippe Brucker 0:cfd70fa91663 216 {0x3e, 0}, /* F5 */
Jean-Philippe Brucker 0:cfd70fa91663 217 {0x3f, 0}, /* F6 */
Jean-Philippe Brucker 0:cfd70fa91663 218 {0x40, 0}, /* F7 */
Jean-Philippe Brucker 0:cfd70fa91663 219 {0x41, 0}, /* F8 */
Jean-Philippe Brucker 0:cfd70fa91663 220 {0x42, 0}, /* F9 */
Jean-Philippe Brucker 0:cfd70fa91663 221 {0x43, 0}, /* F10 */
Jean-Philippe Brucker 0:cfd70fa91663 222 {0x44, 0}, /* F11 */
Jean-Philippe Brucker 0:cfd70fa91663 223 {0x45, 0}, /* F12 */
Jean-Philippe Brucker 0:cfd70fa91663 224
Jean-Philippe Brucker 0:cfd70fa91663 225 {0x46, 0}, /* PRINT_SCREEN */
Jean-Philippe Brucker 0:cfd70fa91663 226 {0x47, 0}, /* SCROLL_LOCK */
Jean-Philippe Brucker 0:cfd70fa91663 227 {0x39, 0}, /* CAPS_LOCK */
Jean-Philippe Brucker 0:cfd70fa91663 228 {0x53, 0}, /* NUM_LOCK */
Jean-Philippe Brucker 0:cfd70fa91663 229 {0x49, 0}, /* INSERT */
Jean-Philippe Brucker 0:cfd70fa91663 230 {0x4a, 0}, /* HOME */
Jean-Philippe Brucker 0:cfd70fa91663 231 {0x4b, 0}, /* PAGE_UP */
Jean-Philippe Brucker 0:cfd70fa91663 232 {0x4e, 0}, /* PAGE_DOWN */
Jean-Philippe Brucker 0:cfd70fa91663 233
Jean-Philippe Brucker 0:cfd70fa91663 234 {0x4f, 0}, /* RIGHT_ARROW */
Jean-Philippe Brucker 0:cfd70fa91663 235 {0x50, 0}, /* LEFT_ARROW */
Jean-Philippe Brucker 0:cfd70fa91663 236 {0x51, 0}, /* DOWN_ARROW */
Jean-Philippe Brucker 0:cfd70fa91663 237 {0x52, 0}, /* UP_ARROW */
Jean-Philippe Brucker 0:cfd70fa91663 238 };
Jean-Philippe Brucker 0:cfd70fa91663 239
Jean-Philippe Brucker 0:cfd70fa91663 240 #else
Jean-Philippe Brucker 0:cfd70fa91663 241 /* UK keyboard */
Jean-Philippe Brucker 0:cfd70fa91663 242 #define KEYMAP_SIZE (152)
Jean-Philippe Brucker 0:cfd70fa91663 243 const KEYMAP keymap[KEYMAP_SIZE] = {
Jean-Philippe Brucker 0:cfd70fa91663 244 {0, 0}, /* NUL */
Jean-Philippe Brucker 0:cfd70fa91663 245 {0, 0}, /* SOH */
Jean-Philippe Brucker 0:cfd70fa91663 246 {0, 0}, /* STX */
Jean-Philippe Brucker 0:cfd70fa91663 247 {0, 0}, /* ETX */
Jean-Philippe Brucker 0:cfd70fa91663 248 {0, 0}, /* EOT */
Jean-Philippe Brucker 0:cfd70fa91663 249 {0, 0}, /* ENQ */
Jean-Philippe Brucker 0:cfd70fa91663 250 {0, 0}, /* ACK */
Jean-Philippe Brucker 0:cfd70fa91663 251 {0, 0}, /* BEL */
Jean-Philippe Brucker 0:cfd70fa91663 252 {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */
Jean-Philippe Brucker 0:cfd70fa91663 253 {0x2b, 0}, /* TAB */ /* Keyboard Tab */
Jean-Philippe Brucker 0:cfd70fa91663 254 {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */
Jean-Philippe Brucker 0:cfd70fa91663 255 {0, 0}, /* VT */
Jean-Philippe Brucker 0:cfd70fa91663 256 {0, 0}, /* FF */
Jean-Philippe Brucker 0:cfd70fa91663 257 {0, 0}, /* CR */
Jean-Philippe Brucker 0:cfd70fa91663 258 {0, 0}, /* SO */
Jean-Philippe Brucker 0:cfd70fa91663 259 {0, 0}, /* SI */
Jean-Philippe Brucker 0:cfd70fa91663 260 {0, 0}, /* DEL */
Jean-Philippe Brucker 0:cfd70fa91663 261 {0, 0}, /* DC1 */
Jean-Philippe Brucker 0:cfd70fa91663 262 {0, 0}, /* DC2 */
Jean-Philippe Brucker 0:cfd70fa91663 263 {0, 0}, /* DC3 */
Jean-Philippe Brucker 0:cfd70fa91663 264 {0, 0}, /* DC4 */
Jean-Philippe Brucker 0:cfd70fa91663 265 {0, 0}, /* NAK */
Jean-Philippe Brucker 0:cfd70fa91663 266 {0, 0}, /* SYN */
Jean-Philippe Brucker 0:cfd70fa91663 267 {0, 0}, /* ETB */
Jean-Philippe Brucker 0:cfd70fa91663 268 {0, 0}, /* CAN */
Jean-Philippe Brucker 0:cfd70fa91663 269 {0, 0}, /* EM */
Jean-Philippe Brucker 0:cfd70fa91663 270 {0, 0}, /* SUB */
Jean-Philippe Brucker 0:cfd70fa91663 271 {0, 0}, /* ESC */
Jean-Philippe Brucker 0:cfd70fa91663 272 {0, 0}, /* FS */
Jean-Philippe Brucker 0:cfd70fa91663 273 {0, 0}, /* GS */
Jean-Philippe Brucker 0:cfd70fa91663 274 {0, 0}, /* RS */
Jean-Philippe Brucker 0:cfd70fa91663 275 {0, 0}, /* US */
Jean-Philippe Brucker 0:cfd70fa91663 276 {0x2c, 0}, /* */
Jean-Philippe Brucker 0:cfd70fa91663 277 {0x1e, KEY_SHIFT}, /* ! */
Jean-Philippe Brucker 0:cfd70fa91663 278 {0x1f, KEY_SHIFT}, /* " */
Jean-Philippe Brucker 0:cfd70fa91663 279 {0x32, 0}, /* # */
Jean-Philippe Brucker 0:cfd70fa91663 280 {0x21, KEY_SHIFT}, /* $ */
Jean-Philippe Brucker 0:cfd70fa91663 281 {0x22, KEY_SHIFT}, /* % */
Jean-Philippe Brucker 0:cfd70fa91663 282 {0x24, KEY_SHIFT}, /* & */
Jean-Philippe Brucker 0:cfd70fa91663 283 {0x34, 0}, /* ' */
Jean-Philippe Brucker 0:cfd70fa91663 284 {0x26, KEY_SHIFT}, /* ( */
Jean-Philippe Brucker 0:cfd70fa91663 285 {0x27, KEY_SHIFT}, /* ) */
Jean-Philippe Brucker 0:cfd70fa91663 286 {0x25, KEY_SHIFT}, /* * */
Jean-Philippe Brucker 0:cfd70fa91663 287 {0x2e, KEY_SHIFT}, /* + */
Jean-Philippe Brucker 0:cfd70fa91663 288 {0x36, 0}, /* , */
Jean-Philippe Brucker 0:cfd70fa91663 289 {0x2d, 0}, /* - */
Jean-Philippe Brucker 0:cfd70fa91663 290 {0x37, 0}, /* . */
Jean-Philippe Brucker 0:cfd70fa91663 291 {0x38, 0}, /* / */
Jean-Philippe Brucker 0:cfd70fa91663 292 {0x27, 0}, /* 0 */
Jean-Philippe Brucker 0:cfd70fa91663 293 {0x1e, 0}, /* 1 */
Jean-Philippe Brucker 0:cfd70fa91663 294 {0x1f, 0}, /* 2 */
Jean-Philippe Brucker 0:cfd70fa91663 295 {0x20, 0}, /* 3 */
Jean-Philippe Brucker 0:cfd70fa91663 296 {0x21, 0}, /* 4 */
Jean-Philippe Brucker 0:cfd70fa91663 297 {0x22, 0}, /* 5 */
Jean-Philippe Brucker 0:cfd70fa91663 298 {0x23, 0}, /* 6 */
Jean-Philippe Brucker 0:cfd70fa91663 299 {0x24, 0}, /* 7 */
Jean-Philippe Brucker 0:cfd70fa91663 300 {0x25, 0}, /* 8 */
Jean-Philippe Brucker 0:cfd70fa91663 301 {0x26, 0}, /* 9 */
Jean-Philippe Brucker 0:cfd70fa91663 302 {0x33, KEY_SHIFT}, /* : */
Jean-Philippe Brucker 0:cfd70fa91663 303 {0x33, 0}, /* ; */
Jean-Philippe Brucker 0:cfd70fa91663 304 {0x36, KEY_SHIFT}, /* < */
Jean-Philippe Brucker 0:cfd70fa91663 305 {0x2e, 0}, /* = */
Jean-Philippe Brucker 0:cfd70fa91663 306 {0x37, KEY_SHIFT}, /* > */
Jean-Philippe Brucker 0:cfd70fa91663 307 {0x38, KEY_SHIFT}, /* ? */
Jean-Philippe Brucker 0:cfd70fa91663 308 {0x34, KEY_SHIFT}, /* @ */
Jean-Philippe Brucker 0:cfd70fa91663 309 {0x04, KEY_SHIFT}, /* A */
Jean-Philippe Brucker 0:cfd70fa91663 310 {0x05, KEY_SHIFT}, /* B */
Jean-Philippe Brucker 0:cfd70fa91663 311 {0x06, KEY_SHIFT}, /* C */
Jean-Philippe Brucker 0:cfd70fa91663 312 {0x07, KEY_SHIFT}, /* D */
Jean-Philippe Brucker 0:cfd70fa91663 313 {0x08, KEY_SHIFT}, /* E */
Jean-Philippe Brucker 0:cfd70fa91663 314 {0x09, KEY_SHIFT}, /* F */
Jean-Philippe Brucker 0:cfd70fa91663 315 {0x0a, KEY_SHIFT}, /* G */
Jean-Philippe Brucker 0:cfd70fa91663 316 {0x0b, KEY_SHIFT}, /* H */
Jean-Philippe Brucker 0:cfd70fa91663 317 {0x0c, KEY_SHIFT}, /* I */
Jean-Philippe Brucker 0:cfd70fa91663 318 {0x0d, KEY_SHIFT}, /* J */
Jean-Philippe Brucker 0:cfd70fa91663 319 {0x0e, KEY_SHIFT}, /* K */
Jean-Philippe Brucker 0:cfd70fa91663 320 {0x0f, KEY_SHIFT}, /* L */
Jean-Philippe Brucker 0:cfd70fa91663 321 {0x10, KEY_SHIFT}, /* M */
Jean-Philippe Brucker 0:cfd70fa91663 322 {0x11, KEY_SHIFT}, /* N */
Jean-Philippe Brucker 0:cfd70fa91663 323 {0x12, KEY_SHIFT}, /* O */
Jean-Philippe Brucker 0:cfd70fa91663 324 {0x13, KEY_SHIFT}, /* P */
Jean-Philippe Brucker 0:cfd70fa91663 325 {0x14, KEY_SHIFT}, /* Q */
Jean-Philippe Brucker 0:cfd70fa91663 326 {0x15, KEY_SHIFT}, /* R */
Jean-Philippe Brucker 0:cfd70fa91663 327 {0x16, KEY_SHIFT}, /* S */
Jean-Philippe Brucker 0:cfd70fa91663 328 {0x17, KEY_SHIFT}, /* T */
Jean-Philippe Brucker 0:cfd70fa91663 329 {0x18, KEY_SHIFT}, /* U */
Jean-Philippe Brucker 0:cfd70fa91663 330 {0x19, KEY_SHIFT}, /* V */
Jean-Philippe Brucker 0:cfd70fa91663 331 {0x1a, KEY_SHIFT}, /* W */
Jean-Philippe Brucker 0:cfd70fa91663 332 {0x1b, KEY_SHIFT}, /* X */
Jean-Philippe Brucker 0:cfd70fa91663 333 {0x1c, KEY_SHIFT}, /* Y */
Jean-Philippe Brucker 0:cfd70fa91663 334 {0x1d, KEY_SHIFT}, /* Z */
Jean-Philippe Brucker 0:cfd70fa91663 335 {0x2f, 0}, /* [ */
Jean-Philippe Brucker 0:cfd70fa91663 336 {0x64, 0}, /* \ */
Jean-Philippe Brucker 0:cfd70fa91663 337 {0x30, 0}, /* ] */
Jean-Philippe Brucker 0:cfd70fa91663 338 {0x23, KEY_SHIFT}, /* ^ */
Jean-Philippe Brucker 0:cfd70fa91663 339 {0x2d, KEY_SHIFT}, /* _ */
Jean-Philippe Brucker 0:cfd70fa91663 340 {0x35, 0}, /* ` */
Jean-Philippe Brucker 0:cfd70fa91663 341 {0x04, 0}, /* a */
Jean-Philippe Brucker 0:cfd70fa91663 342 {0x05, 0}, /* b */
Jean-Philippe Brucker 0:cfd70fa91663 343 {0x06, 0}, /* c */
Jean-Philippe Brucker 0:cfd70fa91663 344 {0x07, 0}, /* d */
Jean-Philippe Brucker 0:cfd70fa91663 345 {0x08, 0}, /* e */
Jean-Philippe Brucker 0:cfd70fa91663 346 {0x09, 0}, /* f */
Jean-Philippe Brucker 0:cfd70fa91663 347 {0x0a, 0}, /* g */
Jean-Philippe Brucker 0:cfd70fa91663 348 {0x0b, 0}, /* h */
Jean-Philippe Brucker 0:cfd70fa91663 349 {0x0c, 0}, /* i */
Jean-Philippe Brucker 0:cfd70fa91663 350 {0x0d, 0}, /* j */
Jean-Philippe Brucker 0:cfd70fa91663 351 {0x0e, 0}, /* k */
Jean-Philippe Brucker 0:cfd70fa91663 352 {0x0f, 0}, /* l */
Jean-Philippe Brucker 0:cfd70fa91663 353 {0x10, 0}, /* m */
Jean-Philippe Brucker 0:cfd70fa91663 354 {0x11, 0}, /* n */
Jean-Philippe Brucker 0:cfd70fa91663 355 {0x12, 0}, /* o */
Jean-Philippe Brucker 0:cfd70fa91663 356 {0x13, 0}, /* p */
Jean-Philippe Brucker 0:cfd70fa91663 357 {0x14, 0}, /* q */
Jean-Philippe Brucker 0:cfd70fa91663 358 {0x15, 0}, /* r */
Jean-Philippe Brucker 0:cfd70fa91663 359 {0x16, 0}, /* s */
Jean-Philippe Brucker 0:cfd70fa91663 360 {0x17, 0}, /* t */
Jean-Philippe Brucker 0:cfd70fa91663 361 {0x18, 0}, /* u */
Jean-Philippe Brucker 0:cfd70fa91663 362 {0x19, 0}, /* v */
Jean-Philippe Brucker 0:cfd70fa91663 363 {0x1a, 0}, /* w */
Jean-Philippe Brucker 0:cfd70fa91663 364 {0x1b, 0}, /* x */
Jean-Philippe Brucker 0:cfd70fa91663 365 {0x1c, 0}, /* y */
Jean-Philippe Brucker 0:cfd70fa91663 366 {0x1d, 0}, /* z */
Jean-Philippe Brucker 0:cfd70fa91663 367 {0x2f, KEY_SHIFT}, /* { */
Jean-Philippe Brucker 0:cfd70fa91663 368 {0x64, KEY_SHIFT}, /* | */
Jean-Philippe Brucker 0:cfd70fa91663 369 {0x30, KEY_SHIFT}, /* } */
Jean-Philippe Brucker 0:cfd70fa91663 370 {0x32, KEY_SHIFT}, /* ~ */
Jean-Philippe Brucker 0:cfd70fa91663 371 {0,0}, /* DEL */
Jean-Philippe Brucker 0:cfd70fa91663 372
Jean-Philippe Brucker 0:cfd70fa91663 373 {0x3a, 0}, /* F1 */
Jean-Philippe Brucker 0:cfd70fa91663 374 {0x3b, 0}, /* F2 */
Jean-Philippe Brucker 0:cfd70fa91663 375 {0x3c, 0}, /* F3 */
Jean-Philippe Brucker 0:cfd70fa91663 376 {0x3d, 0}, /* F4 */
Jean-Philippe Brucker 0:cfd70fa91663 377 {0x3e, 0}, /* F5 */
Jean-Philippe Brucker 0:cfd70fa91663 378 {0x3f, 0}, /* F6 */
Jean-Philippe Brucker 0:cfd70fa91663 379 {0x40, 0}, /* F7 */
Jean-Philippe Brucker 0:cfd70fa91663 380 {0x41, 0}, /* F8 */
Jean-Philippe Brucker 0:cfd70fa91663 381 {0x42, 0}, /* F9 */
Jean-Philippe Brucker 0:cfd70fa91663 382 {0x43, 0}, /* F10 */
Jean-Philippe Brucker 0:cfd70fa91663 383 {0x44, 0}, /* F11 */
Jean-Philippe Brucker 0:cfd70fa91663 384 {0x45, 0}, /* F12 */
Jean-Philippe Brucker 0:cfd70fa91663 385
Jean-Philippe Brucker 0:cfd70fa91663 386 {0x46, 0}, /* PRINT_SCREEN */
Jean-Philippe Brucker 0:cfd70fa91663 387 {0x47, 0}, /* SCROLL_LOCK */
Jean-Philippe Brucker 0:cfd70fa91663 388 {0x39, 0}, /* CAPS_LOCK */
Jean-Philippe Brucker 0:cfd70fa91663 389 {0x53, 0}, /* NUM_LOCK */
Jean-Philippe Brucker 0:cfd70fa91663 390 {0x49, 0}, /* INSERT */
Jean-Philippe Brucker 0:cfd70fa91663 391 {0x4a, 0}, /* HOME */
Jean-Philippe Brucker 0:cfd70fa91663 392 {0x4b, 0}, /* PAGE_UP */
Jean-Philippe Brucker 0:cfd70fa91663 393 {0x4e, 0}, /* PAGE_DOWN */
Jean-Philippe Brucker 0:cfd70fa91663 394
Jean-Philippe Brucker 0:cfd70fa91663 395 {0x4f, 0}, /* RIGHT_ARROW */
Jean-Philippe Brucker 0:cfd70fa91663 396 {0x50, 0}, /* LEFT_ARROW */
Jean-Philippe Brucker 0:cfd70fa91663 397 {0x51, 0}, /* DOWN_ARROW */
Jean-Philippe Brucker 0:cfd70fa91663 398 {0x52, 0}, /* UP_ARROW */
Jean-Philippe Brucker 0:cfd70fa91663 399 };
Jean-Philippe Brucker 0:cfd70fa91663 400 #endif
Jean-Philippe Brucker 0:cfd70fa91663 401
Jean-Philippe Brucker 0:cfd70fa91663 402 #endif
Jean-Philippe Brucker 0:cfd70fa91663 403