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 USBBUSINTERFACE_H
screamer 73:8d28a0cb7b43 20 #define USBBUSINTERFACE_H
screamer 73:8d28a0cb7b43 21
screamer 73:8d28a0cb7b43 22 #include "mbed.h"
screamer 73:8d28a0cb7b43 23 #include "USBEndpoints.h"
screamer 76:f0fd8d911b24 24 #include "toolchain.h"
screamer 73:8d28a0cb7b43 25
screamer 73:8d28a0cb7b43 26 //#ifdef __GNUC__
screamer 73:8d28a0cb7b43 27 //#define __packed __attribute__ ((__packed__))
screamer 73:8d28a0cb7b43 28 //#endif
screamer 73:8d28a0cb7b43 29
screamer 73:8d28a0cb7b43 30 class USBHAL {
screamer 73:8d28a0cb7b43 31 public:
screamer 73:8d28a0cb7b43 32 /* Configuration */
screamer 73:8d28a0cb7b43 33 USBHAL();
screamer 73:8d28a0cb7b43 34 ~USBHAL();
screamer 73:8d28a0cb7b43 35 void connect(void);
screamer 73:8d28a0cb7b43 36 void disconnect(void);
screamer 73:8d28a0cb7b43 37 void configureDevice(void);
screamer 73:8d28a0cb7b43 38 void unconfigureDevice(void);
screamer 73:8d28a0cb7b43 39 void setAddress(uint8_t address);
screamer 73:8d28a0cb7b43 40 void remoteWakeup(void);
screamer 73:8d28a0cb7b43 41
screamer 73:8d28a0cb7b43 42 /* Endpoint 0 */
screamer 73:8d28a0cb7b43 43 void EP0setup(uint8_t *buffer);
screamer 73:8d28a0cb7b43 44 void EP0read(void);
screamer 73:8d28a0cb7b43 45 void EP0readStage(void);
screamer 73:8d28a0cb7b43 46 uint32_t EP0getReadResult(uint8_t *buffer);
screamer 73:8d28a0cb7b43 47 void EP0write(uint8_t *buffer, uint32_t size);
screamer 73:8d28a0cb7b43 48 void EP0getWriteResult(void);
screamer 73:8d28a0cb7b43 49 void EP0stall(void);
screamer 73:8d28a0cb7b43 50
screamer 73:8d28a0cb7b43 51 /* Other endpoints */
screamer 73:8d28a0cb7b43 52 EP_STATUS endpointRead(uint8_t endpoint, uint32_t maximumSize);
screamer 73:8d28a0cb7b43 53 EP_STATUS endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead);
screamer 73:8d28a0cb7b43 54 EP_STATUS endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size);
screamer 73:8d28a0cb7b43 55 EP_STATUS endpointWriteResult(uint8_t endpoint);
screamer 73:8d28a0cb7b43 56 void stallEndpoint(uint8_t endpoint);
screamer 73:8d28a0cb7b43 57 void unstallEndpoint(uint8_t endpoint);
screamer 73:8d28a0cb7b43 58 bool realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options);
screamer 73:8d28a0cb7b43 59 bool getEndpointStallState(unsigned char endpoint);
screamer 73:8d28a0cb7b43 60 uint32_t endpointReadcore(uint8_t endpoint, uint8_t *buffer);
screamer 73:8d28a0cb7b43 61
screamer 73:8d28a0cb7b43 62 protected:
screamer 73:8d28a0cb7b43 63 virtual void busReset(void){};
screamer 73:8d28a0cb7b43 64 virtual void EP0setupCallback(void){};
screamer 73:8d28a0cb7b43 65 virtual void EP0out(void){};
screamer 73:8d28a0cb7b43 66 virtual void EP0in(void){};
screamer 73:8d28a0cb7b43 67 virtual void connectStateChanged(unsigned int connected){};
screamer 73:8d28a0cb7b43 68 virtual void suspendStateChanged(unsigned int suspended){};
screamer 73:8d28a0cb7b43 69 virtual void SOF(int frameNumber){};
screamer 73:8d28a0cb7b43 70
screamer 73:8d28a0cb7b43 71 #if defined(TARGET_NUMAKER_PFM_NUC472) || defined(TARGET_NUMAKER_PFM_M453)
screamer 73:8d28a0cb7b43 72 // NUC472/M453 USB doesn't support configuration of the same EP number for IN/OUT simultaneously.
screamer 73:8d28a0cb7b43 73 virtual bool EP1_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 74 virtual bool EP2_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 75 virtual bool EP3_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 76 virtual bool EP4_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 77 virtual bool EP5_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 78 virtual bool EP6_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 79 #if ! (defined(TARGET_NUMAKER_PFM_M453))
screamer 73:8d28a0cb7b43 80 virtual bool EP7_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 81 virtual bool EP8_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 82 virtual bool EP9_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 83 virtual bool EP10_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 84 virtual bool EP11_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 85 virtual bool EP12_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 86 #endif
screamer 73:8d28a0cb7b43 87 #else
screamer 73:8d28a0cb7b43 88 virtual bool EP1_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 89 virtual bool EP1_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 90 virtual bool EP2_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 91 virtual bool EP2_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 92 virtual bool EP3_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 93 virtual bool EP3_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 94 #if !defined(TARGET_STM32F4)
screamer 73:8d28a0cb7b43 95 virtual bool EP4_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 96 virtual bool EP4_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 97 #if !(defined(TARGET_LPC11UXX) || defined(TARGET_LPC11U6X) || defined(TARGET_LPC1347) || defined(TARGET_LPC1549))
screamer 73:8d28a0cb7b43 98 virtual bool EP5_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 99 virtual bool EP5_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 100 virtual bool EP6_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 101 virtual bool EP6_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 102 virtual bool EP7_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 103 virtual bool EP7_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 104 virtual bool EP8_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 105 virtual bool EP8_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 106 virtual bool EP9_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 107 virtual bool EP9_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 108 virtual bool EP10_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 109 virtual bool EP10_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 110 virtual bool EP11_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 111 virtual bool EP11_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 112 virtual bool EP12_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 113 virtual bool EP12_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 114 virtual bool EP13_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 115 virtual bool EP13_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 116 virtual bool EP14_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 117 virtual bool EP14_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 118 virtual bool EP15_OUT_callback(){return false;};
screamer 73:8d28a0cb7b43 119 virtual bool EP15_IN_callback(){return false;};
screamer 73:8d28a0cb7b43 120 #endif
screamer 73:8d28a0cb7b43 121 #endif
screamer 73:8d28a0cb7b43 122 #endif
screamer 73:8d28a0cb7b43 123
screamer 73:8d28a0cb7b43 124 private:
screamer 73:8d28a0cb7b43 125 void usbisr(void);
screamer 73:8d28a0cb7b43 126 static void _usbisr(void);
screamer 73:8d28a0cb7b43 127 static USBHAL * instance;
screamer 73:8d28a0cb7b43 128
screamer 73:8d28a0cb7b43 129 #if defined(TARGET_LPC11UXX) || defined(TARGET_LPC11U6X) || defined(TARGET_LPC1347) || defined(TARGET_LPC1549)
screamer 73:8d28a0cb7b43 130 bool (USBHAL::*epCallback[10 - 2])(void);
screamer 73:8d28a0cb7b43 131 #elif (defined(TARGET_STM32F4) && !defined(USB_STM_HAL)) || defined(TARGET_NUMAKER_PFM_M453)
screamer 73:8d28a0cb7b43 132 bool (USBHAL::*epCallback[8 - 2])(void);
screamer 73:8d28a0cb7b43 133 #elif defined(TARGET_STM)
screamer 73:8d28a0cb7b43 134 PCD_HandleTypeDef hpcd;
screamer 73:8d28a0cb7b43 135 #elif defined(TARGET_NUMAKER_PFM_NUC472)
screamer 73:8d28a0cb7b43 136 bool (USBHAL::*epCallback[14 - 2])(void);
screamer 73:8d28a0cb7b43 137 #else
screamer 73:8d28a0cb7b43 138 bool (USBHAL::*epCallback[32 - 2])(void);
screamer 73:8d28a0cb7b43 139 #endif
screamer 73:8d28a0cb7b43 140
screamer 73:8d28a0cb7b43 141
screamer 73:8d28a0cb7b43 142 };
screamer 73:8d28a0cb7b43 143 #endif