From 990090a4cc9070837d31e66b58d40f0c3d038741 Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Sun, 16 Mar 2014 14:41:11 +0200 Subject: Add usblib and utils --- usblib/host/usbhost.h | 295 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 295 insertions(+) create mode 100644 usblib/host/usbhost.h (limited to 'usblib/host/usbhost.h') diff --git a/usblib/host/usbhost.h b/usblib/host/usbhost.h new file mode 100644 index 0000000..1d4c455 --- /dev/null +++ b/usblib/host/usbhost.h @@ -0,0 +1,295 @@ +//***************************************************************************** +// +// usbhost.h - Host specific definitions for the USB host library. +// +// Copyright (c) 2008-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the Tiva USB Library. +// +//***************************************************************************** + +#ifndef __USBHOST_H__ +#define __USBHOST_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +//! \addtogroup usblib_hcd +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// This is the type used to identify what the pipe is currently in use for. +// +//***************************************************************************** +#define USBHCD_PIPE_UNUSED 0x00100000 +#define USBHCD_PIPE_CONTROL 0x00130000 +#define USBHCD_PIPE_BULK_OUT 0x00210000 +#define USBHCD_PIPE_BULK_IN 0x00220000 +#define USBHCD_PIPE_INTR_OUT 0x00410000 +#define USBHCD_PIPE_INTR_IN 0x00420000 +#define USBHCD_PIPE_ISOC_OUT 0x00810000 +#define USBHCD_PIPE_ISOC_IN 0x00820000 +#define USBHCD_PIPE_ISOC_OUT_DMA 0x01810000 +#define USBHCD_PIPE_ISOC_IN_DMA 0x01820000 +#define USBHCD_PIPE_BULK_OUT_DMA 0x01210000 +#define USBHCD_PIPE_BULK_IN_DMA 0x01220000 + +//***************************************************************************** +// +// These are the defines that are used with USBHCDPowerConfigInit(). +// +//***************************************************************************** +#define USBHCD_FAULT_LOW 0x00000010 +#define USBHCD_FAULT_HIGH 0x00000030 +#define USBHCD_FAULT_VBUS_NONE 0x00000000 +#define USBHCD_FAULT_VBUS_TRI 0x00000140 +#define USBHCD_FAULT_VBUS_DIS 0x00000400 +#define USBHCD_VBUS_MANUAL 0x00000004 +#define USBHCD_VBUS_AUTO_LOW 0x00000002 +#define USBHCD_VBUS_AUTO_HIGH 0x00000003 +#define USBHCD_VBUS_FILTER 0x00010000 + +//***************************************************************************** +// +// These are the defines that are used with USBHCDLPMStatus(). +// +//***************************************************************************** +#define USBHCD_LPM_AVAIL 0x00000000 +#define USBHCD_LPM_ERROR 0x00000001 +#define USBHCD_LPM_PENDING 0x00000002 + +//***************************************************************************** +// +//! This macro is used to declare an instance of an Event driver for the USB +//! library. +//! +//! \param VarName is the name of the variable. +//! \param pfnOpen is the callback for the Open call to this driver. This +//! value is currently reserved and should be set to 0. +//! \param pfnClose is the callback for the Close call to this driver. This +//! value is currently reserved and should be set to 0. +//! \param pfnEvent is the callback that will be called for various USB events. +//! +//! The first parameter is the actual name of the variable that will +//! be declared by this macro. The second and third parameter are reserved +//! for future functionality and are unused and should be set to zero. The +//! last parameter is the actual callback function and is specified as +//! a function pointer of the type: +//! +//! \verbatim +//! void (*pfnEvent)(void *pvData); +//! \endverbatim +//! +//! When the \e pfnEvent function is called the void pointer that is passed in +//! as a parameter should be cast to a pointer to a structure of type +//! tEventInfo. This will contain the event that caused the pfnEvent function +//! to be called. +// +//***************************************************************************** +#define DECLARE_EVENT_DRIVER(VarName, pfnOpen, pfnClose, pfnEvent) \ +void IntFn(void *pvData); \ +const tUSBHostClassDriver VarName = \ +{ \ + USB_CLASS_EVENTS, \ + 0, \ + 0, \ + pfnEvent \ +} + +//***************************************************************************** +// +// This is the type definition a callback for events on USB Pipes allocated +// by USBHCDPipeAlloc(). +// +// \param ui32Pipe is well the pipe +// \param ui32Event is well the event +// +// This prototype is used by any Pipe callbacks that are used in the host +// class drivers. These functions typically handle data events like +// USB_EVENT_RX_AVAILABLE or USB_EVENT_TX_COMPLETE but can be sent other events +// depending on the USB host class in use. See the documentation for the +// individual classes for the valid events for that class. +// +// \return None. +// +//***************************************************************************** +typedef void (* tHCDPipeCallback)(uint32_t ui32Pipe, uint32_t ui32Event); + +//***************************************************************************** +// +// Predeclare the private tUSBHostDevice structure. +// +//***************************************************************************** +typedef struct tUSBHostDevice tUSBHostDevice; + +//***************************************************************************** +// +//! This structure defines a USB host class driver interface, it is parsed to +//! find a USB class driver once a USB device is enumerated. +// +//***************************************************************************** +typedef struct +{ + // + //! The interface class that this device class driver supports. + // + uint32_t ui32InterfaceClass; + + // + //! The function is called when this class of device has been detected. + // + void *(*pfnOpen)(tUSBHostDevice *psDevice); + + // + //! The function is called when the device, originally opened with a call + //! to the pfnOpen function, is disconnected. + // + void (*pfnClose)(void *pvInstance); + + // + //! This is the optional interrupt handler that will be called when an + //! endpoint associated with this device instance generates an interrupt. + // + void (*pfnIntHandler)(void *pvInstance); +} +tUSBHostClassDriver; + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** + +//***************************************************************************** +// +// If the g_USBEventDriver is included in the host controller driver list then +// this function must be provided by the application. +// +//***************************************************************************** +extern void USBHCDEvents(void *pvData); + +//***************************************************************************** +// +// Prototypes for the USB Host controller APIs. +// +//***************************************************************************** +extern void USBHCDMain(void); +extern int32_t USBHCDEventEnable(uint32_t ui32Index, void *pvEventDriver, + uint32_t ui32Event); +extern int32_t USBHCDEventDisable(uint32_t ui32Index, void *pvEventDriver, + uint32_t ui32Event); +extern void USBHCDInit(uint32_t ui32Index, void *pvData, + uint32_t ui32Size); +extern void USBHCDPowerConfigInit(uint32_t ui32Index, + uint32_t ui32Flags); +extern uint32_t USBHCDPowerConfigGet(uint32_t ui32Index); +extern uint32_t USBHCDPowerConfigSet(uint32_t ui32Index, + uint32_t ui32Config); +extern uint32_t USBHCDPowerAutomatic(uint32_t ui32Index); +extern void USBHCDRegisterDrivers(uint32_t ui32Index, + const tUSBHostClassDriver * const *ppsHClassDrvrs, + uint32_t ui32NumDrivers); +extern void USBHCDTerm(uint32_t ui32Index); +extern void USBHCDSetConfig(uint32_t ui32Index, uint32_t ui32Device, + uint32_t ui32Configuration); +extern void USBHCDSetInterface(uint32_t ui32Index, uint32_t ui32Device, + uint32_t ui32Interface, + uint32_t ui32AltSetting); +extern void USBHCDSuspend(uint32_t ui32Index); +extern void USBHCDResume(uint32_t ui32Index); +extern void USBHCDReset(uint32_t ui32Index); +extern void USBHCDPipeFree(uint32_t ui32Pipe); +extern uint32_t USBHCDPipeAlloc(uint32_t ui32Index, + uint32_t ui32EndpointType, + tUSBHostDevice *psDevice, + tHCDPipeCallback pfnCallback); +extern uint32_t USBHCDPipeAllocSize(uint32_t ui32Index, + uint32_t ui32EndpointType, + tUSBHostDevice *psDevice, + uint32_t ui32FIFOSize, + tHCDPipeCallback pfnCallback); +extern uint32_t USBHCDPipeConfig(uint32_t ui32Pipe, uint32_t ui32MaxPayload, + uint32_t ui32Interval, + uint32_t ui32TargetEndpoint); +extern uint32_t USBHCDPipeStatus(uint32_t ui32Pipe); +extern uint32_t USBHCDPipeWrite(uint32_t ui32Pipe, uint8_t *pui8Data, + uint32_t ui32Size); +extern uint32_t USBHCDPipeRead(uint32_t ui32Pipe, uint8_t *pui8Data, + uint32_t ui32Size); +extern uint32_t USBHCDPipeSchedule(uint32_t ui32Pipe, uint8_t *pui8Data, + uint32_t ui32Size); +extern uint32_t USBHCDPipeTransferSizeGet(uint32_t ui32Pipe); +extern void USBHCDPipeDataAck(uint32_t ui32Pipe); +extern uint32_t USBHCDPipeReadNonBlocking(uint32_t ui32Pipe, uint8_t *pui8Data, + uint32_t ui32Size); +extern uint32_t USBHCDStringDescriptorGet(tUSBHostDevice *psDevice, + uint8_t *pui8Buffer, + uint32_t ui32Size, + uint32_t ui32LangID, + uint32_t ui32StringIndex); +extern uint32_t USBHCDControlTransfer(uint32_t ui32Index, + tUSBRequest *psSetupPacket, + tUSBHostDevice *psDevice, + uint8_t *pui8Data, uint32_t ui32Size, + uint32_t ui32MaxPacketSize); +extern void USB0HostIntHandler(void); + +extern uint8_t USBHCDDevHubPort(uint32_t ui32Instance); +extern uint8_t USBHCDDevAddress(uint32_t ui32Instance); +extern uint8_t USBHCDDevClass(uint32_t ui32Instance, uint32_t ui32Interface); +extern uint8_t USBHCDDevSubClass(uint32_t ui32Instance, + uint32_t ui32Interface); +extern uint8_t USBHCDDevProtocol(uint32_t ui32Instance, + uint32_t ui32Interface); +extern bool USBHCDFeatureSet(uint32_t ui32Index, uint32_t ui32Feature, + void *pvFeature); +extern uint32_t USBHCDLPMSleep(tUSBHostDevice *psDevice); +extern void USBHCDLPMResume(uint32_t ui32Index); + +//***************************************************************************** +// +// The host class drivers supported by the USB library. +// +//***************************************************************************** +extern const tUSBHostClassDriver g_sUSBHostMSCClassDriver; +extern const tUSBHostClassDriver g_sUSBHIDClassDriver; +extern const tUSBHostClassDriver g_sUSBHostAudioClassDriver; + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +#endif // __USBHOST_H__ -- cgit v1.3.1