Simple USBHost library for STM32F746NG Discovery board. Only either the Fastspeed or the Highspeed port can be used( not both together)
Dependents: DISCO-F746NG_USB_Host
Fork of KL46Z-USBHost by
Diff: USBHost/TARGET_STM32F7/USBHALHost_F746NG.h
- Revision:
- 24:5396b6a93262
- Child:
- 25:7d6d9fc471bf
diff -r 4ab8bc835303 -r 5396b6a93262 USBHost/TARGET_STM32F7/USBHALHost_F746NG.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/USBHost/TARGET_STM32F7/USBHALHost_F746NG.h Mon Jun 13 17:21:07 2016 +0000 @@ -0,0 +1,70 @@ + +#pragma once +#include "mbed.h" +#include "USBHostTypes.h" +#include "USBEndpoint.h" +#define USB_FastSpeed 0 +#define USB_HighSpeed 1 + +class HC { + static const uint8_t DIR_IN = 1; + static const uint8_t DIR_OUT = 0; + +public: + HC(HCD_HandleTypeDef* hhcd_USB); + HC(HCD_HandleTypeDef* hhcd_USB,int ch); + ~HC(); + HAL_StatusTypeDef Init(int IF_N,uint8_t epnum, uint8_t dev_address, uint8_t speed, uint8_t ep_type, uint16_t mps); + HAL_StatusTypeDef SubmitRequest(int IF_N,uint8_t* pbuff, uint16_t length, bool setup = false); + HCD_URBStateTypeDef GetURBState(); + HCD_HCStateTypeDef GetState(); + uint32_t GetXferCount(); + void SetToggle(uint8_t toggle); + + static uint8_t slot; + HCD_HandleTypeDef* hc_USB; +private: + int _ch; + uint8_t _ep_addr; + uint8_t _ep_type; +}; + +class USBHALHost { +public: + uint8_t LastStatus; + uint8_t prev_LastStatus; + int IF_N; + HCD_HandleTypeDef hhcd_USB; + +protected: + USBHALHost(int InterfaceNumber); + void init(); + virtual bool addDevice(USBDeviceConnected* parent, int port, bool lowSpeed) = 0; + int token_setup(USBEndpoint* ep, SETUP_PACKET* setup, uint16_t wLength = 0); + int token_iso_in(USBEndpoint* ep, uint8_t* data, int size); + int multi_token_in(USBEndpoint* ep, uint8_t* data = NULL, size_t total = 0, bool block = true); + int multi_token_out(USBEndpoint* ep, const uint8_t* data = NULL, size_t total = 0); + void multi_token_inNB(USBEndpoint* ep, uint8_t* data, int size); + USB_TYPE multi_token_inNB_result(USBEndpoint* ep); + void setToggle(USBEndpoint* ep, uint8_t toggle); + int epint_setup(USBEndpoint* ep); + + +private: + + int token_in(USBEndpoint* ep, uint8_t* data = NULL, int size = 0, int retryLimit = 10); + int token_out(USBEndpoint* ep, const uint8_t* data = NULL, int size = 0, int retryLimit = 10); + int token_ctl_in(USBEndpoint* ep, uint8_t* data, int size, int retryLimit); + int token_int_in(USBEndpoint* ep, uint8_t* data, int size); + int token_blk_in(USBEndpoint* ep, uint8_t* data, int size, int retryLimit); + int token_ctl_out(USBEndpoint* ep, const uint8_t* data, int size, int retryLimit); + int token_int_out(USBEndpoint* ep, const uint8_t* data, int size); + int token_blk_out(USBEndpoint* ep, const uint8_t* data, int size, int retryLimit); + bool wait_attach(); + static USBHALHost * instHost; + HCD_HandleTypeDef* hhcd; + void usbisr(void); + static void _usbisr(void); +}; + +