static void usb_handle_control_done(void *data, ssize_t len, void *cbdata) { if (usb.state == USBD_STATE_SETTING_ADDRESS) { usb.state = USBD_STATE_ADDRESS; usb_set_addr(usb.address); } usb_setup_control(); }
void usb_restart(void) { const struct usbd_device *identity = usb.identity; /* XXX reset existing functions? */ memset(&usb, 0, sizeof(usb)); usb.functions.function = &usb.control_function; usb.identity = identity; usb_init_ep(&usb.functions, 0, USB_EP_RX, EP0_BUFSIZE); usb_init_ep(&usb.functions, 0, USB_EP_TX, EP0_BUFSIZE); usb_setup_control(); }
void usb_restart(void) { const struct usbd_device *identity = usb.identity; /* XXX reset existing functions? */ memset(&usb, 0, sizeof(usb)); usb.functions.function = &usb.control_function; usb.identity = identity; usb_init_ep(&usb.functions, 0, USB_EP_RX, EP0_BUFSIZE); usb_init_ep(&usb.functions, 0, USB_EP_TX, EP0_BUFSIZE); usb_setup_control(); for (const struct usbd_global *g = usb.identity->global; g != NULL; g = g->next) { if (g->init) g->init(g, 1); } }