29#if CFG_TUD_ENABLED && CFG_TUSB_MCU == OPT_MCU_CXD56
32#include <nuttx/usb/usbdev.h>
33#include <nuttx/arch.h>
38#define CXD56_EPNUM (7)
39#define CXD56_SETUP_QUEUE_DEPTH (4)
40#define CXD56_MAX_DATA_OUT_SIZE (64)
47 FAR
struct usbdev_ep_s *
ep[CXD56_EPNUM];
48 FAR
struct usbdev_req_s *
req[CXD56_EPNUM];
51 FAR uint8_t
dataout[CXD56_MAX_DATA_OUT_SIZE];
58static int _dcd_bind (FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev);
59static void _dcd_unbind (FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev);
60static int _dcd_setup (FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev,
61 FAR
const struct usb_ctrlreq_s *ctrl, FAR uint8_t *dataout,
size_t outlen);
62static void _dcd_disconnect (FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev);
63static void _dcd_suspend (FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev);
64static void _dcd_resume (FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev);
80 uint8_t ep_addr = (uint32_t)req->priv;
82 if (req->result || req->xfrd != req->len)
98static int _dcd_bind(FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev)
131static void _dcd_unbind(FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev)
137static int _dcd_setup(FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev,
138 FAR
const struct usb_ctrlreq_s *ctrl, FAR uint8_t *dataout,
size_t outlen)
153 if (outlen > 0 && outlen <= CXD56_MAX_DATA_OUT_SIZE)
162static void _dcd_disconnect(FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev)
188static void _dcd_suspend(FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev)
196static void _dcd_resume(FAR
struct usbdevclass_driver_s *driver, FAR
struct usbdev_s *dev)
223 up_enable_irq(CXD56_IRQ_USB_INT);
231 up_disable_irq(CXD56_IRQ_USB_INT);
281 struct usb_epdesc_s epdesc;
283 if (epnum >= CXD56_EPNUM)
291 xfrtype = USB_EP_ATTR_XFER_ISOC;
294 xfrtype = USB_EP_ATTR_XFER_BULK;
297 xfrtype = USB_EP_ATTR_XFER_INT;
326 epdesc.len = p_endpoint_desc->
bLength;
329 epdesc.attr = xfrtype;
330 epdesc.mxpacketsize[0] = LSBYTE(ep_mps);
331 epdesc.mxpacketsize[1] = MSBYTE(ep_mps);
332 epdesc.interval = p_endpoint_desc->
bInterval;
355 if (epnum >= CXD56_EPNUM)
386 struct usb_ctrlreq_s ctrl;
419 if (epnum >= CXD56_EPNUM)
433 if (epnum >= CXD56_EPNUM)
static TU_ATTR_ALWAYS_INLINE void dcd_event_bus_signal(uint8_t rhport, dcd_eventid_t eid, bool in_isr)
static TU_ATTR_ALWAYS_INLINE void dcd_event_xfer_complete(uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr)
static TU_ATTR_ALWAYS_INLINE void dcd_event_setup_received(uint8_t rhport, uint8_t const *setup, bool in_isr)
static TU_ATTR_ALWAYS_INLINE void dcd_event_bus_reset(uint8_t rhport, tusb_speed_t speed, bool in_isr)
static void _dcd_resume(FAR struct usbdevclass_driver_s *driver, FAR struct usbdev_s *dev)
static void _dcd_unbind(FAR struct usbdevclass_driver_s *driver, FAR struct usbdev_s *dev)
void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr)
void dcd_disconnect(uint8_t rhport)
void dcd_edpt_close_all(uint8_t rhport)
void dcd_int_disable(uint8_t rhport)
bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *p_endpoint_desc)
static void usbdcd_ep0incomplete(FAR struct usbdev_ep_s *ep, FAR struct usbdev_req_s *req)
static void _dcd_suspend(FAR struct usbdevclass_driver_s *driver, FAR struct usbdev_s *dev)
OSAL_QUEUE_DEF(usbd_int_set, _setup_queue_def, CXD56_SETUP_QUEUE_DEPTH, struct usb_ctrlreq_s)
void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
static struct usbdcd_driver_s usbdcd_driver
void dcd_connect(uint8_t rhport)
bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)
static void _dcd_disconnect(FAR struct usbdevclass_driver_s *driver, FAR struct usbdev_s *dev)
void dcd_set_address(uint8_t rhport, uint8_t dev_addr)
static int _dcd_setup(FAR struct usbdevclass_driver_s *driver, FAR struct usbdev_s *dev, FAR const struct usb_ctrlreq_s *ctrl, FAR uint8_t *dataout, size_t outlen)
bool dcd_init(uint8_t rhport, const tusb_rhport_init_t *rh_init)
static int _dcd_bind(FAR struct usbdevclass_driver_s *driver, FAR struct usbdev_s *dev)
void dcd_int_enable(uint8_t rhport)
void dcd_remote_wakeup(uint8_t rhport)
static const struct usbdevclass_driverops_s g_driverops
static struct usbdev_s * usbdev
void dcd_sof_enable(uint8_t rhport, bool en)
static TU_ATTR_ALWAYS_INLINE osal_queue_t osal_queue_create(osal_queue_def_t *qdef)
QueueHandle_t osal_queue_t
static TU_ATTR_ALWAYS_INLINE bool osal_queue_send(osal_queue_t qhdl, void const *data, bool in_isr)
static TU_ATTR_ALWAYS_INLINE bool osal_queue_receive(osal_queue_t qhdl, void *data, uint32_t msec)
static void * memcpy(void *dst, const void *src, size_t n)
AUDIO Channel Cluster Descriptor (4.1)
uint8_t bmAttributes
See: audio_clock_source_attribute_t.
uint8_t bDescriptorType
Descriptor Type. Value: TUSB_DESC_CS_INTERFACE.
uint8_t bLength
Size of this descriptor in bytes: 9.
FAR struct usbdev_ep_s * ep[CXD56_EPNUM]
FAR struct usbdev_req_s * req[CXD56_EPNUM]
FAR uint8_t dataout[CXD56_MAX_DATA_OUT_SIZE]
struct usbdevclass_driver_s usbdevclass_driver
tusb_speed_t
defined base on EHCI specs value for Endpoint Speed
static TU_ATTR_ALWAYS_INLINE uint8_t tu_edpt_number(uint8_t addr)
static TU_ATTR_ALWAYS_INLINE uint16_t tu_edpt_packet_size(tusb_desc_endpoint_t const *desc_ep)
TU_ATTR_PACKED_END TU_ATTR_BIT_FIELD_ORDER_END static TU_ATTR_ALWAYS_INLINE tusb_dir_t tu_edpt_dir(uint8_t addr)
void usbd_int_set(bool enabled)