USB Host Driver with Socket Modem support. Works with revision 323 of mbed-src but broken with any later version.
Dependencies: FATFileSystem
Fork of F401RE-USBHost by
USBHost.h@1:c072d9e580b0, 2014-01-21 (annotated)
- Committer:
- va009039
- Date:
- Tue Jan 21 08:59:28 2014 +0000
- Revision:
- 1:c072d9e580b0
- Parent:
- 0:5160ee0c522d
- Child:
- 2:0cdac6bcc534
add USBHostMSD
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 0:5160ee0c522d | 1 | // Simple USBHost for FRDM-KL46Z |
va009039 | 0:5160ee0c522d | 2 | #include "mbed.h" |
va009039 | 0:5160ee0c522d | 3 | #pragma once |
va009039 | 0:5160ee0c522d | 4 | |
va009039 | 0:5160ee0c522d | 5 | struct SETUP_PACKET { |
va009039 | 0:5160ee0c522d | 6 | uint8_t bmRequestType; |
va009039 | 0:5160ee0c522d | 7 | uint8_t bRequest; |
va009039 | 0:5160ee0c522d | 8 | uint16_t wValue; |
va009039 | 0:5160ee0c522d | 9 | uint16_t wIndex; |
va009039 | 0:5160ee0c522d | 10 | uint16_t wLength; |
va009039 | 0:5160ee0c522d | 11 | }; |
va009039 | 0:5160ee0c522d | 12 | |
va009039 | 0:5160ee0c522d | 13 | #define SET_ADDRESS 5 |
va009039 | 0:5160ee0c522d | 14 | #define GET_DESCRIPTOR 6 |
va009039 | 0:5160ee0c522d | 15 | #define GET_CONFIGURATION 8 |
va009039 | 0:5160ee0c522d | 16 | #define SET_CONFIGURATION 9 |
va009039 | 0:5160ee0c522d | 17 | |
va009039 | 1:c072d9e580b0 | 18 | // TOK_PID[5:2] |
va009039 | 1:c072d9e580b0 | 19 | #define DATA0 0x03 |
va009039 | 1:c072d9e580b0 | 20 | #define DATA1 0x0b |
va009039 | 1:c072d9e580b0 | 21 | #define ACK 0x02 |
va009039 | 1:c072d9e580b0 | 22 | #define STALL 0x0e |
va009039 | 1:c072d9e580b0 | 23 | #define NAK 0x0a |
va009039 | 1:c072d9e580b0 | 24 | #define Bus_Timeout 0x00 |
va009039 | 1:c072d9e580b0 | 25 | #define Data_Error 0x0f |
va009039 | 1:c072d9e580b0 | 26 | |
va009039 | 0:5160ee0c522d | 27 | enum ODD_EVEN { |
va009039 | 0:5160ee0c522d | 28 | ODD = 0, |
va009039 | 0:5160ee0c522d | 29 | EVEN = 1, |
va009039 | 0:5160ee0c522d | 30 | }; |
va009039 | 0:5160ee0c522d | 31 | |
va009039 | 0:5160ee0c522d | 32 | class USBHost { |
va009039 | 0:5160ee0c522d | 33 | public: |
va009039 | 0:5160ee0c522d | 34 | static USBHost* getHostInst(); |
va009039 | 0:5160ee0c522d | 35 | int InterruptRead(uint8_t* data, int size); |
va009039 | 0:5160ee0c522d | 36 | int ControlRead(SETUP_PACKET* setup, uint8_t* data, int size); |
va009039 | 0:5160ee0c522d | 37 | int ControlWrite(SETUP_PACKET* setup, uint8_t* data = NULL, int size = 0); |
va009039 | 0:5160ee0c522d | 38 | int BulkRead(uint8_t* data, int size); |
va009039 | 0:5160ee0c522d | 39 | int BulkWrite(const uint8_t* data, int size); |
va009039 | 1:c072d9e580b0 | 40 | uint8_t LastStatus; |
va009039 | 0:5160ee0c522d | 41 | |
va009039 | 0:5160ee0c522d | 42 | protected: |
va009039 | 0:5160ee0c522d | 43 | USBHost(); |
va009039 | 0:5160ee0c522d | 44 | void init(); |
va009039 | 0:5160ee0c522d | 45 | void wait_attach(); |
va009039 | 1:c072d9e580b0 | 46 | bool enumeration(); |
va009039 | 0:5160ee0c522d | 47 | uint8_t ep_int_in; |
va009039 | 0:5160ee0c522d | 48 | uint8_t ep_bulk_in; |
va009039 | 0:5160ee0c522d | 49 | uint8_t ep_bulk_out; |
va009039 | 0:5160ee0c522d | 50 | int MaxPacketSize0; |
va009039 | 1:c072d9e580b0 | 51 | bool lowSpeed; |
va009039 | 1:c072d9e580b0 | 52 | int dev_addr; |
va009039 | 0:5160ee0c522d | 53 | |
va009039 | 0:5160ee0c522d | 54 | private: |
va009039 | 0:5160ee0c522d | 55 | static void _usbisr(void); |
va009039 | 0:5160ee0c522d | 56 | int token_setup(SETUP_PACKET* setup, uint16_t wLength = 0); |
va009039 | 0:5160ee0c522d | 57 | int token_in(uint8_t ep, uint8_t* data = NULL, int size = 0); |
va009039 | 0:5160ee0c522d | 58 | int token_out(uint8_t ep, const uint8_t* data = NULL, int size = 0); |
va009039 | 1:c072d9e580b0 | 59 | void token_ready(); |
va009039 | 0:5160ee0c522d | 60 | void UsbIrqhandler(); |
va009039 | 0:5160ee0c522d | 61 | __IO bool attach_done; |
va009039 | 0:5160ee0c522d | 62 | __IO bool token_done; |
va009039 | 0:5160ee0c522d | 63 | ODD_EVEN tx_ptr; |
va009039 | 0:5160ee0c522d | 64 | ODD_EVEN rx_ptr; |
va009039 | 1:c072d9e580b0 | 65 | uint8_t tx_data01[16]; |
va009039 | 1:c072d9e580b0 | 66 | uint8_t rx_data01[16]; |
va009039 | 0:5160ee0c522d | 67 | static USBHost* inst; |
va009039 | 0:5160ee0c522d | 68 | }; |
va009039 | 0:5160ee0c522d | 69 |