42 lines
1.0 KiB
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;
|
|
};
|
|
};
|
|
|