void _usbd_control_in(u8 ea) { (void)ea; struct usb_setup_data *req = &control_state.req; switch (control_state.state) { case DATA_IN: usb_control_send_chunk(); break; case LAST_DATA_IN: control_state.state = STATUS_OUT; break; case STATUS_IN: if (control_state.complete) control_state.complete(&control_state.req); /* Exception: Handle SET ADDRESS function here... */ if ((req->bmRequestType == 0) && (req->bRequest == USB_REQ_SET_ADDRESS)) _usbd_hw_set_address(req->wValue); control_state.state = IDLE; break; default: usbd_ep_stall_set(0, 1); } }
void _usbd_reset(void) { _usbd_device.current_address = 0; _usbd_device.current_config = 0; usbd_ep_setup(0, USB_ENDPOINT_ATTR_CONTROL, 64, NULL); _usbd_hw_set_address(0); if (_usbd_device.user_callback_reset) _usbd_device.user_callback_reset(); }