Based on USBKeyboardMouse example. I added USB String Descriptor so mbed reports itself to host not only with VID & PID but also with name of manufacturer, product name, serial number, configuration number and interface name. These can be changed to matching Yours in USBhid.cpp file on lines 88 - 122.

Dependencies:   mbed

Committer:
llumpu
Date:
Thu Sep 08 15:01:33 2011 +0000
Revision:
0:f97b1f255167
Added USB String Descriptor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
llumpu 0:f97b1f255167 1 /* asciihid.h */
llumpu 0:f97b1f255167 2 /* ASCII to HID Keyboard lookup table */
llumpu 0:f97b1f255167 3 /* Copyright (c) Phil Wright 2008 */
llumpu 0:f97b1f255167 4
llumpu 0:f97b1f255167 5 #ifndef HIDTABLE_H
llumpu 0:f97b1f255167 6 #define HIDTABLE_H
llumpu 0:f97b1f255167 7
llumpu 0:f97b1f255167 8 /* Default is UK keyboard layout */
llumpu 0:f97b1f255167 9 /* #define US_KEYBOARD */
llumpu 0:f97b1f255167 10
llumpu 0:f97b1f255167 11 /* Modifiers */
llumpu 0:f97b1f255167 12 #define SHIFT (1<<1)
llumpu 0:f97b1f255167 13
llumpu 0:f97b1f255167 14 typedef struct {
llumpu 0:f97b1f255167 15 unsigned char usage;
llumpu 0:f97b1f255167 16 unsigned char modifier;
llumpu 0:f97b1f255167 17 } KEYMAP;
llumpu 0:f97b1f255167 18
llumpu 0:f97b1f255167 19 #ifdef US_KEYBOARD
llumpu 0:f97b1f255167 20 /* US keyboard (as HID standard) */
llumpu 0:f97b1f255167 21 #define KEYMAP_SIZE (128)
llumpu 0:f97b1f255167 22 const KEYMAP keymap[KEYMAP_SIZE] = {
llumpu 0:f97b1f255167 23 {0, 0}, /* NUL */
llumpu 0:f97b1f255167 24 {0, 0}, /* SOH */
llumpu 0:f97b1f255167 25 {0, 0}, /* STX */
llumpu 0:f97b1f255167 26 {0, 0}, /* ETX */
llumpu 0:f97b1f255167 27 {0, 0}, /* EOT */
llumpu 0:f97b1f255167 28 {0, 0}, /* ENQ */
llumpu 0:f97b1f255167 29 {0, 0}, /* ACK */
llumpu 0:f97b1f255167 30 {0, 0}, /* BEL */
llumpu 0:f97b1f255167 31 {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */
llumpu 0:f97b1f255167 32 {0x2b, 0}, /* TAB */ /* Keyboard Tab */
llumpu 0:f97b1f255167 33 {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */
llumpu 0:f97b1f255167 34 {0, 0}, /* VT */
llumpu 0:f97b1f255167 35 {0, 0}, /* FF */
llumpu 0:f97b1f255167 36 {0, 0}, /* CR */
llumpu 0:f97b1f255167 37 {0, 0}, /* SO */
llumpu 0:f97b1f255167 38 {0, 0}, /* SI */
llumpu 0:f97b1f255167 39 {0, 0}, /* DEL */
llumpu 0:f97b1f255167 40 {0, 0}, /* DC1 */
llumpu 0:f97b1f255167 41 {0, 0}, /* DC2 */
llumpu 0:f97b1f255167 42 {0, 0}, /* DC3 */
llumpu 0:f97b1f255167 43 {0, 0}, /* DC4 */
llumpu 0:f97b1f255167 44 {0, 0}, /* NAK */
llumpu 0:f97b1f255167 45 {0, 0}, /* SYN */
llumpu 0:f97b1f255167 46 {0, 0}, /* ETB */
llumpu 0:f97b1f255167 47 {0, 0}, /* CAN */
llumpu 0:f97b1f255167 48 {0, 0}, /* EM */
llumpu 0:f97b1f255167 49 {0, 0}, /* SUB */
llumpu 0:f97b1f255167 50 {0, 0}, /* ESC */
llumpu 0:f97b1f255167 51 {0, 0}, /* FS */
llumpu 0:f97b1f255167 52 {0, 0}, /* GS */
llumpu 0:f97b1f255167 53 {0, 0}, /* RS */
llumpu 0:f97b1f255167 54 {0, 0}, /* US */
llumpu 0:f97b1f255167 55 {0x2c, 0}, /* */
llumpu 0:f97b1f255167 56 {0x1e, SHIFT}, /* ! */
llumpu 0:f97b1f255167 57 {0x34, SHIFT}, /* " */
llumpu 0:f97b1f255167 58 {0x20, SHIFT}, /* # */
llumpu 0:f97b1f255167 59 {0x21, SHIFT}, /* $ */
llumpu 0:f97b1f255167 60 {0x22, SHIFT}, /* % */
llumpu 0:f97b1f255167 61 {0x24, SHIFT}, /* & */
llumpu 0:f97b1f255167 62 {0x34, 0}, /* ' */
llumpu 0:f97b1f255167 63 {0x26, SHIFT}, /* ( */
llumpu 0:f97b1f255167 64 {0x27, SHIFT}, /* ) */
llumpu 0:f97b1f255167 65 {0x25, SHIFT}, /* * */
llumpu 0:f97b1f255167 66 {0x2e, SHIFT}, /* + */
llumpu 0:f97b1f255167 67 {0x36, 0}, /* , */
llumpu 0:f97b1f255167 68 {0x2d, 0}, /* - */
llumpu 0:f97b1f255167 69 {0x37, 0}, /* . */
llumpu 0:f97b1f255167 70 {0x38, 0}, /* / */
llumpu 0:f97b1f255167 71 {0x27, 0}, /* 0 */
llumpu 0:f97b1f255167 72 {0x1e, 0}, /* 1 */
llumpu 0:f97b1f255167 73 {0x1f, 0}, /* 2 */
llumpu 0:f97b1f255167 74 {0x20, 0}, /* 3 */
llumpu 0:f97b1f255167 75 {0x21, 0}, /* 4 */
llumpu 0:f97b1f255167 76 {0x22, 0}, /* 5 */
llumpu 0:f97b1f255167 77 {0x23, 0}, /* 6 */
llumpu 0:f97b1f255167 78 {0x24, 0}, /* 7 */
llumpu 0:f97b1f255167 79 {0x25, 0}, /* 8 */
llumpu 0:f97b1f255167 80 {0x26, 0}, /* 9 */
llumpu 0:f97b1f255167 81 {0x33, SHIFT}, /* : */
llumpu 0:f97b1f255167 82 {0x33, 0}, /* ; */
llumpu 0:f97b1f255167 83 {0x36, SHIFT}, /* < */
llumpu 0:f97b1f255167 84 {0x2e, 0}, /* = */
llumpu 0:f97b1f255167 85 {0x37, SHIFT}, /* > */
llumpu 0:f97b1f255167 86 {0x38, SHIFT}, /* ? */
llumpu 0:f97b1f255167 87 {0x1f, SHIFT}, /* @ */
llumpu 0:f97b1f255167 88 {0x04, SHIFT}, /* A */
llumpu 0:f97b1f255167 89 {0x05, SHIFT}, /* B */
llumpu 0:f97b1f255167 90 {0x06, SHIFT}, /* C */
llumpu 0:f97b1f255167 91 {0x07, SHIFT}, /* D */
llumpu 0:f97b1f255167 92 {0x08, SHIFT}, /* E */
llumpu 0:f97b1f255167 93 {0x09, SHIFT}, /* F */
llumpu 0:f97b1f255167 94 {0x0a, SHIFT}, /* G */
llumpu 0:f97b1f255167 95 {0x0b, SHIFT}, /* H */
llumpu 0:f97b1f255167 96 {0x0c, SHIFT}, /* I */
llumpu 0:f97b1f255167 97 {0x0d, SHIFT}, /* J */
llumpu 0:f97b1f255167 98 {0x0e, SHIFT}, /* K */
llumpu 0:f97b1f255167 99 {0x0f, SHIFT}, /* L */
llumpu 0:f97b1f255167 100 {0x10, SHIFT}, /* M */
llumpu 0:f97b1f255167 101 {0x11, SHIFT}, /* N */
llumpu 0:f97b1f255167 102 {0x12, SHIFT}, /* O */
llumpu 0:f97b1f255167 103 {0x13, SHIFT}, /* P */
llumpu 0:f97b1f255167 104 {0x14, SHIFT}, /* Q */
llumpu 0:f97b1f255167 105 {0x15, SHIFT}, /* R */
llumpu 0:f97b1f255167 106 {0x16, SHIFT}, /* S */
llumpu 0:f97b1f255167 107 {0x17, SHIFT}, /* T */
llumpu 0:f97b1f255167 108 {0x18, SHIFT}, /* U */
llumpu 0:f97b1f255167 109 {0x19, SHIFT}, /* V */
llumpu 0:f97b1f255167 110 {0x1a, SHIFT}, /* W */
llumpu 0:f97b1f255167 111 {0x1b, SHIFT}, /* X */
llumpu 0:f97b1f255167 112 {0x1c, SHIFT}, /* Y */
llumpu 0:f97b1f255167 113 {0x1d, SHIFT}, /* Z */
llumpu 0:f97b1f255167 114 {0x2f, 0}, /* [ */
llumpu 0:f97b1f255167 115 {0x31, 0}, /* \ */
llumpu 0:f97b1f255167 116 {0x30, 0}, /* ] */
llumpu 0:f97b1f255167 117 {0x23, SHIFT}, /* ^ */
llumpu 0:f97b1f255167 118 {0x2d, SHIFT}, /* _ */
llumpu 0:f97b1f255167 119 {0x35, 0}, /* ` */
llumpu 0:f97b1f255167 120 {0x04, 0}, /* a */
llumpu 0:f97b1f255167 121 {0x05, 0}, /* b */
llumpu 0:f97b1f255167 122 {0x06, 0}, /* c */
llumpu 0:f97b1f255167 123 {0x07, 0}, /* d */
llumpu 0:f97b1f255167 124 {0x08, 0}, /* e */
llumpu 0:f97b1f255167 125 {0x09, 0}, /* f */
llumpu 0:f97b1f255167 126 {0x0a, 0}, /* g */
llumpu 0:f97b1f255167 127 {0x0b, 0}, /* h */
llumpu 0:f97b1f255167 128 {0x0c, 0}, /* i */
llumpu 0:f97b1f255167 129 {0x0d, 0}, /* j */
llumpu 0:f97b1f255167 130 {0x0e, 0}, /* k */
llumpu 0:f97b1f255167 131 {0x0f, 0}, /* l */
llumpu 0:f97b1f255167 132 {0x10, 0}, /* m */
llumpu 0:f97b1f255167 133 {0x11, 0}, /* n */
llumpu 0:f97b1f255167 134 {0x12, 0}, /* o */
llumpu 0:f97b1f255167 135 {0x13, 0}, /* p */
llumpu 0:f97b1f255167 136 {0x14, 0}, /* q */
llumpu 0:f97b1f255167 137 {0x15, 0}, /* r */
llumpu 0:f97b1f255167 138 {0x16, 0}, /* s */
llumpu 0:f97b1f255167 139 {0x17, 0}, /* t */
llumpu 0:f97b1f255167 140 {0x18, 0}, /* u */
llumpu 0:f97b1f255167 141 {0x19, 0}, /* v */
llumpu 0:f97b1f255167 142 {0x1a, 0}, /* w */
llumpu 0:f97b1f255167 143 {0x1b, 0}, /* x */
llumpu 0:f97b1f255167 144 {0x1c, 0}, /* y */
llumpu 0:f97b1f255167 145 {0x1d, 0}, /* z */
llumpu 0:f97b1f255167 146 {0x2f, SHIFT}, /* { */
llumpu 0:f97b1f255167 147 {0x31, SHIFT}, /* | */
llumpu 0:f97b1f255167 148 {0x30, SHIFT}, /* } */
llumpu 0:f97b1f255167 149 {0x35, SHIFT}, /* ~ */
llumpu 0:f97b1f255167 150 {0,0}, /* DEL */
llumpu 0:f97b1f255167 151 };
llumpu 0:f97b1f255167 152
llumpu 0:f97b1f255167 153 #else
llumpu 0:f97b1f255167 154 /* UK keyboard */
llumpu 0:f97b1f255167 155 #define KEYMAP_SIZE (128)
llumpu 0:f97b1f255167 156 const KEYMAP keymap[KEYMAP_SIZE] = {
llumpu 0:f97b1f255167 157 {0, 0}, /* NUL */
llumpu 0:f97b1f255167 158 {0, 0}, /* SOH */
llumpu 0:f97b1f255167 159 {0, 0}, /* STX */
llumpu 0:f97b1f255167 160 {0, 0}, /* ETX */
llumpu 0:f97b1f255167 161 {0, 0}, /* EOT */
llumpu 0:f97b1f255167 162 {0, 0}, /* ENQ */
llumpu 0:f97b1f255167 163 {0, 0}, /* ACK */
llumpu 0:f97b1f255167 164 {0, 0}, /* BEL */
llumpu 0:f97b1f255167 165 {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */
llumpu 0:f97b1f255167 166 {0x2b, 0}, /* TAB */ /* Keyboard Tab */
llumpu 0:f97b1f255167 167 {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */
llumpu 0:f97b1f255167 168 {0, 0}, /* VT */
llumpu 0:f97b1f255167 169 {0, 0}, /* FF */
llumpu 0:f97b1f255167 170 {0, 0}, /* CR */
llumpu 0:f97b1f255167 171 {0, 0}, /* SO */
llumpu 0:f97b1f255167 172 {0, 0}, /* SI */
llumpu 0:f97b1f255167 173 {0, 0}, /* DEL */
llumpu 0:f97b1f255167 174 {0, 0}, /* DC1 */
llumpu 0:f97b1f255167 175 {0, 0}, /* DC2 */
llumpu 0:f97b1f255167 176 {0, 0}, /* DC3 */
llumpu 0:f97b1f255167 177 {0, 0}, /* DC4 */
llumpu 0:f97b1f255167 178 {0, 0}, /* NAK */
llumpu 0:f97b1f255167 179 {0, 0}, /* SYN */
llumpu 0:f97b1f255167 180 {0, 0}, /* ETB */
llumpu 0:f97b1f255167 181 {0, 0}, /* CAN */
llumpu 0:f97b1f255167 182 {0, 0}, /* EM */
llumpu 0:f97b1f255167 183 {0, 0}, /* SUB */
llumpu 0:f97b1f255167 184 {0, 0}, /* ESC */
llumpu 0:f97b1f255167 185 {0, 0}, /* FS */
llumpu 0:f97b1f255167 186 {0, 0}, /* GS */
llumpu 0:f97b1f255167 187 {0, 0}, /* RS */
llumpu 0:f97b1f255167 188 {0, 0}, /* US */
llumpu 0:f97b1f255167 189 {0x2c, 0}, /* */
llumpu 0:f97b1f255167 190 {0x1e, SHIFT}, /* ! */
llumpu 0:f97b1f255167 191 {0x1f, SHIFT}, /* " */
llumpu 0:f97b1f255167 192 {0x32, 0}, /* # */
llumpu 0:f97b1f255167 193 {0x21, SHIFT}, /* $ */
llumpu 0:f97b1f255167 194 {0x22, SHIFT}, /* % */
llumpu 0:f97b1f255167 195 {0x24, SHIFT}, /* & */
llumpu 0:f97b1f255167 196 {0x34, 0}, /* ' */
llumpu 0:f97b1f255167 197 {0x26, SHIFT}, /* ( */
llumpu 0:f97b1f255167 198 {0x27, SHIFT}, /* ) */
llumpu 0:f97b1f255167 199 {0x25, SHIFT}, /* * */
llumpu 0:f97b1f255167 200 {0x2e, SHIFT}, /* + */
llumpu 0:f97b1f255167 201 {0x36, 0}, /* , */
llumpu 0:f97b1f255167 202 {0x2d, 0}, /* - */
llumpu 0:f97b1f255167 203 {0x37, 0}, /* . */
llumpu 0:f97b1f255167 204 {0x38, 0}, /* / */
llumpu 0:f97b1f255167 205 {0x27, 0}, /* 0 */
llumpu 0:f97b1f255167 206 {0x1e, 0}, /* 1 */
llumpu 0:f97b1f255167 207 {0x1f, 0}, /* 2 */
llumpu 0:f97b1f255167 208 {0x20, 0}, /* 3 */
llumpu 0:f97b1f255167 209 {0x21, 0}, /* 4 */
llumpu 0:f97b1f255167 210 {0x22, 0}, /* 5 */
llumpu 0:f97b1f255167 211 {0x23, 0}, /* 6 */
llumpu 0:f97b1f255167 212 {0x24, 0}, /* 7 */
llumpu 0:f97b1f255167 213 {0x25, 0}, /* 8 */
llumpu 0:f97b1f255167 214 {0x26, 0}, /* 9 */
llumpu 0:f97b1f255167 215 {0x33, SHIFT}, /* : */
llumpu 0:f97b1f255167 216 {0x33, 0}, /* ; */
llumpu 0:f97b1f255167 217 {0x36, SHIFT}, /* < */
llumpu 0:f97b1f255167 218 {0x2e, 0}, /* = */
llumpu 0:f97b1f255167 219 {0x37, SHIFT}, /* > */
llumpu 0:f97b1f255167 220 {0x38, SHIFT}, /* ? */
llumpu 0:f97b1f255167 221 {0x34, SHIFT}, /* @ */
llumpu 0:f97b1f255167 222 {0x04, SHIFT}, /* A */
llumpu 0:f97b1f255167 223 {0x05, SHIFT}, /* B */
llumpu 0:f97b1f255167 224 {0x06, SHIFT}, /* C */
llumpu 0:f97b1f255167 225 {0x07, SHIFT}, /* D */
llumpu 0:f97b1f255167 226 {0x08, SHIFT}, /* E */
llumpu 0:f97b1f255167 227 {0x09, SHIFT}, /* F */
llumpu 0:f97b1f255167 228 {0x0a, SHIFT}, /* G */
llumpu 0:f97b1f255167 229 {0x0b, SHIFT}, /* H */
llumpu 0:f97b1f255167 230 {0x0c, SHIFT}, /* I */
llumpu 0:f97b1f255167 231 {0x0d, SHIFT}, /* J */
llumpu 0:f97b1f255167 232 {0x0e, SHIFT}, /* K */
llumpu 0:f97b1f255167 233 {0x0f, SHIFT}, /* L */
llumpu 0:f97b1f255167 234 {0x10, SHIFT}, /* M */
llumpu 0:f97b1f255167 235 {0x11, SHIFT}, /* N */
llumpu 0:f97b1f255167 236 {0x12, SHIFT}, /* O */
llumpu 0:f97b1f255167 237 {0x13, SHIFT}, /* P */
llumpu 0:f97b1f255167 238 {0x14, SHIFT}, /* Q */
llumpu 0:f97b1f255167 239 {0x15, SHIFT}, /* R */
llumpu 0:f97b1f255167 240 {0x16, SHIFT}, /* S */
llumpu 0:f97b1f255167 241 {0x17, SHIFT}, /* T */
llumpu 0:f97b1f255167 242 {0x18, SHIFT}, /* U */
llumpu 0:f97b1f255167 243 {0x19, SHIFT}, /* V */
llumpu 0:f97b1f255167 244 {0x1a, SHIFT}, /* W */
llumpu 0:f97b1f255167 245 {0x1b, SHIFT}, /* X */
llumpu 0:f97b1f255167 246 {0x1c, SHIFT}, /* Y */
llumpu 0:f97b1f255167 247 {0x1d, SHIFT}, /* Z */
llumpu 0:f97b1f255167 248 {0x2f, 0}, /* [ */
llumpu 0:f97b1f255167 249 {0x64, 0}, /* \ */
llumpu 0:f97b1f255167 250 {0x30, 0}, /* ] */
llumpu 0:f97b1f255167 251 {0x23, SHIFT}, /* ^ */
llumpu 0:f97b1f255167 252 {0x2d, SHIFT}, /* _ */
llumpu 0:f97b1f255167 253 {0x35, 0}, /* ` */
llumpu 0:f97b1f255167 254 {0x04, 0}, /* a */
llumpu 0:f97b1f255167 255 {0x05, 0}, /* b */
llumpu 0:f97b1f255167 256 {0x06, 0}, /* c */
llumpu 0:f97b1f255167 257 {0x07, 0}, /* d */
llumpu 0:f97b1f255167 258 {0x08, 0}, /* e */
llumpu 0:f97b1f255167 259 {0x09, 0}, /* f */
llumpu 0:f97b1f255167 260 {0x0a, 0}, /* g */
llumpu 0:f97b1f255167 261 {0x0b, 0}, /* h */
llumpu 0:f97b1f255167 262 {0x0c, 0}, /* i */
llumpu 0:f97b1f255167 263 {0x0d, 0}, /* j */
llumpu 0:f97b1f255167 264 {0x0e, 0}, /* k */
llumpu 0:f97b1f255167 265 {0x0f, 0}, /* l */
llumpu 0:f97b1f255167 266 {0x10, 0}, /* m */
llumpu 0:f97b1f255167 267 {0x11, 0}, /* n */
llumpu 0:f97b1f255167 268 {0x12, 0}, /* o */
llumpu 0:f97b1f255167 269 {0x13, 0}, /* p */
llumpu 0:f97b1f255167 270 {0x14, 0}, /* q */
llumpu 0:f97b1f255167 271 {0x15, 0}, /* r */
llumpu 0:f97b1f255167 272 {0x16, 0}, /* s */
llumpu 0:f97b1f255167 273 {0x17, 0}, /* t */
llumpu 0:f97b1f255167 274 {0x18, 0}, /* u */
llumpu 0:f97b1f255167 275 {0x19, 0}, /* v */
llumpu 0:f97b1f255167 276 {0x1a, 0}, /* w */
llumpu 0:f97b1f255167 277 {0x1b, 0}, /* x */
llumpu 0:f97b1f255167 278 {0x1c, 0}, /* y */
llumpu 0:f97b1f255167 279 {0x1d, 0}, /* z */
llumpu 0:f97b1f255167 280 {0x2f, SHIFT}, /* { */
llumpu 0:f97b1f255167 281 {0x64, SHIFT}, /* | */
llumpu 0:f97b1f255167 282 {0x30, SHIFT}, /* } */
llumpu 0:f97b1f255167 283 {0x32, SHIFT}, /* ~ */
llumpu 0:f97b1f255167 284 {0,0}, /* DEL */
llumpu 0:f97b1f255167 285 };
llumpu 0:f97b1f255167 286 #endif
llumpu 0:f97b1f255167 287
llumpu 0:f97b1f255167 288
llumpu 0:f97b1f255167 289 #endif