32 qh->ch = (
desc_.dev_addr & 0x7F);
33 qh->ch |= ((
desc_.endpoint & 0xF) << 8);
34 qh->ch |= (
desc_.speed & 0x3) << 12;
35 qh->ch |= (
desc_.endpoint & 0x7FF) << 16;
69 - ((
data_node_->task_descriptor->token >> 16) & 0x7FFF);
bool open(const USBInterruptPipeDesc &desc, InterruptCallback cb) override
USBInterruptPipeDesc desc_
ehci_queue_head_node_t * qh_node_
ehci_queue_task_descriptor_node_t * data_node_
void on_complete(uint8_t *buf, size_t len, bool error) override
static void * DMAAlloc(size_t size, uintptr_t *paddr)
static void memset(void *ptr, uint8_t value, size_t num)
@ EHCI_QTD_TOKEN_ERROR_COUNT_3
#define EHCI_QTD_TERMINATE
#define EHCI_QTD_TOKEN_IOC
@ EHCI_QTD_TOKEN_STATUS_ACTIVE
#define EHCI_QTD_TOKEN_DATA
#define EHCI_QTD_TOKEN_LENGTH(l)
void(*)(const uint8_t *data, size_t len) InterruptCallback