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
USBHALHost.h@2:0cdac6bcc534, 2014-01-23 (annotated)
- Committer:
- va009039
- Date:
- Thu Jan 23 08:32:54 2014 +0000
- Revision:
- 2:0cdac6bcc534
add retry in token transfer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 2:0cdac6bcc534 | 1 | // Simple USBHost for FRDM-KL46Z |
va009039 | 2:0cdac6bcc534 | 2 | #pragma once |
va009039 | 2:0cdac6bcc534 | 3 | #include "mbed.h" |
va009039 | 2:0cdac6bcc534 | 4 | |
va009039 | 2:0cdac6bcc534 | 5 | struct SETUP_PACKET { |
va009039 | 2:0cdac6bcc534 | 6 | uint8_t bmRequestType; |
va009039 | 2:0cdac6bcc534 | 7 | uint8_t bRequest; |
va009039 | 2:0cdac6bcc534 | 8 | uint16_t wValue; |
va009039 | 2:0cdac6bcc534 | 9 | uint16_t wIndex; |
va009039 | 2:0cdac6bcc534 | 10 | uint16_t wLength; |
va009039 | 2:0cdac6bcc534 | 11 | }; |
va009039 | 2:0cdac6bcc534 | 12 | |
va009039 | 2:0cdac6bcc534 | 13 | #define SET_ADDRESS 5 |
va009039 | 2:0cdac6bcc534 | 14 | #define GET_DESCRIPTOR 6 |
va009039 | 2:0cdac6bcc534 | 15 | #define GET_CONFIGURATION 8 |
va009039 | 2:0cdac6bcc534 | 16 | #define SET_CONFIGURATION 9 |
va009039 | 2:0cdac6bcc534 | 17 | |
va009039 | 2:0cdac6bcc534 | 18 | // TOK_PID[5:2] |
va009039 | 2:0cdac6bcc534 | 19 | #define DATA0 0x03 |
va009039 | 2:0cdac6bcc534 | 20 | #define DATA1 0x0b |
va009039 | 2:0cdac6bcc534 | 21 | #define ACK 0x02 |
va009039 | 2:0cdac6bcc534 | 22 | #define STALL 0x0e |
va009039 | 2:0cdac6bcc534 | 23 | #define NAK 0x0a |
va009039 | 2:0cdac6bcc534 | 24 | #define Bus_Timeout 0x00 |
va009039 | 2:0cdac6bcc534 | 25 | #define Data_Error 0x0f |
va009039 | 2:0cdac6bcc534 | 26 | |
va009039 | 2:0cdac6bcc534 | 27 | enum ODD_EVEN { |
va009039 | 2:0cdac6bcc534 | 28 | ODD = 0, |
va009039 | 2:0cdac6bcc534 | 29 | EVEN = 1, |
va009039 | 2:0cdac6bcc534 | 30 | }; |
va009039 | 2:0cdac6bcc534 | 31 | |
va009039 | 2:0cdac6bcc534 | 32 | class USBHALHost { |
va009039 | 2:0cdac6bcc534 | 33 | public: |
va009039 | 2:0cdac6bcc534 | 34 | uint8_t LastStatus; |
va009039 | 2:0cdac6bcc534 | 35 | uint8_t prev_LastStatus; |
va009039 | 2:0cdac6bcc534 | 36 | |
va009039 | 2:0cdac6bcc534 | 37 | protected: |
va009039 | 2:0cdac6bcc534 | 38 | USBHALHost(); |
va009039 | 2:0cdac6bcc534 | 39 | void init(); |
va009039 | 2:0cdac6bcc534 | 40 | virtual bool enumeration() = 0; |
va009039 | 2:0cdac6bcc534 | 41 | bool lowSpeed; |
va009039 | 2:0cdac6bcc534 | 42 | |
va009039 | 2:0cdac6bcc534 | 43 | uint8_t ep_int_in; |
va009039 | 2:0cdac6bcc534 | 44 | uint8_t ep_bulk_in; |
va009039 | 2:0cdac6bcc534 | 45 | uint8_t ep_bulk_out; |
va009039 | 2:0cdac6bcc534 | 46 | int MaxPacketSize0; |
va009039 | 2:0cdac6bcc534 | 47 | void setAddr(int addr); |
va009039 | 2:0cdac6bcc534 | 48 | void setEndpoint(bool use_retry = false); |
va009039 | 2:0cdac6bcc534 | 49 | int token_setup(SETUP_PACKET* setup, uint16_t wLength = 0); |
va009039 | 2:0cdac6bcc534 | 50 | int token_in(uint8_t ep, uint8_t* data = NULL, int size = 0, int retryLimit = 10); |
va009039 | 2:0cdac6bcc534 | 51 | int token_out(uint8_t ep, const uint8_t* data = NULL, int size = 0); |
va009039 | 2:0cdac6bcc534 | 52 | void token_ready(); |
va009039 | 2:0cdac6bcc534 | 53 | uint8_t tx_data01[16]; |
va009039 | 2:0cdac6bcc534 | 54 | uint8_t rx_data01[16]; |
va009039 | 2:0cdac6bcc534 | 55 | |
va009039 | 2:0cdac6bcc534 | 56 | private: |
va009039 | 2:0cdac6bcc534 | 57 | static void _usbisr(void); |
va009039 | 2:0cdac6bcc534 | 58 | void UsbIrqhandler(); |
va009039 | 2:0cdac6bcc534 | 59 | |
va009039 | 2:0cdac6bcc534 | 60 | __IO bool attach_done; |
va009039 | 2:0cdac6bcc534 | 61 | __IO bool token_done; |
va009039 | 2:0cdac6bcc534 | 62 | void wait_attach(); |
va009039 | 2:0cdac6bcc534 | 63 | ODD_EVEN tx_ptr; |
va009039 | 2:0cdac6bcc534 | 64 | ODD_EVEN rx_ptr; |
va009039 | 2:0cdac6bcc534 | 65 | static USBHALHost * instHost; |
va009039 | 2:0cdac6bcc534 | 66 | }; |