Example #1
0
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);
	}
}
Example #2
0
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();
}