Fork of the official USBDevice library

Fork of USBDevice by mbed official

Committer:
screamer
Date:
Fri Apr 28 17:01:10 2017 +0000
Branch:
device-files
Revision:
76:f0fd8d911b24
Parent:
73:8d28a0cb7b43
Changed the layout of USBDevice implementation for various targets to match mbed-os/targets. This also reduces the amount of files being compiled as USBDevice code for other targets is not compiled.

Who changed what in which revision?

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