N64 to USB HID interface

Dependencies:   mbed

Committer:
igor_m
Date:
Sun Sep 25 03:44:08 2011 +0000
Revision:
0:547c5459faa6
Release

Who changed what in which revision?

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