Core USB Device driver. More...
#include <USBDevice.h>
Data Structures | |
struct | setup_packet_t |
Public Member Functions | |
USBDevice (USBPhy *phy, uint16_t vendor_id, uint16_t product_id, uint16_t product_release) | |
Instantiate a new USBDevice with the given parameters. More... | |
virtual | ~USBDevice () |
Cleanup this USBDevice. More... | |
void | init () |
Initialize this instance. More... | |
void | deinit () |
Power down this instance. More... | |
bool | configured () |
Check if the device is configured. More... | |
void | connect () |
Connect a device. More... | |
void | disconnect () |
Disconnect a device. More... | |
void | sof_enable () |
Enable the start of frame interrupt. More... | |
void | sof_disable () |
Disable the start of frame interrupt. More... | |
bool | endpoint_add (usb_ep_t endpoint, uint32_t max_packet, usb_ep_type_t type, ep_cb_t callback=NULL) |
Add an endpoint. More... | |
template<typename T > | |
bool | endpoint_add (usb_ep_t endpoint, uint32_t max_packet, usb_ep_type_t type, void(T::*callback)()) |
Add an endpoint. More... | |
void | endpoint_remove (usb_ep_t endpoint) |
Remove an endpoint. More... | |
void | endpoint_remove_all () |
Remove all non-zero endpoints. More... | |
void | endpoint_stall (usb_ep_t endpoint) |
Stall an endpoint. More... | |
void | endpoint_unstall (usb_ep_t endpoint) |
Unstall an endpoint. More... | |
uint32_t | endpoint_max_packet_size (usb_ep_t endpoint) |
Get the current maximum size for this endpoint. More... | |
void | endpoint_abort (usb_ep_t endpoint) |
Abort the current transfer on this endpoint. More... | |
bool | read_start (usb_ep_t endpoint, uint8_t *buffer, uint32_t size) |
start a read on the given endpoint More... | |
uint32_t | read_finish (usb_ep_t endpoint) |
Get the status of a read. More... | |
bool | write_start (usb_ep_t endpoint, uint8_t *buffer, uint32_t size) |
Write a data to the given endpoint. More... | |
uint32_t | write_finish (usb_ep_t endpoint) |
Get the status of a write. More... | |
Protected Member Functions | |
virtual void | callback_power (bool powered) |
Called by USBDevice layer on power state change. More... | |
virtual void | callback_sof (int frame_number) |
Called by USBDevice layer on each new USB frame. More... | |
virtual void | callback_reset () |
Called by USBDevice layer on bus reset. More... | |
virtual void | callback_state_change (DeviceState new_state)=0 |
Called when USB changes state. More... | |
virtual void | callback_request (const setup_packet_t *setup)=0 |
Called by USBDevice on Endpoint0 request. More... | |
void | complete_request (RequestResult result, uint8_t *data=NULL, uint32_t size=0) |
Called to complete the setup stage of a callback request. More... | |
virtual void | callback_request_xfer_done (const setup_packet_t *setup, bool aborted)=0 |
Called by USBDevice on data stage completion. More... | |
void | complete_request_xfer_done (bool success) |
Called to complete the data stage of a callback request. More... | |
void | complete_set_configuration (bool success) |
Called to complete a set configuration command. More... | |
void | complete_set_interface (bool success) |
Called to complete a set interface command. More... | |
uint8_t * | find_descriptor (uint8_t descriptor_type, uint8_t index=0) |
Find a descriptor type inside the configuration descriptor. More... | |
const usb_ep_table_t * | endpoint_table () |
Get the endpoint table of this device. More... | |
virtual void | start_process () |
Callback called to indicate the USB processing needs to be done. More... | |
virtual void | lock () |
Acquire exclusive access to this instance USBDevice. More... | |
virtual void | unlock () |
Release exclusive access to this instance USBDevice. More... | |
virtual void | assert_locked () |
Assert that the current thread of execution holds the lock. More... | |
Core USB Device driver.
USB driver which wraps and provides synchronization for a USBPhy object.
Definition at line 44 of file USBDevice.h.
|
virtual |
|
protectedvirtual |
Assert that the current thread of execution holds the lock.
|
protectedvirtual |
Called by USBDevice layer on power state change.
powered | true if device is powered, false otherwise |
Warning: Called in ISR context
Definition at line 341 of file USBDevice.h.
|
protectedpure virtual |
Called by USBDevice on Endpoint0 request.
This is used to handle extensions to standard requests and class specific requests. The function complete_request must be always be called in response to this callback.
Warning: Called in ISR context
Implemented in USBAudio, USBCDC_ECM, USBHID, USBCDC, USBMIDI, USBTester, and USBEndpointTester.
|
protectedpure virtual |
Called by USBDevice on data stage completion.
The function complete_request_xfer_done must be always be called in response to this callback.
setup | Setup packet of the current request |
aborted | false if the operation was aborted, true otherwise |
Warning: Called in ISR context
Implemented in USBAudio, USBHID, USBCDC, USBCDC_ECM, USBMIDI, USBTester, and USBEndpointTester.
|
protectedvirtual |
Called by USBDevice layer on bus reset.
complete_reset must be called after the device is fully reset.
Warning: Called in ISR context
Reimplemented in USBCDC_ECM, USBCDC, and USBTester.
Definition at line 369 of file USBDevice.h.
|
protectedvirtual |
Called by USBDevice layer on each new USB frame.
Callbacks are enabled and disabled by calling sof_enable and sof_disable.
frame_number | The current frame number |
Warning: Called in ISR context
Definition at line 356 of file USBDevice.h.
|
protectedpure virtual |
Called when USB changes state.
new_state | The new state of the USBDevice |
Warning: Called in ISR context
Implemented in USBAudio, USBHID, USBCDC, USBCDC_ECM, USBMIDI, USBTester, and USBEndpointTester.
|
protected |
Called to complete the setup stage of a callback request.
Possible options that can be passed as a result are:
result | The result of the setup phase. |
data | Buffer to send or receive if the result is Send or Receive |
size | Size to transfer if the result is Send or Receive |
|
protected |
Called to complete the data stage of a callback request.
success | true if the operation was successful, false otherwise |
|
protected |
Called to complete a set configuration command.
success | true if the configuration was set, false otherwise |
|
protected |
Called to complete a set interface command.
success | true if the interface was set, false otherwise |
bool configured | ( | ) |
Check if the device is configured.
void connect | ( | ) |
Connect a device.
void deinit | ( | ) |
Power down this instance.
Disable interrupts and stop sending events.
void disconnect | ( | ) |
Disconnect a device.
void endpoint_abort | ( | usb_ep_t | endpoint | ) |
Abort the current transfer on this endpoint.
endpoint | endpoint with transfer to abort |
bool endpoint_add | ( | usb_ep_t | endpoint, |
uint32_t | max_packet, | ||
usb_ep_type_t | type, | ||
ep_cb_t | callback = NULL |
||
) |
Add an endpoint.
endpoint | Endpoint to enable |
max_packet | Maximum size of a packet which can be sent or received on this endpoint |
type | Endpoint type - USB_EP_TYPE_BULK, USB_EP_TYPE_INT or USB_EP_TYPE_ISO |
callback | Method pointer to be called when a packet is transferred |
bool endpoint_add | ( | usb_ep_t | endpoint, |
uint32_t | max_packet, | ||
usb_ep_type_t | type, | ||
void(T::*)() | callback | ||
) |
Add an endpoint.
endpoint | Endpoint to enable |
max_packet | Maximum size of a packet which can be sent or received on this endpoint |
type | Endpoint type - USB_EP_TYPE_BULK, USB_EP_TYPE_INT or USB_EP_TYPE_ISO |
callback | Method pointer to be called when a packet is transferred |
Definition at line 161 of file USBDevice.h.
uint32_t endpoint_max_packet_size | ( | usb_ep_t | endpoint | ) |
Get the current maximum size for this endpoint.
Return the currently configured maximum packet size, wMaxPacketSize, for this endpoint.
void endpoint_remove | ( | usb_ep_t | endpoint | ) |
Remove an endpoint.
endpoint | Endpoint to disable |
void endpoint_remove_all | ( | ) |
Remove all non-zero endpoints.
void endpoint_stall | ( | usb_ep_t | endpoint | ) |
Stall an endpoint.
If there is an ongoing transfer on this endpoint then it will be aborted.
endpoint | Endpoint to stall |
|
protected |
void endpoint_unstall | ( | usb_ep_t | endpoint | ) |
Unstall an endpoint.
Unstalling an endpoint resets data toggle back to DATA0. Additionally, if there is an ongoing transfer on this endpoint it will be aborted.
endpoint | Endpoint to unstall |
|
protected |
Find a descriptor type inside the configuration descriptor.
descriptor_type | Type of descriptor to find |
index | Configuration descriptor index ( 0 if only one configuration present ) |
void init | ( | ) |
Initialize this instance.
This function must be called before calling any other functions of this class, unless specifically
|
protectedvirtual |
Acquire exclusive access to this instance USBDevice.
uint32_t read_finish | ( | usb_ep_t | endpoint | ) |
Get the status of a read.
endpoint | endpoint to get the status of |
bool read_start | ( | usb_ep_t | endpoint, |
uint8_t * | buffer, | ||
uint32_t | size | ||
) |
start a read on the given endpoint
Start a read on the given endpoint. The data buffer must remain unchanged until the transfer either completes or is aborted.
endpoint | endpoint to read data from |
buffer | buffer to fill with read data |
size | The size of data to read. This must be greater than or equal to the max packet size for this endpoint |
void sof_disable | ( | ) |
Disable the start of frame interrupt.
Stop calling USBDevice::callback_sof.
void sof_enable | ( | ) |
Enable the start of frame interrupt.
Call USBDevice::callback_sof on every frame.
|
protectedvirtual |
Callback called to indicate the USB processing needs to be done.
Implements USBPhyEvents.
|
protectedvirtual |
Release exclusive access to this instance USBDevice.
uint32_t write_finish | ( | usb_ep_t | endpoint | ) |
Get the status of a write.
endpoint | endpoint to get the status of |
bool write_start | ( | usb_ep_t | endpoint, |
uint8_t * | buffer, | ||
uint32_t | size | ||
) |
Write a data to the given endpoint.
Write data to an endpoint. The data sent must remain unchanged until the transfer either completes or is aborted.
endpoint | endpoint to write data to |
buffer | data to write |
size | the size of data to send. This must be less than or equal to the max packet size of this endpoint |