| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /*
- * Copyright (c) 2022 OpenLuat & AirM2M
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
- #ifndef __USB_DRIVER_H__
- #define __USB_DRIVER_H__
- #include "usb_define.h"
- #include "usb_host.h"
- #include "usb_device.h"
- #include "bsp_common.h"
- enum
- {
- USB_EP_STATE_DISABLE,
- USB_EP_STATE_ENABLE,
- USB_EP_STATE_STALL,
- USB_EP_STATE_NAK,
- USB_EP_STATE_ACK,
- USB_EP_STATE_NYET,
- USB_EP0_STAGE_SETUP = 0,
- USB_EP0_STAGE_DATA_TO_DEVICE,
- USB_EP0_STAGE_DATA_TO_HOST,
- SERV_USB_RESET_END = 0,
- SERV_USB_RESUME_END,
- SERV_USB_SUSPEND,
- SERV_USB_RESUME,
- };
- typedef struct
- {
- volatile Buffer_Struct RxBuf;
- volatile Buffer_Struct TxBuf;
- CBFuncEx_t CB;
- void *pData;
- uint32_t XferMaxLen;
- uint16_t MaxPacketLen;
- uint16_t TimeoutMS;
- union
- {
- uint16_t ToHostStatus;
- struct
- {
- uint16_t Halt:1;
- uint16_t Zero:15;
- }INSTATUS_b;
- };
- union
- {
- uint16_t ToDeviceStatus;
- struct
- {
- uint16_t Halt:1;
- uint16_t Zero:15;
- }OUTSTATUS_b;
- };
- uint8_t XferType;
- uint8_t ToHostEnable;
- uint8_t ToDeviceEnable;
- uint8_t ForceZeroPacket;
- uint8_t NeedZeroPacket;
- uint8_t TxZeroPacket;
- }USB_EndpointCtrlStruct;
- typedef struct
- {
- uint8_t *Data;
- uint32_t Len;
- usb_device_request_t *pLastRequest;
- uint8_t USB_ID;
- uint8_t EpIndex;
- uint8_t IsToDevice;
- uint8_t IsDataStage;
- }USB_EndpointDataStruct;
- typedef struct
- {
- uint32_t EpBufMaxLen;
- union
- {
- uint32_t Feature;
- struct
- {
- uint32_t Suspend:1;
- uint32_t RemoteWakeup:1;
- uint32_t U1:1;
- uint32_t U2:1;
- uint32_t LTM:1;
- uint32_t FullSpeed:1;
- uint32_t HighSpeed:1;
- uint32_t SuperSpeed:1;
- }FEATURE_b;
- };
- uint8_t CtrlMode; //see usb_hc_mode
- }USB_HWCapsStruct;
- /*************usb common api****************/
- void USB_StackSetControl(uint8_t USB_ID, HANDLE pHWCtrl,USB_EndpointCtrlStruct *pEpCtrl, USB_HWCapsStruct *Caps);
- int32_t USB_StackStop(uint8_t USB_ID);
- void USB_StackPutRxData(uint8_t USB_ID, uint8_t EpIndex, const uint8_t *Data, uint32_t Len);
- void USB_StackResetEpBuffer(uint8_t USB_ID, uint8_t Index);
- void USB_StackSetEpStatus(uint8_t USB_ID, uint8_t EpIndex, uint8_t IsToDevice, uint8_t Status);
- int32_t USB_StackTxEpData(uint8_t USB_ID, uint8_t EpIndex, void *pData, uint32_t Len, uint32_t MaxLen, uint8_t ForceZeroPacket);
- void USB_StackSetRxEpDataLen(uint8_t USB_ID, uint8_t EpIndex, uint32_t Len);
- void USB_StackEpIntOnOff(uint8_t USB_ID, uint8_t EpIndex, uint8_t IsToDevice, uint8_t OnOff);
- /*************usb class api*******************/
- /*************usb device api******************/
- void USB_StackClearSetup(uint8_t ID);
- void USB_StackSetDeviceSelfPower(uint8_t USB_ID, uint8_t OnOff);
- void USB_StackSetDeviceRemoteWakeupCapable(uint8_t USB_ID, uint8_t OnOff);
- void USB_StackSetDeviceSpeed(uint8_t USB_ID, uint8_t Speed);
- void USB_StackSetDeviceConfig(uint8_t USB_ID, usb_device_descriptor_t *pDeviceDesc, USB_FullConfigStruct *pConfigInfo, uint8_t ConfigNum, uint8_t StringNum, CBFuncEx_t CB, void *pUserData);
- void USB_StackSetString(uint8_t USB_ID, uint8_t Index, const uint8_t *Data, uint16_t Len);
- void USB_StackSetCharString(uint8_t USB_ID, uint8_t Index, const char *Data, uint16_t Len);
- void USB_StackSetEpCB(uint8_t USB_ID, uint8_t Index, CBFuncEx_t CB, void *pUserData);
- int32_t USB_StackStartDevice(uint8_t USB_ID);
- void USB_StackDeviceBusChange(uint8_t USB_ID, uint8_t Type);
- void USB_StackDeviceEp0TxDone(uint8_t USB_ID);
- void USB_StackSetEp0Stage(uint8_t USB_ID, uint8_t Stage);
- void USB_StackAnalyzeDeviceEpRx(uint8_t USB_ID, uint8_t EpIndex);
- void USB_StackDeviceAfterDisconnect(uint8_t USB_ID);
- void USB_StackStopDeviceTx(uint8_t USB_ID, uint8_t EpIndex, uint8_t IsNeedNotify);
- //void USB_StackAnalyzeDeviceEpTx(uint8_t USB_ID, uint8_t EpIndex);
- /*************usb host api******************/
- void USB_StackHostBusChange(uint8_t USB_ID, uint8_t Type);
- #endif
|