This is early stages of my project, the idea of this project is to be able to mix a guitar with windows sounds in reverse such as instrumental background music or trance music perhaps or maybe another fellow guitarist you may have downloaded from the internet. Microphone or guitar pin is p19 I would use a microphone for drums:) and that it for the moment, the code makes the mbed act as usb speaker that excepts a guitar or microphone input, but with a twist it all in reverse like a guitar reverse effects pedal but only you can mix anything you can get from the internet or any windows sound.

Dependencies:   mbed

Committer:
mbed2f
Date:
Sun Jan 08 17:28:24 2012 +0000
Revision:
0:7610d342c76e

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed2f 0:7610d342c76e 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
mbed2f 0:7610d342c76e 2 *
mbed2f 0:7610d342c76e 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
mbed2f 0:7610d342c76e 4 * and associated documentation files (the "Software"), to deal in the Software without
mbed2f 0:7610d342c76e 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
mbed2f 0:7610d342c76e 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
mbed2f 0:7610d342c76e 7 * Software is furnished to do so, subject to the following conditions:
mbed2f 0:7610d342c76e 8 *
mbed2f 0:7610d342c76e 9 * The above copyright notice and this permission notice shall be included in all copies or
mbed2f 0:7610d342c76e 10 * substantial portions of the Software.
mbed2f 0:7610d342c76e 11 *
mbed2f 0:7610d342c76e 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
mbed2f 0:7610d342c76e 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
mbed2f 0:7610d342c76e 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
mbed2f 0:7610d342c76e 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
mbed2f 0:7610d342c76e 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
mbed2f 0:7610d342c76e 17 */
mbed2f 0:7610d342c76e 18
mbed2f 0:7610d342c76e 19 #include "stdint.h"
mbed2f 0:7610d342c76e 20
mbed2f 0:7610d342c76e 21 #include "USBKeyboard.h"
mbed2f 0:7610d342c76e 22
mbed2f 0:7610d342c76e 23 #define REPORT_ID_KEYBOARD 1
mbed2f 0:7610d342c76e 24 #define REPORT_ID_VOLUME 3
mbed2f 0:7610d342c76e 25
mbed2f 0:7610d342c76e 26
mbed2f 0:7610d342c76e 27 typedef struct {
mbed2f 0:7610d342c76e 28 unsigned char usage;
mbed2f 0:7610d342c76e 29 unsigned char modifier;
mbed2f 0:7610d342c76e 30 } KEYMAP;
mbed2f 0:7610d342c76e 31
mbed2f 0:7610d342c76e 32 #ifdef US_KEYBOARD
mbed2f 0:7610d342c76e 33 /* US keyboard (as HID standard) */
mbed2f 0:7610d342c76e 34 #define KEYMAP_SIZE (148)
mbed2f 0:7610d342c76e 35 const KEYMAP keymap[KEYMAP_SIZE] = {
mbed2f 0:7610d342c76e 36 {0, 0}, /* NUL */
mbed2f 0:7610d342c76e 37 {0, 0}, /* SOH */
mbed2f 0:7610d342c76e 38 {0, 0}, /* STX */
mbed2f 0:7610d342c76e 39 {0, 0}, /* ETX */
mbed2f 0:7610d342c76e 40 {0, 0}, /* EOT */
mbed2f 0:7610d342c76e 41 {0, 0}, /* ENQ */
mbed2f 0:7610d342c76e 42 {0, 0}, /* ACK */
mbed2f 0:7610d342c76e 43 {0, 0}, /* BEL */
mbed2f 0:7610d342c76e 44 {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */
mbed2f 0:7610d342c76e 45 {0x2b, 0}, /* TAB */ /* Keyboard Tab */
mbed2f 0:7610d342c76e 46 {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */
mbed2f 0:7610d342c76e 47 {0, 0}, /* VT */
mbed2f 0:7610d342c76e 48 {0, 0}, /* FF */
mbed2f 0:7610d342c76e 49 {0, 0}, /* CR */
mbed2f 0:7610d342c76e 50 {0, 0}, /* SO */
mbed2f 0:7610d342c76e 51 {0, 0}, /* SI */
mbed2f 0:7610d342c76e 52 {0, 0}, /* DEL */
mbed2f 0:7610d342c76e 53 {0, 0}, /* DC1 */
mbed2f 0:7610d342c76e 54 {0, 0}, /* DC2 */
mbed2f 0:7610d342c76e 55 {0, 0}, /* DC3 */
mbed2f 0:7610d342c76e 56 {0, 0}, /* DC4 */
mbed2f 0:7610d342c76e 57 {0, 0}, /* NAK */
mbed2f 0:7610d342c76e 58 {0, 0}, /* SYN */
mbed2f 0:7610d342c76e 59 {0, 0}, /* ETB */
mbed2f 0:7610d342c76e 60 {0, 0}, /* CAN */
mbed2f 0:7610d342c76e 61 {0, 0}, /* EM */
mbed2f 0:7610d342c76e 62 {0, 0}, /* SUB */
mbed2f 0:7610d342c76e 63 {0, 0}, /* ESC */
mbed2f 0:7610d342c76e 64 {0, 0}, /* FS */
mbed2f 0:7610d342c76e 65 {0, 0}, /* GS */
mbed2f 0:7610d342c76e 66 {0, 0}, /* RS */
mbed2f 0:7610d342c76e 67 {0, 0}, /* US */
mbed2f 0:7610d342c76e 68 {0x2c, 0}, /* */
mbed2f 0:7610d342c76e 69 {0x1e, KEY_SHIFT}, /* ! */
mbed2f 0:7610d342c76e 70 {0x34, KEY_SHIFT}, /* " */
mbed2f 0:7610d342c76e 71 {0x20, KEY_SHIFT}, /* # */
mbed2f 0:7610d342c76e 72 {0x21, KEY_SHIFT}, /* $ */
mbed2f 0:7610d342c76e 73 {0x22, KEY_SHIFT}, /* % */
mbed2f 0:7610d342c76e 74 {0x24, KEY_SHIFT}, /* & */
mbed2f 0:7610d342c76e 75 {0x34, 0}, /* ' */
mbed2f 0:7610d342c76e 76 {0x26, KEY_SHIFT}, /* ( */
mbed2f 0:7610d342c76e 77 {0x27, KEY_SHIFT}, /* ) */
mbed2f 0:7610d342c76e 78 {0x25, KEY_SHIFT}, /* * */
mbed2f 0:7610d342c76e 79 {0x2e, KEY_SHIFT}, /* + */
mbed2f 0:7610d342c76e 80 {0x36, 0}, /* , */
mbed2f 0:7610d342c76e 81 {0x2d, 0}, /* - */
mbed2f 0:7610d342c76e 82 {0x37, 0}, /* . */
mbed2f 0:7610d342c76e 83 {0x38, 0}, /* / */
mbed2f 0:7610d342c76e 84 {0x27, 0}, /* 0 */
mbed2f 0:7610d342c76e 85 {0x1e, 0}, /* 1 */
mbed2f 0:7610d342c76e 86 {0x1f, 0}, /* 2 */
mbed2f 0:7610d342c76e 87 {0x20, 0}, /* 3 */
mbed2f 0:7610d342c76e 88 {0x21, 0}, /* 4 */
mbed2f 0:7610d342c76e 89 {0x22, 0}, /* 5 */
mbed2f 0:7610d342c76e 90 {0x23, 0}, /* 6 */
mbed2f 0:7610d342c76e 91 {0x24, 0}, /* 7 */
mbed2f 0:7610d342c76e 92 {0x25, 0}, /* 8 */
mbed2f 0:7610d342c76e 93 {0x26, 0}, /* 9 */
mbed2f 0:7610d342c76e 94 {0x33, KEY_SHIFT}, /* : */
mbed2f 0:7610d342c76e 95 {0x33, 0}, /* ; */
mbed2f 0:7610d342c76e 96 {0x36, KEY_SHIFT}, /* < */
mbed2f 0:7610d342c76e 97 {0x2e, 0}, /* = */
mbed2f 0:7610d342c76e 98 {0x37, KEY_SHIFT}, /* > */
mbed2f 0:7610d342c76e 99 {0x38, KEY_SHIFT}, /* ? */
mbed2f 0:7610d342c76e 100 {0x1f, KEY_SHIFT}, /* @ */
mbed2f 0:7610d342c76e 101 {0x04, KEY_SHIFT}, /* A */
mbed2f 0:7610d342c76e 102 {0x05, KEY_SHIFT}, /* B */
mbed2f 0:7610d342c76e 103 {0x06, KEY_SHIFT}, /* C */
mbed2f 0:7610d342c76e 104 {0x07, KEY_SHIFT}, /* D */
mbed2f 0:7610d342c76e 105 {0x08, KEY_SHIFT}, /* E */
mbed2f 0:7610d342c76e 106 {0x09, KEY_SHIFT}, /* F */
mbed2f 0:7610d342c76e 107 {0x0a, KEY_SHIFT}, /* G */
mbed2f 0:7610d342c76e 108 {0x0b, KEY_SHIFT}, /* H */
mbed2f 0:7610d342c76e 109 {0x0c, KEY_SHIFT}, /* I */
mbed2f 0:7610d342c76e 110 {0x0d, KEY_SHIFT}, /* J */
mbed2f 0:7610d342c76e 111 {0x0e, KEY_SHIFT}, /* K */
mbed2f 0:7610d342c76e 112 {0x0f, KEY_SHIFT}, /* L */
mbed2f 0:7610d342c76e 113 {0x10, KEY_SHIFT}, /* M */
mbed2f 0:7610d342c76e 114 {0x11, KEY_SHIFT}, /* N */
mbed2f 0:7610d342c76e 115 {0x12, KEY_SHIFT}, /* O */
mbed2f 0:7610d342c76e 116 {0x13, KEY_SHIFT}, /* P */
mbed2f 0:7610d342c76e 117 {0x14, KEY_SHIFT}, /* Q */
mbed2f 0:7610d342c76e 118 {0x15, KEY_SHIFT}, /* R */
mbed2f 0:7610d342c76e 119 {0x16, KEY_SHIFT}, /* S */
mbed2f 0:7610d342c76e 120 {0x17, KEY_SHIFT}, /* T */
mbed2f 0:7610d342c76e 121 {0x18, KEY_SHIFT}, /* U */
mbed2f 0:7610d342c76e 122 {0x19, KEY_SHIFT}, /* V */
mbed2f 0:7610d342c76e 123 {0x1a, KEY_SHIFT}, /* W */
mbed2f 0:7610d342c76e 124 {0x1b, KEY_SHIFT}, /* X */
mbed2f 0:7610d342c76e 125 {0x1c, KEY_SHIFT}, /* Y */
mbed2f 0:7610d342c76e 126 {0x1d, KEY_SHIFT}, /* Z */
mbed2f 0:7610d342c76e 127 {0x2f, 0}, /* [ */
mbed2f 0:7610d342c76e 128 {0x31, 0}, /* \ */
mbed2f 0:7610d342c76e 129 {0x30, 0}, /* ] */
mbed2f 0:7610d342c76e 130 {0x23, KEY_SHIFT}, /* ^ */
mbed2f 0:7610d342c76e 131 {0x2d, KEY_SHIFT}, /* _ */
mbed2f 0:7610d342c76e 132 {0x35, 0}, /* ` */
mbed2f 0:7610d342c76e 133 {0x04, 0}, /* a */
mbed2f 0:7610d342c76e 134 {0x05, 0}, /* b */
mbed2f 0:7610d342c76e 135 {0x06, 0}, /* c */
mbed2f 0:7610d342c76e 136 {0x07, 0}, /* d */
mbed2f 0:7610d342c76e 137 {0x08, 0}, /* e */
mbed2f 0:7610d342c76e 138 {0x09, 0}, /* f */
mbed2f 0:7610d342c76e 139 {0x0a, 0}, /* g */
mbed2f 0:7610d342c76e 140 {0x0b, 0}, /* h */
mbed2f 0:7610d342c76e 141 {0x0c, 0}, /* i */
mbed2f 0:7610d342c76e 142 {0x0d, 0}, /* j */
mbed2f 0:7610d342c76e 143 {0x0e, 0}, /* k */
mbed2f 0:7610d342c76e 144 {0x0f, 0}, /* l */
mbed2f 0:7610d342c76e 145 {0x10, 0}, /* m */
mbed2f 0:7610d342c76e 146 {0x11, 0}, /* n */
mbed2f 0:7610d342c76e 147 {0x12, 0}, /* o */
mbed2f 0:7610d342c76e 148 {0x13, 0}, /* p */
mbed2f 0:7610d342c76e 149 {0x14, 0}, /* q */
mbed2f 0:7610d342c76e 150 {0x15, 0}, /* r */
mbed2f 0:7610d342c76e 151 {0x16, 0}, /* s */
mbed2f 0:7610d342c76e 152 {0x17, 0}, /* t */
mbed2f 0:7610d342c76e 153 {0x18, 0}, /* u */
mbed2f 0:7610d342c76e 154 {0x19, 0}, /* v */
mbed2f 0:7610d342c76e 155 {0x1a, 0}, /* w */
mbed2f 0:7610d342c76e 156 {0x1b, 0}, /* x */
mbed2f 0:7610d342c76e 157 {0x1c, 0}, /* y */
mbed2f 0:7610d342c76e 158 {0x1d, 0}, /* z */
mbed2f 0:7610d342c76e 159 {0x2f, KEY_SHIFT}, /* { */
mbed2f 0:7610d342c76e 160 {0x31, KEY_SHIFT}, /* | */
mbed2f 0:7610d342c76e 161 {0x30, KEY_SHIFT}, /* } */
mbed2f 0:7610d342c76e 162 {0x35, KEY_SHIFT}, /* ~ */
mbed2f 0:7610d342c76e 163 {0,0}, /* DEL */
mbed2f 0:7610d342c76e 164
mbed2f 0:7610d342c76e 165 {0x3a, 0}, /* F1 */
mbed2f 0:7610d342c76e 166 {0x3b, 0}, /* F2 */
mbed2f 0:7610d342c76e 167 {0x3c, 0}, /* F3 */
mbed2f 0:7610d342c76e 168 {0x3d, 0}, /* F4 */
mbed2f 0:7610d342c76e 169 {0x3e, 0}, /* F5 */
mbed2f 0:7610d342c76e 170 {0x3f, 0}, /* F6 */
mbed2f 0:7610d342c76e 171 {0x40, 0}, /* F7 */
mbed2f 0:7610d342c76e 172 {0x41, 0}, /* F8 */
mbed2f 0:7610d342c76e 173 {0x42, 0}, /* F9 */
mbed2f 0:7610d342c76e 174 {0x43, 0}, /* F10 */
mbed2f 0:7610d342c76e 175 {0x44, 0}, /* F11 */
mbed2f 0:7610d342c76e 176 {0x45, 0}, /* F12 */
mbed2f 0:7610d342c76e 177
mbed2f 0:7610d342c76e 178 {0x46, 0}, /* PRINT_SCREEN */
mbed2f 0:7610d342c76e 179 {0x47, 0}, /* SCROLL_LOCK */
mbed2f 0:7610d342c76e 180 {0x39, 0}, /* CAPS_LOCK */
mbed2f 0:7610d342c76e 181 {0x53, 0}, /* NUM_LOCK */
mbed2f 0:7610d342c76e 182 {0x49, 0}, /* INSERT */
mbed2f 0:7610d342c76e 183 {0x4a, 0}, /* HOME */
mbed2f 0:7610d342c76e 184 {0x4b, 0}, /* PAGE_UP */
mbed2f 0:7610d342c76e 185 {0x4e, 0}, /* PAGE_DOWN */
mbed2f 0:7610d342c76e 186 };
mbed2f 0:7610d342c76e 187
mbed2f 0:7610d342c76e 188 #else
mbed2f 0:7610d342c76e 189 /* UK keyboard */
mbed2f 0:7610d342c76e 190 #define KEYMAP_SIZE (148)
mbed2f 0:7610d342c76e 191 const KEYMAP keymap[KEYMAP_SIZE] = {
mbed2f 0:7610d342c76e 192 {0, 0}, /* NUL */
mbed2f 0:7610d342c76e 193 {0, 0}, /* SOH */
mbed2f 0:7610d342c76e 194 {0, 0}, /* STX */
mbed2f 0:7610d342c76e 195 {0, 0}, /* ETX */
mbed2f 0:7610d342c76e 196 {0, 0}, /* EOT */
mbed2f 0:7610d342c76e 197 {0, 0}, /* ENQ */
mbed2f 0:7610d342c76e 198 {0, 0}, /* ACK */
mbed2f 0:7610d342c76e 199 {0, 0}, /* BEL */
mbed2f 0:7610d342c76e 200 {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */
mbed2f 0:7610d342c76e 201 {0x2b, 0}, /* TAB */ /* Keyboard Tab */
mbed2f 0:7610d342c76e 202 {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */
mbed2f 0:7610d342c76e 203 {0, 0}, /* VT */
mbed2f 0:7610d342c76e 204 {0, 0}, /* FF */
mbed2f 0:7610d342c76e 205 {0, 0}, /* CR */
mbed2f 0:7610d342c76e 206 {0, 0}, /* SO */
mbed2f 0:7610d342c76e 207 {0, 0}, /* SI */
mbed2f 0:7610d342c76e 208 {0, 0}, /* DEL */
mbed2f 0:7610d342c76e 209 {0, 0}, /* DC1 */
mbed2f 0:7610d342c76e 210 {0, 0}, /* DC2 */
mbed2f 0:7610d342c76e 211 {0, 0}, /* DC3 */
mbed2f 0:7610d342c76e 212 {0, 0}, /* DC4 */
mbed2f 0:7610d342c76e 213 {0, 0}, /* NAK */
mbed2f 0:7610d342c76e 214 {0, 0}, /* SYN */
mbed2f 0:7610d342c76e 215 {0, 0}, /* ETB */
mbed2f 0:7610d342c76e 216 {0, 0}, /* CAN */
mbed2f 0:7610d342c76e 217 {0, 0}, /* EM */
mbed2f 0:7610d342c76e 218 {0, 0}, /* SUB */
mbed2f 0:7610d342c76e 219 {0, 0}, /* ESC */
mbed2f 0:7610d342c76e 220 {0, 0}, /* FS */
mbed2f 0:7610d342c76e 221 {0, 0}, /* GS */
mbed2f 0:7610d342c76e 222 {0, 0}, /* RS */
mbed2f 0:7610d342c76e 223 {0, 0}, /* US */
mbed2f 0:7610d342c76e 224 {0x2c, 0}, /* */
mbed2f 0:7610d342c76e 225 {0x1e, KEY_SHIFT}, /* ! */
mbed2f 0:7610d342c76e 226 {0x1f, KEY_SHIFT}, /* " */
mbed2f 0:7610d342c76e 227 {0x32, 0}, /* # */
mbed2f 0:7610d342c76e 228 {0x21, KEY_SHIFT}, /* $ */
mbed2f 0:7610d342c76e 229 {0x22, KEY_SHIFT}, /* % */
mbed2f 0:7610d342c76e 230 {0x24, KEY_SHIFT}, /* & */
mbed2f 0:7610d342c76e 231 {0x34, 0}, /* ' */
mbed2f 0:7610d342c76e 232 {0x26, KEY_SHIFT}, /* ( */
mbed2f 0:7610d342c76e 233 {0x27, KEY_SHIFT}, /* ) */
mbed2f 0:7610d342c76e 234 {0x25, KEY_SHIFT}, /* * */
mbed2f 0:7610d342c76e 235 {0x2e, KEY_SHIFT}, /* + */
mbed2f 0:7610d342c76e 236 {0x36, 0}, /* , */
mbed2f 0:7610d342c76e 237 {0x2d, 0}, /* - */
mbed2f 0:7610d342c76e 238 {0x37, 0}, /* . */
mbed2f 0:7610d342c76e 239 {0x38, 0}, /* / */
mbed2f 0:7610d342c76e 240 {0x27, 0}, /* 0 */
mbed2f 0:7610d342c76e 241 {0x1e, 0}, /* 1 */
mbed2f 0:7610d342c76e 242 {0x1f, 0}, /* 2 */
mbed2f 0:7610d342c76e 243 {0x20, 0}, /* 3 */
mbed2f 0:7610d342c76e 244 {0x21, 0}, /* 4 */
mbed2f 0:7610d342c76e 245 {0x22, 0}, /* 5 */
mbed2f 0:7610d342c76e 246 {0x23, 0}, /* 6 */
mbed2f 0:7610d342c76e 247 {0x24, 0}, /* 7 */
mbed2f 0:7610d342c76e 248 {0x25, 0}, /* 8 */
mbed2f 0:7610d342c76e 249 {0x26, 0}, /* 9 */
mbed2f 0:7610d342c76e 250 {0x33, KEY_SHIFT}, /* : */
mbed2f 0:7610d342c76e 251 {0x33, 0}, /* ; */
mbed2f 0:7610d342c76e 252 {0x36, KEY_SHIFT}, /* < */
mbed2f 0:7610d342c76e 253 {0x2e, 0}, /* = */
mbed2f 0:7610d342c76e 254 {0x37, KEY_SHIFT}, /* > */
mbed2f 0:7610d342c76e 255 {0x38, KEY_SHIFT}, /* ? */
mbed2f 0:7610d342c76e 256 {0x34, KEY_SHIFT}, /* @ */
mbed2f 0:7610d342c76e 257 {0x04, KEY_SHIFT}, /* A */
mbed2f 0:7610d342c76e 258 {0x05, KEY_SHIFT}, /* B */
mbed2f 0:7610d342c76e 259 {0x06, KEY_SHIFT}, /* C */
mbed2f 0:7610d342c76e 260 {0x07, KEY_SHIFT}, /* D */
mbed2f 0:7610d342c76e 261 {0x08, KEY_SHIFT}, /* E */
mbed2f 0:7610d342c76e 262 {0x09, KEY_SHIFT}, /* F */
mbed2f 0:7610d342c76e 263 {0x0a, KEY_SHIFT}, /* G */
mbed2f 0:7610d342c76e 264 {0x0b, KEY_SHIFT}, /* H */
mbed2f 0:7610d342c76e 265 {0x0c, KEY_SHIFT}, /* I */
mbed2f 0:7610d342c76e 266 {0x0d, KEY_SHIFT}, /* J */
mbed2f 0:7610d342c76e 267 {0x0e, KEY_SHIFT}, /* K */
mbed2f 0:7610d342c76e 268 {0x0f, KEY_SHIFT}, /* L */
mbed2f 0:7610d342c76e 269 {0x10, KEY_SHIFT}, /* M */
mbed2f 0:7610d342c76e 270 {0x11, KEY_SHIFT}, /* N */
mbed2f 0:7610d342c76e 271 {0x12, KEY_SHIFT}, /* O */
mbed2f 0:7610d342c76e 272 {0x13, KEY_SHIFT}, /* P */
mbed2f 0:7610d342c76e 273 {0x14, KEY_SHIFT}, /* Q */
mbed2f 0:7610d342c76e 274 {0x15, KEY_SHIFT}, /* R */
mbed2f 0:7610d342c76e 275 {0x16, KEY_SHIFT}, /* S */
mbed2f 0:7610d342c76e 276 {0x17, KEY_SHIFT}, /* T */
mbed2f 0:7610d342c76e 277 {0x18, KEY_SHIFT}, /* U */
mbed2f 0:7610d342c76e 278 {0x19, KEY_SHIFT}, /* V */
mbed2f 0:7610d342c76e 279 {0x1a, KEY_SHIFT}, /* W */
mbed2f 0:7610d342c76e 280 {0x1b, KEY_SHIFT}, /* X */
mbed2f 0:7610d342c76e 281 {0x1c, KEY_SHIFT}, /* Y */
mbed2f 0:7610d342c76e 282 {0x1d, KEY_SHIFT}, /* Z */
mbed2f 0:7610d342c76e 283 {0x2f, 0}, /* [ */
mbed2f 0:7610d342c76e 284 {0x64, 0}, /* \ */
mbed2f 0:7610d342c76e 285 {0x30, 0}, /* ] */
mbed2f 0:7610d342c76e 286 {0x23, KEY_SHIFT}, /* ^ */
mbed2f 0:7610d342c76e 287 {0x2d, KEY_SHIFT}, /* _ */
mbed2f 0:7610d342c76e 288 {0x35, 0}, /* ` */
mbed2f 0:7610d342c76e 289 {0x04, 0}, /* a */
mbed2f 0:7610d342c76e 290 {0x05, 0}, /* b */
mbed2f 0:7610d342c76e 291 {0x06, 0}, /* c */
mbed2f 0:7610d342c76e 292 {0x07, 0}, /* d */
mbed2f 0:7610d342c76e 293 {0x08, 0}, /* e */
mbed2f 0:7610d342c76e 294 {0x09, 0}, /* f */
mbed2f 0:7610d342c76e 295 {0x0a, 0}, /* g */
mbed2f 0:7610d342c76e 296 {0x0b, 0}, /* h */
mbed2f 0:7610d342c76e 297 {0x0c, 0}, /* i */
mbed2f 0:7610d342c76e 298 {0x0d, 0}, /* j */
mbed2f 0:7610d342c76e 299 {0x0e, 0}, /* k */
mbed2f 0:7610d342c76e 300 {0x0f, 0}, /* l */
mbed2f 0:7610d342c76e 301 {0x10, 0}, /* m */
mbed2f 0:7610d342c76e 302 {0x11, 0}, /* n */
mbed2f 0:7610d342c76e 303 {0x12, 0}, /* o */
mbed2f 0:7610d342c76e 304 {0x13, 0}, /* p */
mbed2f 0:7610d342c76e 305 {0x14, 0}, /* q */
mbed2f 0:7610d342c76e 306 {0x15, 0}, /* r */
mbed2f 0:7610d342c76e 307 {0x16, 0}, /* s */
mbed2f 0:7610d342c76e 308 {0x17, 0}, /* t */
mbed2f 0:7610d342c76e 309 {0x18, 0}, /* u */
mbed2f 0:7610d342c76e 310 {0x19, 0}, /* v */
mbed2f 0:7610d342c76e 311 {0x1a, 0}, /* w */
mbed2f 0:7610d342c76e 312 {0x1b, 0}, /* x */
mbed2f 0:7610d342c76e 313 {0x1c, 0}, /* y */
mbed2f 0:7610d342c76e 314 {0x1d, 0}, /* z */
mbed2f 0:7610d342c76e 315 {0x2f, KEY_SHIFT}, /* { */
mbed2f 0:7610d342c76e 316 {0x64, KEY_SHIFT}, /* | */
mbed2f 0:7610d342c76e 317 {0x30, KEY_SHIFT}, /* } */
mbed2f 0:7610d342c76e 318 {0x32, KEY_SHIFT}, /* ~ */
mbed2f 0:7610d342c76e 319 {0,0}, /* DEL */
mbed2f 0:7610d342c76e 320
mbed2f 0:7610d342c76e 321 {0x3a, 0}, /* F1 */
mbed2f 0:7610d342c76e 322 {0x3b, 0}, /* F2 */
mbed2f 0:7610d342c76e 323 {0x3c, 0}, /* F3 */
mbed2f 0:7610d342c76e 324 {0x3d, 0}, /* F4 */
mbed2f 0:7610d342c76e 325 {0x3e, 0}, /* F5 */
mbed2f 0:7610d342c76e 326 {0x3f, 0}, /* F6 */
mbed2f 0:7610d342c76e 327 {0x40, 0}, /* F7 */
mbed2f 0:7610d342c76e 328 {0x41, 0}, /* F8 */
mbed2f 0:7610d342c76e 329 {0x42, 0}, /* F9 */
mbed2f 0:7610d342c76e 330 {0x43, 0}, /* F10 */
mbed2f 0:7610d342c76e 331 {0x44, 0}, /* F11 */
mbed2f 0:7610d342c76e 332 {0x45, 0}, /* F12 */
mbed2f 0:7610d342c76e 333
mbed2f 0:7610d342c76e 334 {0x46, 0}, /* PRINT_SCREEN */
mbed2f 0:7610d342c76e 335 {0x47, 0}, /* SCROLL_LOCK */
mbed2f 0:7610d342c76e 336 {0x39, 0}, /* CAPS_LOCK */
mbed2f 0:7610d342c76e 337 {0x53, 0}, /* NUM_LOCK */
mbed2f 0:7610d342c76e 338 {0x49, 0}, /* INSERT */
mbed2f 0:7610d342c76e 339 {0x4a, 0}, /* HOME */
mbed2f 0:7610d342c76e 340 {0x4b, 0}, /* PAGE_UP */
mbed2f 0:7610d342c76e 341 {0x4e, 0}, /* PAGE_DOWN */
mbed2f 0:7610d342c76e 342 };
mbed2f 0:7610d342c76e 343 #endif
mbed2f 0:7610d342c76e 344
mbed2f 0:7610d342c76e 345 uint8_t * USBKeyboard::reportDesc() {
mbed2f 0:7610d342c76e 346 static uint8_t reportDescriptor[] = {
mbed2f 0:7610d342c76e 347 USAGE_PAGE(1), 0x01, // Generic Desktop
mbed2f 0:7610d342c76e 348 USAGE(1), 0x06, // Keyboard
mbed2f 0:7610d342c76e 349 COLLECTION(1), 0x01, // Application
mbed2f 0:7610d342c76e 350 REPORT_ID(1), REPORT_ID_KEYBOARD,
mbed2f 0:7610d342c76e 351
mbed2f 0:7610d342c76e 352 USAGE_PAGE(1), 0x07, // Key Codes
mbed2f 0:7610d342c76e 353 USAGE_MINIMUM(1), 0xE0,
mbed2f 0:7610d342c76e 354 USAGE_MAXIMUM(1), 0xE7,
mbed2f 0:7610d342c76e 355 LOGICAL_MINIMUM(1), 0x00,
mbed2f 0:7610d342c76e 356 LOGICAL_MAXIMUM(1), 0x01,
mbed2f 0:7610d342c76e 357 REPORT_SIZE(1), 0x01,
mbed2f 0:7610d342c76e 358 REPORT_COUNT(1), 0x08,
mbed2f 0:7610d342c76e 359 INPUT(1), 0x02, // Data, Variable, Absolute
mbed2f 0:7610d342c76e 360 REPORT_COUNT(1), 0x01,
mbed2f 0:7610d342c76e 361 REPORT_SIZE(1), 0x08,
mbed2f 0:7610d342c76e 362 INPUT(1), 0x01, // Constant
mbed2f 0:7610d342c76e 363
mbed2f 0:7610d342c76e 364
mbed2f 0:7610d342c76e 365 REPORT_COUNT(1), 0x05,
mbed2f 0:7610d342c76e 366 REPORT_SIZE(1), 0x01,
mbed2f 0:7610d342c76e 367 USAGE_PAGE(1), 0x08, // LEDs
mbed2f 0:7610d342c76e 368 USAGE_MINIMUM(1), 0x01,
mbed2f 0:7610d342c76e 369 USAGE_MAXIMUM(1), 0x05,
mbed2f 0:7610d342c76e 370 OUTPUT(1), 0x02, // Data, Variable, Absolute
mbed2f 0:7610d342c76e 371 REPORT_COUNT(1), 0x01,
mbed2f 0:7610d342c76e 372 REPORT_SIZE(1), 0x03,
mbed2f 0:7610d342c76e 373 OUTPUT(1), 0x01, // Constant
mbed2f 0:7610d342c76e 374
mbed2f 0:7610d342c76e 375
mbed2f 0:7610d342c76e 376 REPORT_COUNT(1), 0x06,
mbed2f 0:7610d342c76e 377 REPORT_SIZE(1), 0x08,
mbed2f 0:7610d342c76e 378 LOGICAL_MINIMUM(1), 0x00,
mbed2f 0:7610d342c76e 379 LOGICAL_MAXIMUM(1), 0x65,
mbed2f 0:7610d342c76e 380 USAGE_PAGE(1), 0x07, // Key Codes
mbed2f 0:7610d342c76e 381 USAGE_MINIMUM(1), 0x00,
mbed2f 0:7610d342c76e 382 USAGE_MAXIMUM(1), 0x65,
mbed2f 0:7610d342c76e 383 INPUT(1), 0x00, // Data, Array
mbed2f 0:7610d342c76e 384 END_COLLECTION(0),
mbed2f 0:7610d342c76e 385
mbed2f 0:7610d342c76e 386 // Media Control
mbed2f 0:7610d342c76e 387 USAGE_PAGE(1), 0x0C,
mbed2f 0:7610d342c76e 388 USAGE(1), 0x01,
mbed2f 0:7610d342c76e 389 COLLECTION(1), 0x01,
mbed2f 0:7610d342c76e 390 REPORT_ID(1), REPORT_ID_VOLUME,
mbed2f 0:7610d342c76e 391 USAGE_PAGE(1), 0x0C,
mbed2f 0:7610d342c76e 392 LOGICAL_MINIMUM(1), 0x00,
mbed2f 0:7610d342c76e 393 LOGICAL_MAXIMUM(1), 0x01,
mbed2f 0:7610d342c76e 394 REPORT_SIZE(1), 0x01,
mbed2f 0:7610d342c76e 395 REPORT_COUNT(1), 0x07,
mbed2f 0:7610d342c76e 396 USAGE(1), 0xB5, // Next Track
mbed2f 0:7610d342c76e 397 USAGE(1), 0xB6, // Previous Track
mbed2f 0:7610d342c76e 398 USAGE(1), 0xB7, // Stop
mbed2f 0:7610d342c76e 399 USAGE(1), 0xCD, // Play / Pause
mbed2f 0:7610d342c76e 400 USAGE(1), 0xE2, // Mute
mbed2f 0:7610d342c76e 401 USAGE(1), 0xE9, // Volume Up
mbed2f 0:7610d342c76e 402 USAGE(1), 0xEA, // Volume Down
mbed2f 0:7610d342c76e 403 INPUT(1), 0x02, // Input (Data, Variable, Absolute)
mbed2f 0:7610d342c76e 404 REPORT_COUNT(1), 0x01,
mbed2f 0:7610d342c76e 405 INPUT(1), 0x01,
mbed2f 0:7610d342c76e 406 END_COLLECTION(0),
mbed2f 0:7610d342c76e 407 };
mbed2f 0:7610d342c76e 408 reportLength = sizeof(reportDescriptor);
mbed2f 0:7610d342c76e 409 return reportDescriptor;
mbed2f 0:7610d342c76e 410 }
mbed2f 0:7610d342c76e 411
mbed2f 0:7610d342c76e 412
mbed2f 0:7610d342c76e 413 bool USBKeyboard::EP1_OUT_callback() {
mbed2f 0:7610d342c76e 414 uint16_t bytesRead = 0;
mbed2f 0:7610d342c76e 415 uint8_t led[65];
mbed2f 0:7610d342c76e 416 USBDevice::readEP(EPINT_OUT, led, &bytesRead, MAX_HID_REPORT_SIZE);
mbed2f 0:7610d342c76e 417
mbed2f 0:7610d342c76e 418 // we take led[1] because led[0] is the report ID
mbed2f 0:7610d342c76e 419 lock_status = led[1] & 0x07;
mbed2f 0:7610d342c76e 420
mbed2f 0:7610d342c76e 421 // We activate the endpoint to be able to recceive data
mbed2f 0:7610d342c76e 422 if (!readStart(EPINT_OUT, MAX_HID_REPORT_SIZE))
mbed2f 0:7610d342c76e 423 return false;
mbed2f 0:7610d342c76e 424 return true;
mbed2f 0:7610d342c76e 425 }
mbed2f 0:7610d342c76e 426
mbed2f 0:7610d342c76e 427 uint8_t USBKeyboard::lockStatus() {
mbed2f 0:7610d342c76e 428 return lock_status;
mbed2f 0:7610d342c76e 429 }
mbed2f 0:7610d342c76e 430
mbed2f 0:7610d342c76e 431 int USBKeyboard::_putc(int c) {
mbed2f 0:7610d342c76e 432 return keyCode(c, keymap[c].modifier);
mbed2f 0:7610d342c76e 433 }
mbed2f 0:7610d342c76e 434
mbed2f 0:7610d342c76e 435 bool USBKeyboard::keyCode(uint8_t key, uint8_t modifier) {
mbed2f 0:7610d342c76e 436 // Send a simulated keyboard keypress. Returns true if successful.
mbed2f 0:7610d342c76e 437 HID_REPORT report;
mbed2f 0:7610d342c76e 438
mbed2f 0:7610d342c76e 439 report.data[0] = REPORT_ID_KEYBOARD;
mbed2f 0:7610d342c76e 440 report.data[1] = modifier;
mbed2f 0:7610d342c76e 441 report.data[2] = 0;
mbed2f 0:7610d342c76e 442 report.data[3] = keymap[key].usage;
mbed2f 0:7610d342c76e 443 report.data[4] = 0;
mbed2f 0:7610d342c76e 444 report.data[5] = 0;
mbed2f 0:7610d342c76e 445 report.data[6] = 0;
mbed2f 0:7610d342c76e 446 report.data[7] = 0;
mbed2f 0:7610d342c76e 447 report.data[8] = 0;
mbed2f 0:7610d342c76e 448
mbed2f 0:7610d342c76e 449 report.length = 9;
mbed2f 0:7610d342c76e 450
mbed2f 0:7610d342c76e 451 if (!send(&report)) {
mbed2f 0:7610d342c76e 452 return false;
mbed2f 0:7610d342c76e 453 }
mbed2f 0:7610d342c76e 454
mbed2f 0:7610d342c76e 455 report.data[1] = 0;
mbed2f 0:7610d342c76e 456 report.data[3] = 0;
mbed2f 0:7610d342c76e 457
mbed2f 0:7610d342c76e 458 if (!send(&report)) {
mbed2f 0:7610d342c76e 459 return false;
mbed2f 0:7610d342c76e 460 }
mbed2f 0:7610d342c76e 461
mbed2f 0:7610d342c76e 462 return true;
mbed2f 0:7610d342c76e 463
mbed2f 0:7610d342c76e 464 }
mbed2f 0:7610d342c76e 465
mbed2f 0:7610d342c76e 466
mbed2f 0:7610d342c76e 467 bool USBKeyboard::mediaControl(MEDIA_KEY key) {
mbed2f 0:7610d342c76e 468 HID_REPORT report;
mbed2f 0:7610d342c76e 469
mbed2f 0:7610d342c76e 470 report.data[0] = REPORT_ID_VOLUME;
mbed2f 0:7610d342c76e 471 report.data[1] = (1 << key) & 0x7f;
mbed2f 0:7610d342c76e 472
mbed2f 0:7610d342c76e 473 report.length = 2;
mbed2f 0:7610d342c76e 474
mbed2f 0:7610d342c76e 475 if (!send(&report)) {
mbed2f 0:7610d342c76e 476 return false;
mbed2f 0:7610d342c76e 477 }
mbed2f 0:7610d342c76e 478
mbed2f 0:7610d342c76e 479 report.data[0] = REPORT_ID_VOLUME;
mbed2f 0:7610d342c76e 480 report.data[1] = 0;
mbed2f 0:7610d342c76e 481
mbed2f 0:7610d342c76e 482 report.length = 2;
mbed2f 0:7610d342c76e 483
mbed2f 0:7610d342c76e 484 return send(&report);
mbed2f 0:7610d342c76e 485 }