B. H. / Mbed 2 deprecated trolololol

Dependencies:   mbed

Committer:
znuh
Date:
Tue Nov 29 21:26:20 2011 +0000
Revision:
0:505207de8566

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
znuh 0:505207de8566 1 /* USBKeyboard.c */
znuh 0:505207de8566 2 /* USB device example: Standard keyboard */
znuh 0:505207de8566 3 /* Copyright (c) 2011 ARM Limited. All rights reserved. */
znuh 0:505207de8566 4
znuh 0:505207de8566 5 #include "stdint.h"
znuh 0:505207de8566 6
znuh 0:505207de8566 7 #include "USBKeyboard.h"
znuh 0:505207de8566 8
znuh 0:505207de8566 9 /*
znuh 0:505207de8566 10 * Descriptors
znuh 0:505207de8566 11 */
znuh 0:505207de8566 12
znuh 0:505207de8566 13 uint8_t * USBKeyboard::ReportDesc() {
znuh 0:505207de8566 14 static uint8_t reportDescriptor[] = {
znuh 0:505207de8566 15
znuh 0:505207de8566 16 /* Based on Appendix E.6 of "Device Class Definition for Human Interface
znuh 0:505207de8566 17 Devices (HID)" Version 1.11. */
znuh 0:505207de8566 18
znuh 0:505207de8566 19 USAGE_PAGE(1), 0x01, /* Generic Desktop */
znuh 0:505207de8566 20 USAGE(1), 0x06, /* Keyboard */
znuh 0:505207de8566 21 COLLECTION(1), 0x01, /* Application*/
znuh 0:505207de8566 22 REPORT_ID(1), REPORT_ID_KEYBOARD,
znuh 0:505207de8566 23
znuh 0:505207de8566 24 USAGE_PAGE(1), 0x07, /* Key Codes */
znuh 0:505207de8566 25 USAGE_MINIMUM(1), 0xE0,
znuh 0:505207de8566 26 USAGE_MAXIMUM(1), 0xE7,
znuh 0:505207de8566 27 LOGICAL_MINIMUM(1), 0x00,
znuh 0:505207de8566 28 LOGICAL_MAXIMUM(1), 0x01,
znuh 0:505207de8566 29 REPORT_SIZE(1), 0x01,
znuh 0:505207de8566 30 REPORT_COUNT(1), 0x08,
znuh 0:505207de8566 31 INPUT(1), 0x02, /* Data, Variable, Absolute */
znuh 0:505207de8566 32 REPORT_COUNT(1), 0x01,
znuh 0:505207de8566 33 REPORT_SIZE(1), 0x08,
znuh 0:505207de8566 34 INPUT(1), 0x01, /* Constant */
znuh 0:505207de8566 35 REPORT_COUNT(1), 0x05,
znuh 0:505207de8566 36 REPORT_SIZE(1), 0x01,
znuh 0:505207de8566 37
znuh 0:505207de8566 38
znuh 0:505207de8566 39 USAGE_PAGE(1), 0x08, /* LEDs */
znuh 0:505207de8566 40 USAGE_MINIMUM(1), 0x01,
znuh 0:505207de8566 41 USAGE_MAXIMUM(1), 0x05,
znuh 0:505207de8566 42 OUTPUT(1), 0x02, /* Data, Variable, Absolute */
znuh 0:505207de8566 43 REPORT_COUNT(1), 0x01,
znuh 0:505207de8566 44 REPORT_SIZE(1), 0x03,
znuh 0:505207de8566 45 OUTPUT(1), 0x01, /* Constant */
znuh 0:505207de8566 46 REPORT_COUNT(1), 0x06,
znuh 0:505207de8566 47 REPORT_SIZE(1), 0x08,
znuh 0:505207de8566 48 LOGICAL_MINIMUM(1), 0x00,
znuh 0:505207de8566 49 LOGICAL_MAXIMUM(1), 0x65,
znuh 0:505207de8566 50
znuh 0:505207de8566 51
znuh 0:505207de8566 52 USAGE_PAGE(1), 0x07, /* Key Codes */
znuh 0:505207de8566 53 USAGE_MINIMUM(1), 0x00,
znuh 0:505207de8566 54 USAGE_MAXIMUM(1), 0x65,
znuh 0:505207de8566 55 INPUT(1), 0x00, /* Data, Array */
znuh 0:505207de8566 56 END_COLLECTION(0),
znuh 0:505207de8566 57
znuh 0:505207de8566 58 /* Media Control */
znuh 0:505207de8566 59 USAGE_PAGE(1), 0x0C,
znuh 0:505207de8566 60 USAGE(1), 0x01,
znuh 0:505207de8566 61 COLLECTION(1), 0x01,
znuh 0:505207de8566 62 REPORT_ID(1), REPORT_ID_VOLUME,
znuh 0:505207de8566 63 USAGE_PAGE(1), 0x0C,
znuh 0:505207de8566 64 LOGICAL_MINIMUM(1), 0x00,
znuh 0:505207de8566 65 LOGICAL_MAXIMUM(1), 0x01,
znuh 0:505207de8566 66 REPORT_SIZE(1), 0x01,
znuh 0:505207de8566 67 REPORT_COUNT(1), 0x07,
znuh 0:505207de8566 68 USAGE(1), 0xB5, /* Next Track */
znuh 0:505207de8566 69 USAGE(1), 0xB6, /* Previous Track */
znuh 0:505207de8566 70 USAGE(1), 0xB7, /* Stop */
znuh 0:505207de8566 71 USAGE(1), 0xCD, /* Play / Pause */
znuh 0:505207de8566 72 USAGE(1), 0xE2, /* Mute */
znuh 0:505207de8566 73 USAGE(1), 0xE9, /* Volume Up */
znuh 0:505207de8566 74 USAGE(1), 0xEA, /* Volume Down */
znuh 0:505207de8566 75 INPUT(1), 0x02, /* Input (Data, Variable, Absolute) */
znuh 0:505207de8566 76 REPORT_COUNT(1), 0x01,
znuh 0:505207de8566 77 INPUT(1), 0x01,
znuh 0:505207de8566 78 END_COLLECTION(0),
znuh 0:505207de8566 79
znuh 0:505207de8566 80 };
znuh 0:505207de8566 81 reportLength = sizeof(reportDescriptor);
znuh 0:505207de8566 82 return reportDescriptor;
znuh 0:505207de8566 83 }
znuh 0:505207de8566 84
znuh 0:505207de8566 85 int USBKeyboard::_putc(int c) {
znuh 0:505207de8566 86 return keyCode(keymap[c].modifier, c);
znuh 0:505207de8566 87 }
znuh 0:505207de8566 88
znuh 0:505207de8566 89 bool USBKeyboard::keyCode(uint8_t modifier, uint8_t key) {
znuh 0:505207de8566 90 /* Send a simulated keyboard keypress. Returns true if successful. */
znuh 0:505207de8566 91
znuh 0:505207de8566 92 HID_REPORT report;
znuh 0:505207de8566 93
znuh 0:505207de8566 94 report.data[0] = REPORT_ID_KEYBOARD;
znuh 0:505207de8566 95 report.data[1] = modifier;
znuh 0:505207de8566 96 report.data[2] = 0;
znuh 0:505207de8566 97 report.data[3] = keymap[key].usage;
znuh 0:505207de8566 98 report.data[4] = 0;
znuh 0:505207de8566 99 report.data[5] = 0;
znuh 0:505207de8566 100 report.data[6] = 0;
znuh 0:505207de8566 101 report.data[7] = 0;
znuh 0:505207de8566 102 report.data[8] = 0;
znuh 0:505207de8566 103
znuh 0:505207de8566 104 report.length = 9;
znuh 0:505207de8566 105
znuh 0:505207de8566 106 if (!USBHID_send(EPINT_IN, &report)) {
znuh 0:505207de8566 107 return false;
znuh 0:505207de8566 108 }
znuh 0:505207de8566 109
znuh 0:505207de8566 110 report.data[1] = 0;
znuh 0:505207de8566 111 report.data[3] = 0;
znuh 0:505207de8566 112
znuh 0:505207de8566 113 if (!USBHID_send(EPINT_IN, &report)) {
znuh 0:505207de8566 114 return false;
znuh 0:505207de8566 115 }
znuh 0:505207de8566 116
znuh 0:505207de8566 117 return true;
znuh 0:505207de8566 118
znuh 0:505207de8566 119 }
znuh 0:505207de8566 120
znuh 0:505207de8566 121
znuh 0:505207de8566 122 bool USBKeyboard::mediaControl(MEDIA_KEY key) {
znuh 0:505207de8566 123 HID_REPORT report;
znuh 0:505207de8566 124
znuh 0:505207de8566 125 report.data[0] = REPORT_ID_VOLUME;
znuh 0:505207de8566 126 report.data[1] = (1 << key) & 0x7f;
znuh 0:505207de8566 127
znuh 0:505207de8566 128 report.length = 2;
znuh 0:505207de8566 129
znuh 0:505207de8566 130 return USBHID_send(EPINT_IN, &report);
znuh 0:505207de8566 131 }