ME11B Sample Code in Maxim Integrated Team

Dependencies:   BMI160 max32630hsp3 MemoryLCD USBDevice

Fork of Host_Software_MAX32664GWEB_HR_EXTENDED by Seyhmus Cacina

Committer:
seyhmus.cacina
Date:
Mon Mar 18 10:21:53 2019 +0300
Revision:
0:ac4dea3e2894
ME11B Sample Code First Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seyhmus.cacina 0:ac4dea3e2894 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
seyhmus.cacina 0:ac4dea3e2894 2 *
seyhmus.cacina 0:ac4dea3e2894 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
seyhmus.cacina 0:ac4dea3e2894 4 * and associated documentation files (the "Software"), to deal in the Software without
seyhmus.cacina 0:ac4dea3e2894 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
seyhmus.cacina 0:ac4dea3e2894 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
seyhmus.cacina 0:ac4dea3e2894 7 * Software is furnished to do so, subject to the following conditions:
seyhmus.cacina 0:ac4dea3e2894 8 *
seyhmus.cacina 0:ac4dea3e2894 9 * The above copyright notice and this permission notice shall be included in all copies or
seyhmus.cacina 0:ac4dea3e2894 10 * substantial portions of the Software.
seyhmus.cacina 0:ac4dea3e2894 11 *
seyhmus.cacina 0:ac4dea3e2894 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
seyhmus.cacina 0:ac4dea3e2894 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
seyhmus.cacina 0:ac4dea3e2894 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
seyhmus.cacina 0:ac4dea3e2894 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
seyhmus.cacina 0:ac4dea3e2894 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
seyhmus.cacina 0:ac4dea3e2894 17 */
seyhmus.cacina 0:ac4dea3e2894 18
seyhmus.cacina 0:ac4dea3e2894 19 #ifndef USBDEVICE_H
seyhmus.cacina 0:ac4dea3e2894 20 #define USBDEVICE_H
seyhmus.cacina 0:ac4dea3e2894 21
seyhmus.cacina 0:ac4dea3e2894 22 #include "mbed.h"
seyhmus.cacina 0:ac4dea3e2894 23 #include "USBDevice_Types.h"
seyhmus.cacina 0:ac4dea3e2894 24 #include "USBHAL.h"
seyhmus.cacina 0:ac4dea3e2894 25
seyhmus.cacina 0:ac4dea3e2894 26 class USBDevice: public USBHAL
seyhmus.cacina 0:ac4dea3e2894 27 {
seyhmus.cacina 0:ac4dea3e2894 28 public:
seyhmus.cacina 0:ac4dea3e2894 29 USBDevice(uint16_t vendor_id, uint16_t product_id, uint16_t product_release);
seyhmus.cacina 0:ac4dea3e2894 30
seyhmus.cacina 0:ac4dea3e2894 31 /*
seyhmus.cacina 0:ac4dea3e2894 32 * Check if the device is configured
seyhmus.cacina 0:ac4dea3e2894 33 *
seyhmus.cacina 0:ac4dea3e2894 34 * @returns true if configured, false otherwise
seyhmus.cacina 0:ac4dea3e2894 35 */
seyhmus.cacina 0:ac4dea3e2894 36 bool configured(void);
seyhmus.cacina 0:ac4dea3e2894 37
seyhmus.cacina 0:ac4dea3e2894 38 /*
seyhmus.cacina 0:ac4dea3e2894 39 * Connect a device
seyhmus.cacina 0:ac4dea3e2894 40 *
seyhmus.cacina 0:ac4dea3e2894 41 * @param blocking: block if not configured
seyhmus.cacina 0:ac4dea3e2894 42 */
seyhmus.cacina 0:ac4dea3e2894 43 void connect(bool blocking = true);
seyhmus.cacina 0:ac4dea3e2894 44
seyhmus.cacina 0:ac4dea3e2894 45 /*
seyhmus.cacina 0:ac4dea3e2894 46 * Disconnect a device
seyhmus.cacina 0:ac4dea3e2894 47 */
seyhmus.cacina 0:ac4dea3e2894 48 void disconnect(void);
seyhmus.cacina 0:ac4dea3e2894 49
seyhmus.cacina 0:ac4dea3e2894 50 /*
seyhmus.cacina 0:ac4dea3e2894 51 * Add an endpoint
seyhmus.cacina 0:ac4dea3e2894 52 *
seyhmus.cacina 0:ac4dea3e2894 53 * @param endpoint endpoint which will be added
seyhmus.cacina 0:ac4dea3e2894 54 * @param maxPacket Maximum size of a packet which can be sent for this endpoint
seyhmus.cacina 0:ac4dea3e2894 55 * @returns true if successful, false otherwise
seyhmus.cacina 0:ac4dea3e2894 56 */
seyhmus.cacina 0:ac4dea3e2894 57 bool addEndpoint(uint8_t endpoint, uint32_t maxPacket);
seyhmus.cacina 0:ac4dea3e2894 58
seyhmus.cacina 0:ac4dea3e2894 59 /*
seyhmus.cacina 0:ac4dea3e2894 60 * Start a reading on a certain endpoint.
seyhmus.cacina 0:ac4dea3e2894 61 * You can access the result of the reading by USBDevice_read
seyhmus.cacina 0:ac4dea3e2894 62 *
seyhmus.cacina 0:ac4dea3e2894 63 * @param endpoint endpoint which will be read
seyhmus.cacina 0:ac4dea3e2894 64 * @param maxSize the maximum length that can be read
seyhmus.cacina 0:ac4dea3e2894 65 * @return true if successful
seyhmus.cacina 0:ac4dea3e2894 66 */
seyhmus.cacina 0:ac4dea3e2894 67 bool readStart(uint8_t endpoint, uint32_t maxSize);
seyhmus.cacina 0:ac4dea3e2894 68
seyhmus.cacina 0:ac4dea3e2894 69 /*
seyhmus.cacina 0:ac4dea3e2894 70 * Read a certain endpoint. Before calling this function, USBUSBDevice_readStart
seyhmus.cacina 0:ac4dea3e2894 71 * must be called.
seyhmus.cacina 0:ac4dea3e2894 72 *
seyhmus.cacina 0:ac4dea3e2894 73 * Warning: blocking
seyhmus.cacina 0:ac4dea3e2894 74 *
seyhmus.cacina 0:ac4dea3e2894 75 * @param endpoint endpoint which will be read
seyhmus.cacina 0:ac4dea3e2894 76 * @param buffer buffer will be filled with the data received
seyhmus.cacina 0:ac4dea3e2894 77 * @param size the number of bytes read will be stored in *size
seyhmus.cacina 0:ac4dea3e2894 78 * @param maxSize the maximum length that can be read
seyhmus.cacina 0:ac4dea3e2894 79 * @returns true if successful
seyhmus.cacina 0:ac4dea3e2894 80 */
seyhmus.cacina 0:ac4dea3e2894 81 bool readEP(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint32_t maxSize);
seyhmus.cacina 0:ac4dea3e2894 82
seyhmus.cacina 0:ac4dea3e2894 83 /*
seyhmus.cacina 0:ac4dea3e2894 84 * Read a certain endpoint.
seyhmus.cacina 0:ac4dea3e2894 85 *
seyhmus.cacina 0:ac4dea3e2894 86 * Warning: non blocking
seyhmus.cacina 0:ac4dea3e2894 87 *
seyhmus.cacina 0:ac4dea3e2894 88 * @param endpoint endpoint which will be read
seyhmus.cacina 0:ac4dea3e2894 89 * @param buffer buffer will be filled with the data received (if data are available)
seyhmus.cacina 0:ac4dea3e2894 90 * @param size the number of bytes read will be stored in *size
seyhmus.cacina 0:ac4dea3e2894 91 * @param maxSize the maximum length that can be read
seyhmus.cacina 0:ac4dea3e2894 92 * @returns true if successful
seyhmus.cacina 0:ac4dea3e2894 93 */
seyhmus.cacina 0:ac4dea3e2894 94 bool readEP_NB(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint32_t maxSize);
seyhmus.cacina 0:ac4dea3e2894 95
seyhmus.cacina 0:ac4dea3e2894 96 /*
seyhmus.cacina 0:ac4dea3e2894 97 * Write a certain endpoint.
seyhmus.cacina 0:ac4dea3e2894 98 *
seyhmus.cacina 0:ac4dea3e2894 99 * Warning: blocking
seyhmus.cacina 0:ac4dea3e2894 100 *
seyhmus.cacina 0:ac4dea3e2894 101 * @param endpoint endpoint to write
seyhmus.cacina 0:ac4dea3e2894 102 * @param buffer data contained in buffer will be write
seyhmus.cacina 0:ac4dea3e2894 103 * @param size the number of bytes to write
seyhmus.cacina 0:ac4dea3e2894 104 * @param maxSize the maximum length that can be written on this endpoint
seyhmus.cacina 0:ac4dea3e2894 105 */
seyhmus.cacina 0:ac4dea3e2894 106 bool write(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint32_t maxSize);
seyhmus.cacina 0:ac4dea3e2894 107
seyhmus.cacina 0:ac4dea3e2894 108
seyhmus.cacina 0:ac4dea3e2894 109 /*
seyhmus.cacina 0:ac4dea3e2894 110 * Write a certain endpoint.
seyhmus.cacina 0:ac4dea3e2894 111 *
seyhmus.cacina 0:ac4dea3e2894 112 * Warning: non blocking
seyhmus.cacina 0:ac4dea3e2894 113 *
seyhmus.cacina 0:ac4dea3e2894 114 * @param endpoint endpoint to write
seyhmus.cacina 0:ac4dea3e2894 115 * @param buffer data contained in buffer will be write
seyhmus.cacina 0:ac4dea3e2894 116 * @param size the number of bytes to write
seyhmus.cacina 0:ac4dea3e2894 117 * @param maxSize the maximum length that can be written on this endpoint
seyhmus.cacina 0:ac4dea3e2894 118 */
seyhmus.cacina 0:ac4dea3e2894 119 bool writeNB(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint32_t maxSize);
seyhmus.cacina 0:ac4dea3e2894 120
seyhmus.cacina 0:ac4dea3e2894 121
seyhmus.cacina 0:ac4dea3e2894 122 /*
seyhmus.cacina 0:ac4dea3e2894 123 * Called by USBDevice layer on bus reset. Warning: Called in ISR context
seyhmus.cacina 0:ac4dea3e2894 124 *
seyhmus.cacina 0:ac4dea3e2894 125 * May be used to reset state
seyhmus.cacina 0:ac4dea3e2894 126 */
seyhmus.cacina 0:ac4dea3e2894 127 virtual void USBCallback_busReset(void) {};
seyhmus.cacina 0:ac4dea3e2894 128
seyhmus.cacina 0:ac4dea3e2894 129 /*
seyhmus.cacina 0:ac4dea3e2894 130 * Called by USBDevice on Endpoint0 request. Warning: Called in ISR context
seyhmus.cacina 0:ac4dea3e2894 131 * This is used to handle extensions to standard requests
seyhmus.cacina 0:ac4dea3e2894 132 * and class specific requests
seyhmus.cacina 0:ac4dea3e2894 133 *
seyhmus.cacina 0:ac4dea3e2894 134 * @returns true if class handles this request
seyhmus.cacina 0:ac4dea3e2894 135 */
seyhmus.cacina 0:ac4dea3e2894 136 virtual bool USBCallback_request() { return false; };
seyhmus.cacina 0:ac4dea3e2894 137
seyhmus.cacina 0:ac4dea3e2894 138 /*
seyhmus.cacina 0:ac4dea3e2894 139 * Called by USBDevice on Endpoint0 request completion
seyhmus.cacina 0:ac4dea3e2894 140 * if the 'notify' flag has been set to true. Warning: Called in ISR context
seyhmus.cacina 0:ac4dea3e2894 141 *
seyhmus.cacina 0:ac4dea3e2894 142 * In this case it is used to indicate that a HID report has
seyhmus.cacina 0:ac4dea3e2894 143 * been received from the host on endpoint 0
seyhmus.cacina 0:ac4dea3e2894 144 *
seyhmus.cacina 0:ac4dea3e2894 145 * @param buf buffer received on endpoint 0
seyhmus.cacina 0:ac4dea3e2894 146 * @param length length of this buffer
seyhmus.cacina 0:ac4dea3e2894 147 */
seyhmus.cacina 0:ac4dea3e2894 148 virtual void USBCallback_requestCompleted(uint8_t * buf, uint32_t length) {};
seyhmus.cacina 0:ac4dea3e2894 149
seyhmus.cacina 0:ac4dea3e2894 150 /*
seyhmus.cacina 0:ac4dea3e2894 151 * Called by USBDevice layer. Set configuration of the device.
seyhmus.cacina 0:ac4dea3e2894 152 * For instance, you can add all endpoints that you need on this function.
seyhmus.cacina 0:ac4dea3e2894 153 *
seyhmus.cacina 0:ac4dea3e2894 154 * @param configuration Number of the configuration
seyhmus.cacina 0:ac4dea3e2894 155 */
seyhmus.cacina 0:ac4dea3e2894 156 virtual bool USBCallback_setConfiguration(uint8_t configuration) { return false; };
seyhmus.cacina 0:ac4dea3e2894 157
seyhmus.cacina 0:ac4dea3e2894 158 /*
seyhmus.cacina 0:ac4dea3e2894 159 * Called by USBDevice layer. Set interface/alternate of the device.
seyhmus.cacina 0:ac4dea3e2894 160 *
seyhmus.cacina 0:ac4dea3e2894 161 * @param interface Number of the interface to be configured
seyhmus.cacina 0:ac4dea3e2894 162 * @param alternate Number of the alternate to be configured
seyhmus.cacina 0:ac4dea3e2894 163 * @returns true if class handles this request
seyhmus.cacina 0:ac4dea3e2894 164 */
seyhmus.cacina 0:ac4dea3e2894 165 virtual bool USBCallback_setInterface(uint16_t interface, uint8_t alternate) { return false; };
seyhmus.cacina 0:ac4dea3e2894 166
seyhmus.cacina 0:ac4dea3e2894 167 /*
seyhmus.cacina 0:ac4dea3e2894 168 * Get device descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
seyhmus.cacina 0:ac4dea3e2894 169 *
seyhmus.cacina 0:ac4dea3e2894 170 * @returns pointer to the device descriptor
seyhmus.cacina 0:ac4dea3e2894 171 */
seyhmus.cacina 0:ac4dea3e2894 172 virtual uint8_t * deviceDesc();
seyhmus.cacina 0:ac4dea3e2894 173
seyhmus.cacina 0:ac4dea3e2894 174 /*
seyhmus.cacina 0:ac4dea3e2894 175 * Get configuration descriptor
seyhmus.cacina 0:ac4dea3e2894 176 *
seyhmus.cacina 0:ac4dea3e2894 177 * @returns pointer to the configuration descriptor
seyhmus.cacina 0:ac4dea3e2894 178 */
seyhmus.cacina 0:ac4dea3e2894 179 virtual uint8_t * configurationDesc(){return NULL;};
seyhmus.cacina 0:ac4dea3e2894 180
seyhmus.cacina 0:ac4dea3e2894 181 /*
seyhmus.cacina 0:ac4dea3e2894 182 * Get string lang id descriptor
seyhmus.cacina 0:ac4dea3e2894 183 *
seyhmus.cacina 0:ac4dea3e2894 184 * @return pointer to the string lang id descriptor
seyhmus.cacina 0:ac4dea3e2894 185 */
seyhmus.cacina 0:ac4dea3e2894 186 virtual uint8_t * stringLangidDesc();
seyhmus.cacina 0:ac4dea3e2894 187
seyhmus.cacina 0:ac4dea3e2894 188 /*
seyhmus.cacina 0:ac4dea3e2894 189 * Get string manufacturer descriptor
seyhmus.cacina 0:ac4dea3e2894 190 *
seyhmus.cacina 0:ac4dea3e2894 191 * @returns pointer to the string manufacturer descriptor
seyhmus.cacina 0:ac4dea3e2894 192 */
seyhmus.cacina 0:ac4dea3e2894 193 virtual uint8_t * stringImanufacturerDesc();
seyhmus.cacina 0:ac4dea3e2894 194
seyhmus.cacina 0:ac4dea3e2894 195 /*
seyhmus.cacina 0:ac4dea3e2894 196 * Get string product descriptor
seyhmus.cacina 0:ac4dea3e2894 197 *
seyhmus.cacina 0:ac4dea3e2894 198 * @returns pointer to the string product descriptor
seyhmus.cacina 0:ac4dea3e2894 199 */
seyhmus.cacina 0:ac4dea3e2894 200 virtual uint8_t * stringIproductDesc();
seyhmus.cacina 0:ac4dea3e2894 201
seyhmus.cacina 0:ac4dea3e2894 202 /*
seyhmus.cacina 0:ac4dea3e2894 203 * Get string serial descriptor
seyhmus.cacina 0:ac4dea3e2894 204 *
seyhmus.cacina 0:ac4dea3e2894 205 * @returns pointer to the string serial descriptor
seyhmus.cacina 0:ac4dea3e2894 206 */
seyhmus.cacina 0:ac4dea3e2894 207 virtual uint8_t * stringIserialDesc();
seyhmus.cacina 0:ac4dea3e2894 208
seyhmus.cacina 0:ac4dea3e2894 209 /*
seyhmus.cacina 0:ac4dea3e2894 210 * Get string configuration descriptor
seyhmus.cacina 0:ac4dea3e2894 211 *
seyhmus.cacina 0:ac4dea3e2894 212 * @returns pointer to the string configuration descriptor
seyhmus.cacina 0:ac4dea3e2894 213 */
seyhmus.cacina 0:ac4dea3e2894 214 virtual uint8_t * stringIConfigurationDesc();
seyhmus.cacina 0:ac4dea3e2894 215
seyhmus.cacina 0:ac4dea3e2894 216 /*
seyhmus.cacina 0:ac4dea3e2894 217 * Get string interface descriptor
seyhmus.cacina 0:ac4dea3e2894 218 *
seyhmus.cacina 0:ac4dea3e2894 219 * @returns pointer to the string interface descriptor
seyhmus.cacina 0:ac4dea3e2894 220 */
seyhmus.cacina 0:ac4dea3e2894 221 virtual uint8_t * stringIinterfaceDesc();
seyhmus.cacina 0:ac4dea3e2894 222
seyhmus.cacina 0:ac4dea3e2894 223 /*
seyhmus.cacina 0:ac4dea3e2894 224 * Get the length of the report descriptor
seyhmus.cacina 0:ac4dea3e2894 225 *
seyhmus.cacina 0:ac4dea3e2894 226 * @returns length of the report descriptor
seyhmus.cacina 0:ac4dea3e2894 227 */
seyhmus.cacina 0:ac4dea3e2894 228 virtual uint16_t reportDescLength() { return 0; };
seyhmus.cacina 0:ac4dea3e2894 229
seyhmus.cacina 0:ac4dea3e2894 230
seyhmus.cacina 0:ac4dea3e2894 231
seyhmus.cacina 0:ac4dea3e2894 232 protected:
seyhmus.cacina 0:ac4dea3e2894 233 virtual void busReset(void);
seyhmus.cacina 0:ac4dea3e2894 234 virtual void EP0setupCallback(void);
seyhmus.cacina 0:ac4dea3e2894 235 virtual void EP0out(void);
seyhmus.cacina 0:ac4dea3e2894 236 virtual void EP0in(void);
seyhmus.cacina 0:ac4dea3e2894 237 virtual void connectStateChanged(unsigned int connected);
seyhmus.cacina 0:ac4dea3e2894 238 virtual void suspendStateChanged(unsigned int suspended);
seyhmus.cacina 0:ac4dea3e2894 239 uint8_t * findDescriptor(uint8_t descriptorType);
seyhmus.cacina 0:ac4dea3e2894 240 CONTROL_TRANSFER * getTransferPtr(void);
seyhmus.cacina 0:ac4dea3e2894 241
seyhmus.cacina 0:ac4dea3e2894 242 uint16_t VENDOR_ID;
seyhmus.cacina 0:ac4dea3e2894 243 uint16_t PRODUCT_ID;
seyhmus.cacina 0:ac4dea3e2894 244 uint16_t PRODUCT_RELEASE;
seyhmus.cacina 0:ac4dea3e2894 245
seyhmus.cacina 0:ac4dea3e2894 246 private:
seyhmus.cacina 0:ac4dea3e2894 247 bool addRateFeedbackEndpoint(uint8_t endpoint, uint32_t maxPacket);
seyhmus.cacina 0:ac4dea3e2894 248 bool requestGetDescriptor(void);
seyhmus.cacina 0:ac4dea3e2894 249 bool controlOut(void);
seyhmus.cacina 0:ac4dea3e2894 250 bool controlIn(void);
seyhmus.cacina 0:ac4dea3e2894 251 bool requestSetAddress(void);
seyhmus.cacina 0:ac4dea3e2894 252 bool requestSetConfiguration(void);
seyhmus.cacina 0:ac4dea3e2894 253 bool requestSetFeature(void);
seyhmus.cacina 0:ac4dea3e2894 254 bool requestClearFeature(void);
seyhmus.cacina 0:ac4dea3e2894 255 bool requestGetStatus(void);
seyhmus.cacina 0:ac4dea3e2894 256 bool requestSetup(void);
seyhmus.cacina 0:ac4dea3e2894 257 bool controlSetup(void);
seyhmus.cacina 0:ac4dea3e2894 258 void decodeSetupPacket(uint8_t *data, SETUP_PACKET *packet);
seyhmus.cacina 0:ac4dea3e2894 259 bool requestGetConfiguration(void);
seyhmus.cacina 0:ac4dea3e2894 260 bool requestGetInterface(void);
seyhmus.cacina 0:ac4dea3e2894 261 bool requestSetInterface(void);
seyhmus.cacina 0:ac4dea3e2894 262
seyhmus.cacina 0:ac4dea3e2894 263 CONTROL_TRANSFER transfer;
seyhmus.cacina 0:ac4dea3e2894 264 USB_DEVICE device;
seyhmus.cacina 0:ac4dea3e2894 265
seyhmus.cacina 0:ac4dea3e2894 266 uint16_t currentInterface;
seyhmus.cacina 0:ac4dea3e2894 267 uint8_t currentAlternate;
seyhmus.cacina 0:ac4dea3e2894 268 };
seyhmus.cacina 0:ac4dea3e2894 269
seyhmus.cacina 0:ac4dea3e2894 270
seyhmus.cacina 0:ac4dea3e2894 271 #endif