USB device stack

Fork of USBDevice by mbed official

Committer:
nikitamere
Date:
Fri Sep 16 01:03:54 2016 +0000
Revision:
66:b6940e641a15
Modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nikitamere 66:b6940e641a15 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
nikitamere 66:b6940e641a15 2 *
nikitamere 66:b6940e641a15 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
nikitamere 66:b6940e641a15 4 * and associated documentation files (the "Software"), to deal in the Software without
nikitamere 66:b6940e641a15 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
nikitamere 66:b6940e641a15 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
nikitamere 66:b6940e641a15 7 * Software is furnished to do so, subject to the following conditions:
nikitamere 66:b6940e641a15 8 *
nikitamere 66:b6940e641a15 9 * The above copyright notice and this permission notice shall be included in all copies or
nikitamere 66:b6940e641a15 10 * substantial portions of the Software.
nikitamere 66:b6940e641a15 11 *
nikitamere 66:b6940e641a15 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
nikitamere 66:b6940e641a15 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
nikitamere 66:b6940e641a15 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
nikitamere 66:b6940e641a15 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
nikitamere 66:b6940e641a15 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
nikitamere 66:b6940e641a15 17 */
nikitamere 66:b6940e641a15 18
nikitamere 66:b6940e641a15 19
nikitamere 66:b6940e641a15 20 #ifndef USB_HID_H
nikitamere 66:b6940e641a15 21 #define USB_HID_H
nikitamere 66:b6940e641a15 22
nikitamere 66:b6940e641a15 23 /* These headers are included for child class. */
nikitamere 66:b6940e641a15 24 #include "USBEndpoints.h"
nikitamere 66:b6940e641a15 25 #include "USBDescriptor.h"
nikitamere 66:b6940e641a15 26 #include "USBDevice_Types.h"
nikitamere 66:b6940e641a15 27
nikitamere 66:b6940e641a15 28 #include "USBHID_Types.h"
nikitamere 66:b6940e641a15 29 #include "USBDevice.h"
nikitamere 66:b6940e641a15 30
nikitamere 66:b6940e641a15 31
nikitamere 66:b6940e641a15 32 /**
nikitamere 66:b6940e641a15 33 * USBHID example
nikitamere 66:b6940e641a15 34 * @code
nikitamere 66:b6940e641a15 35 * #include "mbed.h"
nikitamere 66:b6940e641a15 36 * #include "USBHID.h"
nikitamere 66:b6940e641a15 37 *
nikitamere 66:b6940e641a15 38 * USBHID hid;
nikitamere 66:b6940e641a15 39 * HID_REPORT recv;
nikitamere 66:b6940e641a15 40 * BusOut leds(LED1,LED2,LED3,LED4);
nikitamere 66:b6940e641a15 41 *
nikitamere 66:b6940e641a15 42 * int main(void) {
nikitamere 66:b6940e641a15 43 * while (1) {
nikitamere 66:b6940e641a15 44 * hid.read(&recv);
nikitamere 66:b6940e641a15 45 * leds = recv.data[0];
nikitamere 66:b6940e641a15 46 * }
nikitamere 66:b6940e641a15 47 * }
nikitamere 66:b6940e641a15 48 * @endcode
nikitamere 66:b6940e641a15 49 */
nikitamere 66:b6940e641a15 50
nikitamere 66:b6940e641a15 51 class USBHID: public USBDevice {
nikitamere 66:b6940e641a15 52 public:
nikitamere 66:b6940e641a15 53
nikitamere 66:b6940e641a15 54 /**
nikitamere 66:b6940e641a15 55 * Constructor
nikitamere 66:b6940e641a15 56 *
nikitamere 66:b6940e641a15 57 * @param output_report_length Maximum length of a sent report (up to 64 bytes) (default: 64 bytes)
nikitamere 66:b6940e641a15 58 * @param input_report_length Maximum length of a received report (up to 64 bytes) (default: 64 bytes)
nikitamere 66:b6940e641a15 59 * @param vendor_id Your vendor_id
nikitamere 66:b6940e641a15 60 * @param product_id Your product_id
nikitamere 66:b6940e641a15 61 * @param product_release Your preoduct_release
nikitamere 66:b6940e641a15 62 * @param connect Connect the device
nikitamere 66:b6940e641a15 63 */
nikitamere 66:b6940e641a15 64 USBHID(uint8_t output_report_length = 64, uint8_t input_report_length = 64, uint16_t vendor_id = 0x1234, uint16_t product_id = 0x0006, uint16_t product_release = 0x0001, bool connect = true);
nikitamere 66:b6940e641a15 65
nikitamere 66:b6940e641a15 66
nikitamere 66:b6940e641a15 67 /**
nikitamere 66:b6940e641a15 68 * Send a Report. warning: blocking
nikitamere 66:b6940e641a15 69 *
nikitamere 66:b6940e641a15 70 * @param report Report which will be sent (a report is defined by all data and the length)
nikitamere 66:b6940e641a15 71 * @returns true if successful
nikitamere 66:b6940e641a15 72 */
nikitamere 66:b6940e641a15 73 bool send(HID_REPORT *report);
nikitamere 66:b6940e641a15 74
nikitamere 66:b6940e641a15 75
nikitamere 66:b6940e641a15 76 /**
nikitamere 66:b6940e641a15 77 * Send a Report. warning: non blocking
nikitamere 66:b6940e641a15 78 *
nikitamere 66:b6940e641a15 79 * @param report Report which will be sent (a report is defined by all data and the length)
nikitamere 66:b6940e641a15 80 * @returns true if successful
nikitamere 66:b6940e641a15 81 */
nikitamere 66:b6940e641a15 82 bool sendNB(HID_REPORT *report);
nikitamere 66:b6940e641a15 83
nikitamere 66:b6940e641a15 84 /**
nikitamere 66:b6940e641a15 85 * Read a report: blocking
nikitamere 66:b6940e641a15 86 *
nikitamere 66:b6940e641a15 87 * @param report pointer to the report to fill
nikitamere 66:b6940e641a15 88 * @returns true if successful
nikitamere 66:b6940e641a15 89 */
nikitamere 66:b6940e641a15 90 bool read(HID_REPORT * report);
nikitamere 66:b6940e641a15 91
nikitamere 66:b6940e641a15 92 /**
nikitamere 66:b6940e641a15 93 * Read a report: non blocking
nikitamere 66:b6940e641a15 94 *
nikitamere 66:b6940e641a15 95 * @param report pointer to the report to fill
nikitamere 66:b6940e641a15 96 * @returns true if successful
nikitamere 66:b6940e641a15 97 */
nikitamere 66:b6940e641a15 98 bool readNB(HID_REPORT * report);
nikitamere 66:b6940e641a15 99
nikitamere 66:b6940e641a15 100 protected:
nikitamere 66:b6940e641a15 101 uint16_t reportLength;
nikitamere 66:b6940e641a15 102
nikitamere 66:b6940e641a15 103 /*
nikitamere 66:b6940e641a15 104 * Get the Report descriptor
nikitamere 66:b6940e641a15 105 *
nikitamere 66:b6940e641a15 106 * @returns pointer to the report descriptor
nikitamere 66:b6940e641a15 107 */
nikitamere 66:b6940e641a15 108 virtual uint8_t * reportDesc();
nikitamere 66:b6940e641a15 109
nikitamere 66:b6940e641a15 110 /*
nikitamere 66:b6940e641a15 111 * Get the length of the report descriptor
nikitamere 66:b6940e641a15 112 *
nikitamere 66:b6940e641a15 113 * @returns the length of the report descriptor
nikitamere 66:b6940e641a15 114 */
nikitamere 66:b6940e641a15 115 virtual uint16_t reportDescLength();
nikitamere 66:b6940e641a15 116
nikitamere 66:b6940e641a15 117 /*
nikitamere 66:b6940e641a15 118 * Get string product descriptor
nikitamere 66:b6940e641a15 119 *
nikitamere 66:b6940e641a15 120 * @returns pointer to the string product descriptor
nikitamere 66:b6940e641a15 121 */
nikitamere 66:b6940e641a15 122 virtual uint8_t * stringIproductDesc();
nikitamere 66:b6940e641a15 123
nikitamere 66:b6940e641a15 124 /*
nikitamere 66:b6940e641a15 125 * Get string interface descriptor
nikitamere 66:b6940e641a15 126 *
nikitamere 66:b6940e641a15 127 * @returns pointer to the string interface descriptor
nikitamere 66:b6940e641a15 128 */
nikitamere 66:b6940e641a15 129 virtual uint8_t * stringIinterfaceDesc();
nikitamere 66:b6940e641a15 130
nikitamere 66:b6940e641a15 131 /*
nikitamere 66:b6940e641a15 132 * Get configuration descriptor
nikitamere 66:b6940e641a15 133 *
nikitamere 66:b6940e641a15 134 * @returns pointer to the configuration descriptor
nikitamere 66:b6940e641a15 135 */
nikitamere 66:b6940e641a15 136 virtual uint8_t * configurationDesc();
nikitamere 66:b6940e641a15 137
nikitamere 66:b6940e641a15 138
nikitamere 66:b6940e641a15 139
nikitamere 66:b6940e641a15 140 /*
nikitamere 66:b6940e641a15 141 * HID Report received by SET_REPORT request. Warning: Called in ISR context
nikitamere 66:b6940e641a15 142 * First byte of data will be the report ID
nikitamere 66:b6940e641a15 143 *
nikitamere 66:b6940e641a15 144 * @param report Data and length received
nikitamere 66:b6940e641a15 145 */
nikitamere 66:b6940e641a15 146 virtual void HID_callbackSetReport(HID_REPORT *report){};
nikitamere 66:b6940e641a15 147
nikitamere 66:b6940e641a15 148
nikitamere 66:b6940e641a15 149 /*
nikitamere 66:b6940e641a15 150 * Called by USBDevice on Endpoint0 request. Warning: Called in ISR context
nikitamere 66:b6940e641a15 151 * This is used to handle extensions to standard requests
nikitamere 66:b6940e641a15 152 * and class specific requests
nikitamere 66:b6940e641a15 153 *
nikitamere 66:b6940e641a15 154 * @returns true if class handles this request
nikitamere 66:b6940e641a15 155 */
nikitamere 66:b6940e641a15 156 virtual bool USBCallback_request();
nikitamere 66:b6940e641a15 157
nikitamere 66:b6940e641a15 158
nikitamere 66:b6940e641a15 159 /*
nikitamere 66:b6940e641a15 160 * Called by USBDevice layer. Set configuration of the device.
nikitamere 66:b6940e641a15 161 * For instance, you can add all endpoints that you need on this function.
nikitamere 66:b6940e641a15 162 *
nikitamere 66:b6940e641a15 163 * @param configuration Number of the configuration
nikitamere 66:b6940e641a15 164 * @returns true if class handles this request
nikitamere 66:b6940e641a15 165 */
nikitamere 66:b6940e641a15 166 virtual bool USBCallback_setConfiguration(uint8_t configuration);
nikitamere 66:b6940e641a15 167
nikitamere 66:b6940e641a15 168 private:
nikitamere 66:b6940e641a15 169 HID_REPORT outputReport;
nikitamere 66:b6940e641a15 170 uint8_t output_length;
nikitamere 66:b6940e641a15 171 uint8_t input_length;
nikitamere 66:b6940e641a15 172 };
nikitamere 66:b6940e641a15 173
nikitamere 66:b6940e641a15 174 #endif