| // your best effort to read chapter 4 before asking USB questions! | // your best effort to read chapter 4 before asking USB questions! | ||||
| //#define USBHOST_PRINT_DEBUG | |||||
| #define USBHOST_PRINT_DEBUG | |||||
| /************************************************/ | /************************************************/ | ||||
| /* Data Types */ | /* Data Types */ | ||||
| void send_clearstatus_overcurrent(uint32_t port); | void send_clearstatus_overcurrent(uint32_t port); | ||||
| void send_clearstatus_reset(uint32_t port); | void send_clearstatus_reset(uint32_t port); | ||||
| void send_setreset(uint32_t port); | void send_setreset(uint32_t port); | ||||
| void send_setinterface(); | |||||
| static void callback(const Transfer_t *transfer); | static void callback(const Transfer_t *transfer); | ||||
| void status_change(const Transfer_t *transfer); | void status_change(const Transfer_t *transfer); | ||||
| void new_port_status(uint32_t port, uint32_t status); | void new_port_status(uint32_t port, uint32_t status); |
| } | } | ||||
| } | } | ||||
| void USBHub::send_setinterface() | |||||
| { | |||||
| // assumes not already sending another control transfer | |||||
| mk_setup(setup, 1, 11, altsetting, interface_number, 0); | |||||
| queue_Control_Transfer(device, &setup, NULL, this); | |||||
| sending_control_transfer = 1; | |||||
| } | |||||
| static uint32_t lowestbit(uint32_t bitmask) | static uint32_t lowestbit(uint32_t bitmask) | ||||
| { | { | ||||
| return __builtin_ctz(bitmask); | return __builtin_ctz(bitmask); | ||||
| numports = hub_desc[2]; | numports = hub_desc[2]; | ||||
| characteristics = hub_desc[3]; | characteristics = hub_desc[3]; | ||||
| powertime = hub_desc[5]; | powertime = hub_desc[5]; | ||||
| if (interface_count > 1) { | |||||
| send_setinterface(); | |||||
| } | |||||
| // TODO: do we need to use the DeviceRemovable | // TODO: do we need to use the DeviceRemovable | ||||
| // bits to make synthetic device connect events? | // bits to make synthetic device connect events? | ||||
| println("Hub ports = ", numports); | println("Hub ports = ", numports); |