static usb_request_status_t usb_standard_request_set_configuration_setup( usb_endpoint_t* const endpoint ) { const uint8_t usb_configuration = endpoint->setup.value_l; if( usb_set_configuration(endpoint->device, usb_configuration) ) { if( usb_configuration == 0 ) { // TODO: Should this be done immediately? usb_set_address_immediate(endpoint->device, 0); } usb_endpoint_schedule_ack(endpoint->in); return USB_REQUEST_STATUS_OK; } else { return USB_REQUEST_STATUS_STALL; } }
static void usb_bus_reset(usb_device_t* const device) { // According to UM10503 v1.4 section 23.10.3 "Bus reset": usb_reset_all_endpoints(); usb_set_address_immediate(device, 0); usb_set_configuration(device, 0); // TODO: Enable endpoint 0, which might not actually be necessary, // as the datasheet claims it can't be disabled. //wait_ms(3); // //if( USB0_PORTSC1 & USB0_PORTSC1_PR ) { // // Port still is in the reset state. //} else { // usb_hardware_reset(); //} }