avr-fw-modules/usb/src/usb_device_configure.c

42 lines
1.0 KiB
C

#include <usb/usb.h>
#include <hwo/utils.h>
#include <hwo/events.h>
#include <hwo/utils.h>
#include <sys/trace.h>
#include <avr/io.h>
#include <avr/interrupt.h>
void usb_ll_setup_configuration(int nConfiguration){
int nEP;
// Disable All Endpoints except #0
for (nEP = 1; nEP < MAX_ENDPOINTS; nEP++){
usb_ll_endpoint_disable( nEP );
};
usb_device.current_configuration = nConfiguration;
usb_device.endpoints[0].buffer = NULL;
if (nConfiguration >= 0){
int n = 0;
device_configuration_t *config = usb_device.descriptor->configurations[usb_device.current_configuration];
uint8_t *ptr = (uint8_t*)config->descriptor;
if (config && ptr){
while (n < config->size){
if ( ((usb_descriptor_header_t*)&ptr[n])->bDescriptorType == DT_ENDPOINT ){
usb_ll_endpoint_enable( (usb_standard_endpoint_descriptor_t*)&ptr[n] );
};
n += ((usb_descriptor_header_t*)&ptr[n])->bLength;
};
};
usb_device.state.Configured = 1;
} else {
usb_device.state.Configured = 0;
};
};