Remove dependencies on application-specific USB descriptors.
This commit is contained in:
@ -26,7 +26,6 @@
|
|||||||
|
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
#include "usb_type.h"
|
#include "usb_type.h"
|
||||||
#include "usb_descriptor.h"
|
|
||||||
#include "usb_queue.h"
|
#include "usb_queue.h"
|
||||||
|
|
||||||
const uint8_t* usb_endpoint_descriptor(
|
const uint8_t* usb_endpoint_descriptor(
|
||||||
@ -132,9 +131,9 @@ static usb_request_status_t usb_send_descriptor_string(
|
|||||||
usb_endpoint_t* const endpoint
|
usb_endpoint_t* const endpoint
|
||||||
) {
|
) {
|
||||||
uint_fast8_t index = endpoint->setup.value_l;
|
uint_fast8_t index = endpoint->setup.value_l;
|
||||||
for( uint_fast8_t i=0; usb_descriptor_strings[i] != 0; i++ ) {
|
for( uint_fast8_t i=0; endpoint->device->descriptor_strings[i] != 0; i++ ) {
|
||||||
if( i == index ) {
|
if( i == index ) {
|
||||||
return usb_send_descriptor(endpoint, usb_descriptor_strings[i]);
|
return usb_send_descriptor(endpoint, endpoint->device->descriptor_strings[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,7 +164,7 @@ static usb_request_status_t usb_standard_request_get_descriptor_setup(
|
|||||||
) {
|
) {
|
||||||
switch( endpoint->setup.value_h ) {
|
switch( endpoint->setup.value_h ) {
|
||||||
case USB_DESCRIPTOR_TYPE_DEVICE:
|
case USB_DESCRIPTOR_TYPE_DEVICE:
|
||||||
return usb_send_descriptor(endpoint, usb_descriptor_device);
|
return usb_send_descriptor(endpoint, endpoint->device->descriptor);
|
||||||
|
|
||||||
case USB_DESCRIPTOR_TYPE_CONFIGURATION:
|
case USB_DESCRIPTOR_TYPE_CONFIGURATION:
|
||||||
// TODO: Duplicated code. Refactor.
|
// TODO: Duplicated code. Refactor.
|
||||||
@ -176,7 +175,7 @@ static usb_request_status_t usb_standard_request_get_descriptor_setup(
|
|||||||
}
|
}
|
||||||
|
|
||||||
case USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER:
|
case USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER:
|
||||||
return usb_send_descriptor(endpoint, usb_descriptor_device_qualifier);
|
return usb_send_descriptor(endpoint, endpoint->device->qualifier_descriptor);
|
||||||
|
|
||||||
case USB_DESCRIPTOR_TYPE_OTHER_SPEED_CONFIGURATION:
|
case USB_DESCRIPTOR_TYPE_OTHER_SPEED_CONFIGURATION:
|
||||||
// TODO: Duplicated code. Refactor.
|
// TODO: Duplicated code. Refactor.
|
||||||
|
@ -123,6 +123,8 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const uint8_t* const descriptor;
|
const uint8_t* const descriptor;
|
||||||
|
uint8_t** descriptor_strings;
|
||||||
|
const uint8_t* const qualifier_descriptor;
|
||||||
usb_configuration_t* (*configurations)[];
|
usb_configuration_t* (*configurations)[];
|
||||||
const usb_configuration_t* configuration;
|
const usb_configuration_t* configuration;
|
||||||
} usb_device_t;
|
} usb_device_t;
|
||||||
|
@ -108,6 +108,8 @@ usb_configuration_t* usb_configurations[] = {
|
|||||||
|
|
||||||
usb_device_t usb_device = {
|
usb_device_t usb_device = {
|
||||||
.descriptor = usb_descriptor_device,
|
.descriptor = usb_descriptor_device,
|
||||||
|
.descriptor_strings = usb_descriptor_strings,
|
||||||
|
.qualifier_descriptor = usb_descriptor_device_qualifier,
|
||||||
.configurations = &usb_configurations,
|
.configurations = &usb_configurations,
|
||||||
.configuration = 0,
|
.configuration = 0,
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user