// TITLE: Main header file for the USB Library
#pragma once
#ifdef __TMS320C28XX__
#define INT_USB INT_USBA // USB Define for C28x.
#define USB_BASE USBA_BASE // USB Define for C28x.
#else
#define INT_USB INT_USB0 // USB Define for CM.
#define USB_BASE USB0_BASE // USB Define for C28x.
#endif
// USB-Request als Byte-struct erspart Alignment-Probleme
typedef struct tUSBRequest{
//! Determines the type and direction of the request.
uint8_t bmRequestType,
//! Identifies the specific request being made.
bRequest,
//! Word-sized field that varies according to the request.
wValueL, wValueH,
//! Word-sized field that varies according to the request; typically used
//! to pass an index or offset.
wIndexL, wIndexH,
//! The number of bytes to transfer if there is a data stage to the
//! request.
wLengthL, wLengthH;
#ifdef __cplusplus
uint16_t wRequest() const {return bRequest<<8|bmRequestType;}
uint16_t wValue() const {return wValueH<<8|wValueL;}
uint16_t wIndex() const {return wIndexH<<8|wIndexL;}
uint16_t wLength() const {return wLengthH<<8|wLengthL;}
void limitLength(uint32_t&l) const {if (l>wLength()) l=wLength();}
void limitLength(volatile uint32_t&l) const {if (l>wLength()) l=wLength();}
#endif
}tUSBRequest;
//*****************************************************************************
//! Generate two-byte, three-byte, and four-byte value for USB descriptor
//*****************************************************************************
#define USB2(v) (v) & 0xff, (v) >> 8
#define USB3(v) (v) & 0xff, (v) >> 8 & 0xff, (v)>> 16 & 0xff
#define USB4(v) (v) & 0xff, (v) >> 8 & 0xff, (v)>> 16 & 0xff, (v)>>24 & 0xff
//*****************************************************************************
//! USB event handler functions used during enumeration and operation of the
//! device stack.
//*****************************************************************************
struct tCustomHandlers {
//! This callback is made whenever the USB host requests a non-standard
//! descriptor from the device.
virtual bool cbGetDescriptor(tUSBRequest*) {return false;}
//! This callback is made whenever the USB host makes a non-standard
//! request.
virtual bool cbRequestHandler(tUSBRequest*) {return false;}
//! This callback is made in response to a SetInterface request from the
//! host.
virtual void cbInterfaceChange(uint8_t InterfaceNum, uint8_t AlternateSetting) {}
//! This callback is made in response to a SetConfiguration request from
//! the host.
virtual void cbConfigChange(uint32_t ui32Info) {}
//! This callback is made when data has been received following to a call
//! to USBDCDRequestDataEP0.
virtual void cbDataReceived(uint32_t ui32Info) {}
//! This callback is made when data has been transmitted following a call
//! to USBDCDSendDataEP0.
virtual void cbDataSent(uint32_t ui32Info) {}
//! This callback is made when a USB reset is detected.
virtual void cbResetHandler() {}
//! This callback is made when the bus has been inactive long enough to
//! trigger a suspend condition.
virtual void cbSuspendHandler() {}
//! This is called when resume signaling is detected.
virtual void cbResumeHandler() {}
//! This callback is made when the device is disconnected from the USB bus.
virtual void cbDisconnectHandler() {}
//! This callback is made to inform the device of activity on all endpoints
//! other than endpoint zero.
virtual void cbEndpointHandler(uint32_t) {}
//! This generic handler is provided to allow requests based on
//! a given instance to be passed into a device. This is commonly used
//! by a top level composite device that is using multiple instances of
//! a class.
virtual void cbDeviceHandler(uint32_t Request, void *pvRequestData) {}
};
//#define USB_DESC_ANY 0xFFFFFFFF
//*****************************************************************************
//! The operating mode required by the USB library client. This type is used
//! by applications which wish to be able to switch between host and device
//! modes by calling the USBStackModeSet() API.
//*****************************************************************************
enum tUSBMode{
//! Operate in USB device mode with active monitoring of VBUS and the
//! ID pin must be pulled to a logic high value.
eUSBModeDevice,
//! Operate in USB host mode with active monitoring of VBUS and the ID pin
//! must be pulled to a logic low value.
eUSBModeHost,
//! Operate as an On-The-Go device which requires both VBUS and ID to be
//! connected directly to the USB controller from the USB connector.
eUSBModeOTG,
//! A marker indicating that no USB mode has yet been set by the
//! application.
eUSBModeNone,
//! Force host mode so that the VBUS and ID pins are not used or monitored
//! by the USB controller.
eUSBModeForceHost,
//! Forcing device mode so that the VBUS and ID pins are not used or
//! monitored by the USB controller.
eUSBModeForceDevice,
};
//! The host received an invalid PID in a transaction.
#define USBERR_HOST_IN_PID_ERROR 0x01000000
//! The host did not receive a response from a device.
#define USBERR_HOST_IN_NOT_COMP 0x00100000
//! The host received a stall on an IN endpoint.
#define USBERR_HOST_IN_STALL 0x00400000
//! The host detected a CRC or bit-stuffing error (isochronous mode).
#define USBERR_HOST_IN_DATA_ERROR 0x00080000
//! The host received NAK on an IN endpoint for longer than the specified
//! timeout period (interrupt, bulk and control modes).
#define USBERR_HOST_IN_NAK_TO 0x00080000
//! The host failed to communicate with a device via an IN endpoint.
#define USBERR_HOST_IN_ERROR 0x00040000
//! The host receive FIFO is full.
#define USBERR_HOST_IN_FIFO_FULL 0x00020000
//
//! The host received NAK on an OUT endpoint for longer than the specified
//! timeout period (bulk, interrupt and control modes).
#define USBERR_HOST_OUT_NAK_TO 0x00000080
//! The host did not receive a response from a device (isochronous mode).
#define USBERR_HOST_OUT_NOT_COMP 0x00000080
//! The host received a stall on an OUT endpoint.
#define USBERR_HOST_OUT_STALL 0x00000020
//! The host failed to communicate with a device via an OUT endpoint.
#define USBERR_HOST_OUT_ERROR 0x00000004
//! The host received NAK on endpoint 0 for longer than the configured
//! timeout.
#define USBERR_HOST_EP0_NAK_TO 0x00000080
//! The host failed to communicate with a device via an endpoint zero.
#define USBERR_HOST_EP0_ERROR 0x00000010
//! The device detected a CRC error in received data.
#define USBERR_DEV_RX_DATA_ERROR 0x00080000
//! The device was unable to receive a packet from the host since the receive
//! FIFO is full.
#define USBERR_DEV_RX_OVERRUN 0x00040000
//! The device receive FIFO is full.
#define USBERR_DEV_RX_FIFO_FULL 0x00020000
//*****************************************************************************
// Base identifiers for groups of USB events. These are used by both the
// device class drivers and host layer.
//
// USB_CLASS_EVENT_BASE is the lowest identifier that should be used for
// a class-specific event. Individual event bases are defined for each
// of the supported device class drivers. Events with IDs between
// USB_EVENT_BASE and USB_CLASS_EVENT_BASE are reserved for stack use.
//
//*****************************************************************************
#define USB_EVENT_BASE 0x0000
#define USB_CLASS_EVENT_BASE 0x8000
//*****************************************************************************
//
// Event base identifiers for the various device classes supported in host
// and device modes.
// The first 0x800 values of a range are reserved for the device specific
// messages and the second 0x800 values of a range are used for the host
// specific messages for a given class.
//
//*****************************************************************************
#define USBD_CDC_EVENT_BASE (USB_CLASS_EVENT_BASE + 0)
#define USBD_HID_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x1000)
#define USBD_HID_KEYB_EVENT_BASE (USBD_HID_EVENT_BASE + 0x100)
#define USBD_BULK_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x2000)
#define USBD_MSC_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x3000)
#define USBD_AUDIO_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x4000)
#define USBD_DFU_EVENT_BASE (USB_CLASS_EVENT_BASE + 0x5000)
#define USBH_CDC_EVENT_BASE (USBD_CDC_EVENT_BASE + 0x800)
#define USBH_HID_EVENT_BASE (USBD_HID_EVENT_BASE + 0x800)
#define USBH_BULK_EVENT_BASE (USBD_BULK_EVENT_BASE + 0x800)
#define USBH_MSC_EVENT_BASE (USBD_MSC_EVENT_BASE + 0x800)
#define USBH_AUDIO_EVENT_BASE (USBD_AUDIO_EVENT_BASE + 0x800)
//*****************************************************************************
//
// General events supported by device classes and host pipes.
//
//*****************************************************************************
//
//! The device is now attached to a USB host and ready to begin sending
//! and receiving data (used by device classes only).
//
#define USB_EVENT_CONNECTED (USB_EVENT_BASE + 0)
//
//! The device has been disconnected from the USB host (used by device classes
//! only).
//!
//! \note In device mode, the USB_EVENT_DISCONNECTED will not be reported if
//! the MCU's PB1/USB0VBUS pin is connected to a fixed +5 Volts rather than
//! directly to the VBUS pin on the USB connector.
//
#define USB_EVENT_DISCONNECTED (USB_EVENT_BASE + 1)
//
//! Data has been received and is in the buffer provided or is ready to be
//! read from the FIFO. If the \e pvMsgData value is 0 then the
//! \e ui32MsgParam value contains the amount of data in bytes ready to be read
//! from the device. If the \e pvMsgData value is not 0 then \e pvMsgData is
//! a pointer to the data that was read and \e ui32MsgParam is the number of
//! valid bytes in the array pointed to by \e pvMsgData.
//
#define USB_EVENT_RX_AVAILABLE (USB_EVENT_BASE + 2)
//
//! This event is sent by a lower layer to inquire about the amount of
//! unprocessed data buffered in the layers above. It is used in cases
//! where a low level driver needs to ensure that all preceding data has
//! been processed prior to performing some action or making some notification.
//! Clients receiving this event should return the number of bytes of data
//! that are unprocessed or 0 if no outstanding data remains.
//
#define USB_EVENT_DATA_REMAINING (USB_EVENT_BASE + 3)
//
//! This event is sent by a lower layer supporting DMA to request a buffer in
//! which the next received packet may be stored. The \e ui32MsgValue
//! parameter indicates the maximum size of packet that can be received in this
//! channel and \e pvMsgData points to storage which should be written with the
//! returned buffer pointer. The return value from the callback should be the
//! size of the buffer allocated (which may be less than the maximum size
//! passed in \e ui32MsgValue if the client knows that fewer bytes are expected
//! to be received) or 0 if no buffer is being returned.
//
#define USB_EVENT_REQUEST_BUFFER (USB_EVENT_BASE + 4)
//
//! Data has been sent and acknowledged. If this event is received via the
//! USB buffer callback, the \e ui32MsgValue parameter indicates the number of
//! bytes from the transmit buffer that have been successfully transmitted
//! and acknowledged.
//
#define USB_EVENT_TX_COMPLETE (USB_EVENT_BASE + 5)
//
//! An error has been reported on the channel or pipe. The \e ui32MsgValue
//! parameter indicates the source(s) of the error and is the logical OR
//! combination of "USBERR_" flags defined below.
//
#define USB_EVENT_ERROR (USB_EVENT_BASE + 6)
//
//! The bus has entered suspend state.
//
#define USB_EVENT_SUSPEND (USB_EVENT_BASE + 7)
//
//! The bus has left suspend state.
//
#define USB_EVENT_RESUME (USB_EVENT_BASE + 8)
//
//! A scheduler event has occurred.
//
#define USB_EVENT_SCHEDULER (USB_EVENT_BASE + 9)
//
//! A device or host has detected a stall condition.
//
#define USB_EVENT_STALL (USB_EVENT_BASE + 10)
//
//! The host detected a power fault condition.
//
#define USB_EVENT_POWER_FAULT (USB_EVENT_BASE + 11)
//
//! The controller has detected a A-Side cable and needs power applied This is
//! only generated on OTG parts if automatic power control is disabled.
//
#define USB_EVENT_POWER_ENABLE (USB_EVENT_BASE + 12)
//
//! The controller needs power removed, This is only generated on OTG parts
//! if automatic power control is disabled.
//
#define USB_EVENT_POWER_DISABLE (USB_EVENT_BASE + 13)
//
//! This define is used with a device class's pfnDeviceHandler handler function
//! to indicate that the USB library has changed the interface number. This
//! event is typically due to the class being included in a composite device.
//!
//! The \e pvInstance is a pointer to an instance of the device being accessed.
//!
//! The \e ui32Request is USB_EVENT_COMP_IFACE_CHANGE.
//!
//! The \e pvRequestData is a pointer to a two byte array where the first value
//! is the old interface number and the second is the new interface number.
//
#define USB_EVENT_COMP_IFACE_CHANGE (USB_EVENT_BASE + 14)
//
//! This define is used with a device class's pfnDeviceHandler handler function
//! to indicate that the USB library has changed the endpoint number. This
//! event is typically due to the class being included in a composite device.
//!
//! The \e pvInstance is a pointer to an instance of the device being accessed.
//!
//! The \e ui32Request is USB_EVENT_COMP_EP_CHANGE.
//!
//! The \e pvRequestData is a pointer to a two byte array where the first value
//! is the old endpoint number and the second is the new endpoint number. The
//! endpoint numbers should be exactly as USB specification defines them and
//! bit 7 set indicates an IN endpoint and bit 7 clear indicates an OUT
//! endpoint.
//
#define USB_EVENT_COMP_EP_CHANGE (USB_EVENT_BASE + 15)
//
//! This define is used with a device class's pfnDeviceHandler handler function
//! to indicate that the USB library has changed the string index number for a
//! string. This event is typically due to the class being included in a
//! composite device.
//!
//! The \e pvInstance is a pointer to an instance of the device being accessed.
//!
//! The \e ui32Request is USB_EVENT_COMP_STR_CHANGE.
//!
//! The \e pvRequestData is a pointer to a two byte array where the first value
//! is the old string index and the second is the new string index.
//
#define USB_EVENT_COMP_STR_CHANGE (USB_EVENT_BASE + 16)
//
//! This define is used with a device class's pfnDeviceHandler handler function
//! to indicate that the USB library has changed the configuration descriptor.
//! This allows the class to make final adjustments to the configuration
//! descriptor. This event is typically due to the class being included in a
//! composite device.
//!
//! The \e pvInstance is a pointer to an instance of the device being accessed.
//!
//! The \e ui32Request is USB_EVENT_COMP_CONFIG.
//!
//! The \e pvRequestData is a pointer to the beginning of the configuration
//! descriptor for the device instance.
//
#define USB_EVENT_COMP_CONFIG (USB_EVENT_BASE + 17)
//
//! An unknown device is now attached to a USB host. This value is only valid
//! for the generic event handler and not other device handlers. It is
//! useful for applications that want to know when an unknown device is
//! connected and what the class is of the unknown device.
//!
//! The \e ui32Instance is the device instance for the unknown device.
//
#define USB_EVENT_UNKNOWN_CONNECTED \
(USB_EVENT_BASE + 18)
//
//! A start of frame event has occurred. This event is disabled by default
//! and must be enabled via a call from the application to USBHCDEventEnable().
//
#define USB_EVENT_SOF (USB_EVENT_BASE + 19)
Vorgefundene Kodierung: ASCII (7 bit) | 2
|