USB endpoint base class. More...
Public Member Functions | |
virtual void | init () |
virtual void | setup (SetupData *setupData) |
virtual void | checkDescriptor (EndpointDescriptor *deviceDesriptor) |
virtual void | rxComplete (int length) |
virtual void | txComplete () |
void | startTx (int length) |
void | stall () |
Public Attributes | |
unsigned char * | rxBufferPtr |
unsigned int | rxBufferSize |
unsigned int | rxPacketSize |
unsigned char * | txBufferPtr |
unsigned int | txBufferSize |
unsigned int | txPacketSize |
EndpointTransferType | transferType = INTERRUPT |
unsigned int | index |
UsbInterface * | interface |
UsbDevice * | device |
USB endpoint base class.
Endpoint has RX and TX buffer. The library (or the chip) handles multipacket transfers.
Buffers may be larger (but must be multiple) of related packet size.
A subclass should set buffers in overloaded init() method. For OUT endpoints, rxBufferPtr, rxBufferSize should be set. For IN endpoints, txBufferPtr, txBufferSize should be set. For bidirectional endpoints, both RX and TX buffers should be set.
Packet sizes may be set by rxPacketSize and txPacketSize properties, and may be 8, 16, 32 or 64 bytes for control, interrupt and bulk transfers, or 8, 16, 32, 64, 128, 256, 512 or 1023 for isochronous transfers.
If not set, packet sizes are derived from buffer sizes: for buffers smaller than 64 bytes, packet size equals to buffer size. For bigger buffers, packet size is 64 bytes.
Typical subclass of UsbEndpoint class looks like:
|
inlinevirtual |
Called when generating endpoint descriptor.
May be overloaded to modify the default descriptor.
deviceDesriptor |
|
inlinevirtual |
Endpoint initialization.
Called internally from the library.
UsbEndpoint::init() sets packet sizes based on buffer sizes, so the subclass should call super method after setting of rxPacketSize and txPacketSize properties.
Reimplemented in usbd::UsbControlEndpoint.
|
inlinevirtual |
Called when data received.
May be overloaded to process received data.
length |
|
inlinevirtual |
Handler of endpoint control request.
May be overloaded to implement vendor request.
setupData |
Reimplemented in usbd::UsbControlEndpoint.
void usbd::UsbEndpoint::stall | ( | ) |
Sends stall handshake.
void usbd::UsbEndpoint::startTx | ( | int | length | ) |
Starts transmission of the data.
length |
|
inlinevirtual |
Called when data transmitted.
May be overloaded to recognize completed data transmission.
Reimplemented in usbd::UsbControlEndpoint.
UsbDevice* usbd::UsbEndpoint::device |
Owner device. This property is set internally by the library.
unsigned int usbd::UsbEndpoint::index |
Index of the endpoint in scope of the device. This property is set internally by the library.
UsbInterface* usbd::UsbEndpoint::interface |
Owner interface. This property is set internally by the library.
unsigned char* usbd::UsbEndpoint::rxBufferPtr |
Pointer do RX data buffer. Should be set from overloaded init() method.
unsigned int usbd::UsbEndpoint::rxBufferSize |
Size of RX data buffer. Must be multiple of rxPacketSize. Should be set from overloaded init() method.
unsigned int usbd::UsbEndpoint::rxPacketSize |
Size of RX packet. May be set from overloaded init() method.
EndpointTransferType usbd::UsbEndpoint::transferType = INTERRUPT |
Transfer type of the endpoint. May be set from overloaded init() method. Defaults to INTERRUPT.
unsigned char* usbd::UsbEndpoint::txBufferPtr |
Pointer do TX data buffer. Should be set from overloaded init() method.
unsigned int usbd::UsbEndpoint::txBufferSize |
Size of TX data buffer. Must be multiple of txPacketSize. Should be set from overloaded init() method.
unsigned int usbd::UsbEndpoint::txPacketSize |
Size of TX data buffer. Must be multiple of txPacketSize. May be set from overloaded init() method.