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:
Wed Oct 07 11:29:52 2015 +0100
Revision:
1:7a6c2e2c9371
Parent:
0:cfd70fa91663
Publish version 0.1 of the BLE HID lib

This version number is completely arbitrary, and probably won't stick: once the
service is stable, we'll merge it with BLE API.
It is simply used to keep examples in sync with the lib and the github
repository during development.

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