From 38d07b27ef009536d499b417056cb8ae76ed11ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Fri, 14 Apr 2017 00:03:24 +0200 Subject: [PATCH] Clean up usb_descriptor.[ch] --- right/src/buspal/bm_usb/usb_descriptor.c | 102 +++-------------- right/src/buspal/bm_usb/usb_descriptor.h | 136 ++++++++--------------- 2 files changed, 65 insertions(+), 173 deletions(-) diff --git a/right/src/buspal/bm_usb/usb_descriptor.c b/right/src/buspal/bm_usb/usb_descriptor.c index cbe4258..41969b3 100644 --- a/right/src/buspal/bm_usb/usb_descriptor.c +++ b/right/src/buspal/bm_usb/usb_descriptor.c @@ -281,68 +281,43 @@ usb_language_list_t g_language_list = { usb_language_list_t *g_language_ptr; -/* Get hid descriptor request */ -usb_status_t usb_device_get_hid_descriptor(usb_device_handle handle, - usb_device_get_hid_descriptor_struct_t *hid_descriptor) +usb_status_t usb_device_get_hid_descriptor( + usb_device_handle handle, usb_device_get_hid_descriptor_struct_t *hid_descriptor) { return kStatus_USB_InvalidRequest; } /* Get hid report descriptor request */ -usb_status_t usb_device_get_hid_report_descriptor(usb_device_handle handle, - usb_device_get_hid_report_descriptor_struct_t *hid_report_descriptor) +usb_status_t usb_device_get_hid_report_descriptor( + usb_device_handle handle, usb_device_get_hid_report_descriptor_struct_t *hid_report_descriptor) { if (USB_HID_GENERIC_INTERFACE_INDEX == hid_report_descriptor->interfaceNumber) { hid_report_descriptor->buffer = g_hid_generic_report_descriptor; - // hid_report_descriptor->length = USB_HID_REPORT_DESC_SIZE; - hid_report_descriptor->length = sizeof(g_hid_generic_report_descriptor); + hid_report_descriptor->length = USB_HID_REPORT_DESC_SIZE; } else { return kStatus_USB_InvalidRequest; } return kStatus_USB_Success; } -/* Get hid physical descriptor request */ usb_status_t usb_device_get_hid_physical_descriptor( usb_device_handle handle, usb_device_get_hid_physical_descriptor_struct_t *hid_physical_descriptor) { return kStatus_USB_InvalidRequest; } -/*! - * @brief USB device get device descriptor function. - * - * This function gets the device descriptor of the USB devcie. - * - * @param handle The USB device handle. - * @param device_descriptor The pointer to the device descriptor structure. - * - * @return A USB error code or kStatus_USB_Success. - */ -usb_status_t usb_device_get_device_descriptor(usb_device_handle handle, - usb_device_get_device_descriptor_struct_t *device_descriptor) +usb_status_t usb_device_get_device_descriptor( + usb_device_handle handle, usb_device_get_device_descriptor_struct_t *device_descriptor) { device_descriptor->buffer = g_device_descriptor; device_descriptor->length = USB_DEVICE_DESCRIPTOR_LENGTH; return kStatus_USB_Success; } -/*! - * @brief USB device get configuration descriptor function. - * - * This function gets the configuration descriptor of the USB devcie. - * - * @param handle The USB device handle. - * @param configuration_descriptor The pointer to the configuration descriptor structure. - * - * @return A USB error code or kStatus_USB_Success. - */ usb_status_t usb_device_get_configuration_descriptor( usb_device_handle handle, usb_device_get_configuration_descriptor_struct_t *configuration_descriptor) { - // if (USB_COMPOSITE_CONFIGURE_INDEX > configuration_descriptor->configuration) - if (USB_HID_GENERIC_CONFIGURE_INDEX > configuration_descriptor->configuration) - { + if (USB_HID_GENERIC_CONFIGURE_INDEX > configuration_descriptor->configuration) { configuration_descriptor->buffer = g_config_descriptor; configuration_descriptor->length = USB_CONFIGURE_DESCRIPTOR_LENGTH; return kStatus_USB_Success; @@ -350,18 +325,8 @@ usb_status_t usb_device_get_configuration_descriptor( return kStatus_USB_InvalidRequest; } -/*! - * @brief USB device get string descriptor function. - * - * This function gets the string descriptor of the USB devcie. - * - * @param handle The USB device handle. - * @param string_descriptor Pointer to the string descriptor structure. - * - * @return A USB error code or kStatus_USB_Success. - */ -usb_status_t usb_device_get_string_descriptor(usb_device_handle handle, - usb_device_get_string_descriptor_struct_t *string_descriptor) +usb_status_t usb_device_get_string_descriptor( + usb_device_handle handle, usb_device_get_string_descriptor_struct_t *string_descriptor) { if (string_descriptor->stringIndex == 0) { string_descriptor->buffer = (uint8_t *)g_language_list.languageString; @@ -388,54 +353,23 @@ usb_status_t usb_device_get_string_descriptor(usb_device_handle handle, return kStatus_USB_Success; } -/*! - * @brief USB device set speed function. - * - * This function sets the speed of the USB devcie. - * - * @param handle The USB device handle. - * @param speed Speed type. USB_SPEED_HIGH/USB_SPEED_FULL/USB_SPEED_LOW. - * - * @return A USB error code or kStatus_USB_Success. - */ usb_status_t usb_device_set_speed(usb_device_handle handle, uint8_t speed) { usb_hid_config_descriptor_t *ptr_hid = NULL; ptr_hid = (usb_hid_config_descriptor_t *)&g_config_descriptor[USB_HID_CONFIG_INDEX]; - if (USB_SPEED_HIGH == speed) { - // HID interface - USB_SHORT_TO_LITTLE_ENDIAN_ADDRESS(HS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE, - ptr_hid->endpoint_in.wMaxPacketSize); - ptr_hid->endpoint_in.bInterval = HS_HID_GENERIC_INTERRUPT_IN_INTERVAL; + // HID interface + USB_SHORT_TO_LITTLE_ENDIAN_ADDRESS(FS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE, ptr_hid->endpoint_in.wMaxPacketSize); + ptr_hid->endpoint_in.bInterval = FS_HID_GENERIC_INTERRUPT_IN_INTERVAL; - USB_SHORT_TO_LITTLE_ENDIAN_ADDRESS(HS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE, - ptr_hid->endpoint_out.wMaxPacketSize); - ptr_hid->endpoint_out.bInterval = HS_HID_GENERIC_INTERRUPT_OUT_INTERVAL; - } else { - // HID interface - USB_SHORT_TO_LITTLE_ENDIAN_ADDRESS(FS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE, - ptr_hid->endpoint_in.wMaxPacketSize); - ptr_hid->endpoint_in.bInterval = FS_HID_GENERIC_INTERRUPT_IN_INTERVAL; - - USB_SHORT_TO_LITTLE_ENDIAN_ADDRESS(FS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE, - ptr_hid->endpoint_out.wMaxPacketSize); - ptr_hid->endpoint_out.bInterval = FS_HID_GENERIC_INTERRUPT_OUT_INTERVAL; - } + USB_SHORT_TO_LITTLE_ENDIAN_ADDRESS(FS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE, ptr_hid->endpoint_out.wMaxPacketSize); + ptr_hid->endpoint_out.bInterval = FS_HID_GENERIC_INTERRUPT_OUT_INTERVAL; for (uint32_t i = 0; i < USB_HID_GENERIC_ENDPOINT_COUNT; i++) { - if (USB_SPEED_HIGH == speed) { - if (g_hid_generic_endpoints[i].endpointAddress & USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN) { - g_hid_generic_endpoints[i].maxPacketSize = HS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE; - } else { - g_hid_generic_endpoints[i].maxPacketSize = HS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE; - } + if (g_hid_generic_endpoints[i].endpointAddress & USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN) { + g_hid_generic_endpoints[i].maxPacketSize = FS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE; } else { - if (g_hid_generic_endpoints[i].endpointAddress & USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN) { - g_hid_generic_endpoints[i].maxPacketSize = FS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE; - } else { - g_hid_generic_endpoints[i].maxPacketSize = FS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE; - } + g_hid_generic_endpoints[i].maxPacketSize = FS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE; } } diff --git a/right/src/buspal/bm_usb/usb_descriptor.h b/right/src/buspal/bm_usb/usb_descriptor.h index c1b872e..780a95f 100644 --- a/right/src/buspal/bm_usb/usb_descriptor.h +++ b/right/src/buspal/bm_usb/usb_descriptor.h @@ -3,97 +3,70 @@ #include "bootloader_common.h" #include "usb_device_config.h" -#include "usb.h" -#include "usb_device.h" - -#include "usb_device_class.h" -#include "usb_device_hid.h" - -#include "usb_descriptor.h" #define USB_BCD_VERSION (0x0200) -/******************************************************************************* - * For generic HID - *******************************************************************************/ +#define USB_DEVICE_DESCRIPTOR_LENGTH 18 -/* usb descritpor length */ -#define USB_DEVICE_DESCRIPTOR_LENGTH (18) +#define USB_CONFIGURE_DESCRIPTOR_LENGTH 41 -#define USB_CONFIGURE_DESCRIPTOR_LENGTH (41) // 64, HID_only = 41, MSC_ONLY = 32 +#define USB_HID_REPORT_DESC_SIZE 76 +#define USB_HID_GENERIC_DESCRIPTOR_LENGTH 32 +#define USB_CONFIGURE_ONLY_DESCRIPTOR_LENGTH 9 +#define USB_INTERFACE_DESCRIPTOR_LENGTH 9 +#define USB_HID_DESCRIPTOR_LENGTH 9 +#define USB_ENDPOINT_DESCRIPTOR_LENGTH 7 +#define USB_MSC_DISK_REPORT_DESCRIPTOR_LENGTH 63 +#define USB_IAD_DESC_SIZE 8 -#define USB_HID_REPORT_DESC_SIZE (76) -#define USB_HID_GENERIC_DESCRIPTOR_LENGTH (32) -#define USB_CONFIGURE_ONLY_DESCRIPTOR_LENGTH (9) -#define USB_INTERFACE_DESCRIPTOR_LENGTH (9) -#define USB_HID_DESCRIPTOR_LENGTH (9) -#define USB_ENDPOINT_DESCRIPTOR_LENGTH (7) -#define USB_MSC_DISK_REPORT_DESCRIPTOR_LENGTH (63) -#define USB_IAD_DESC_SIZE (8) - -#define USB_CONFIGURE_COUNT (1) -#define USB_STRING_COUNT (4) -#define USB_LANGUAGE_COUNT (1) +#define USB_CONFIGURE_COUNT 1 +#define USB_STRING_COUNT 4 +#define USB_LANGUAGE_COUNT 1 #define USB_HID_CONFIG_INDEX (USB_CONFIGURE_ONLY_DESCRIPTOR_LENGTH) -#define HS_BULK_IN_PACKET_SIZE (512) -#define HS_BULK_OUT_PACKET_SIZE (512) -#define FS_BULK_IN_PACKET_SIZE (64) -#define FS_BULK_OUT_PACKET_SIZE (64) +#define USB_HID_GENERIC_INTERFACE_INDEX 0 -#define USB_HID_GENERIC_INTERFACE_INDEX (0) +#define USB_HID_GENERIC_CONFIGURE_INDEX 1 +#define USB_HID_GENERIC_INTERFACE_COUNT 1 -// HID -#define USB_HID_GENERIC_CONFIGURE_INDEX (1) -#define USB_HID_GENERIC_INTERFACE_COUNT (1) +#define USB_HID_GENERIC_IN_BUFFER_LENGTH 8 +#define USB_HID_GENERIC_OUT_BUFFER_LENGTH 8 +#define USB_HID_GENERIC_ENDPOINT_COUNT 2 +#define USB_HID_GENERIC_ENDPOINT_IN 1 +#define USB_HID_GENERIC_ENDPOINT_OUT 2 -#define USB_HID_GENERIC_IN_BUFFER_LENGTH (8) -#define USB_HID_GENERIC_OUT_BUFFER_LENGTH (8) -#define USB_HID_GENERIC_ENDPOINT_COUNT (2) -#define USB_HID_GENERIC_ENDPOINT_IN (1) -#define USB_HID_GENERIC_ENDPOINT_OUT (2) +#define USB_HID_GENERIC_CLASS 0x03 +#define USB_HID_GENERIC_SUBCLASS 0x00 +#define USB_HID_GENERIC_PROTOCOL 0x00 -#define USB_HID_GENERIC_CLASS (0x03) -#define USB_HID_GENERIC_SUBCLASS (0x00) -#define USB_HID_GENERIC_PROTOCOL (0x00) +#define FS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE 64 +#define FS_HID_GENERIC_INTERRUPT_OUT_INTERVAL 0x01 -#define HS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE (64) -#define FS_HID_GENERIC_INTERRUPT_OUT_PACKET_SIZE (64) -#define HS_HID_GENERIC_INTERRUPT_OUT_INTERVAL (0x04) /* 2^(4-1) = 1ms */ -#define FS_HID_GENERIC_INTERRUPT_OUT_INTERVAL (0x01) +#define FS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE 64 +#define FS_HID_GENERIC_INTERRUPT_IN_INTERVAL 0x01 -#define HS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE (64) -#define FS_HID_GENERIC_INTERRUPT_IN_PACKET_SIZE (64) -#define HS_HID_GENERIC_INTERRUPT_IN_INTERVAL (0x04) /* 2^(4-1) = 1ms */ -#define FS_HID_GENERIC_INTERRUPT_IN_INTERVAL (0x01) +#define USB_COMPOSITE_INTERFACE_COUNT USB_HID_GENERIC_INTERFACE_COUNT -#define USB_COMPOSITE_INTERFACE_COUNT (USB_HID_GENERIC_INTERFACE_COUNT) +#define USB_COMPOSITE_CONFIGURE_INDEX 1 -#define USB_COMPOSITE_CONFIGURE_INDEX (1) +#define USB_STRING_DESCRIPTOR_HEADER_LENGTH 0x02 +#define USB_STRING_DESCRIPTOR_0_LENGTH 0x02 +#define USB_STRING_DESCRIPTOR_1_LENGTH 56 +#define USB_STRING_DESCRIPTOR_2_LENGTH 32 +#define USB_STRING_DESCRIPTOR_3_LENGTH 44 +#define USB_STRING_DESCRIPTOR_ERROR_LENGTH 32 -#define USB_STRING_DESCRIPTOR_HEADER_LENGTH (0x02) -#define USB_STRING_DESCRIPTOR_0_LENGTH (0x02) -#define USB_STRING_DESCRIPTOR_1_LENGTH (56) -#define USB_STRING_DESCRIPTOR_2_LENGTH (32) -#define USB_STRING_DESCRIPTOR_3_LENGTH (44) -#define USB_STRING_DESCRIPTOR_ERROR_LENGTH (32) +#define USB_CONFIGURE_DRAWN 0x32 -#define USB_CONFIGURE_DRAWN (0x32) - -//////////////////////////////////////////////////////////////////////////////// -// Definitions -//////////////////////////////////////////////////////////////////////////////// -enum _usb_descriptor_index -{ +enum _usb_descriptor_index { kUsbDescriptorIndex_VidLow = 8, kUsbDescriptorIndex_VidHigh = 9, kUsbDescriptorIndex_PidLow = 10, kUsbDescriptorIndex_PidHigh = 11 }; -typedef struct _usb_hid_config_descriptor -{ +typedef struct _usb_hid_config_descriptor { usb_descriptor_interface_t interface; /* Interface descriptor */ usb_descriptor_interface_t hid_report; /* Interface descriptor */ usb_descriptor_endpoint_t endpoint_in; /* Endpoint descriptor */ @@ -101,38 +74,23 @@ typedef struct _usb_hid_config_descriptor } usb_hid_config_descriptor_t; extern usb_device_class_struct_t g_hid_generic_class; -extern usb_device_class_struct_t g_msc_class; - -/* Configure the device according to the USB speed. */ extern usb_status_t usb_device_set_speed(usb_device_handle handle, uint8_t speed); -/* Get device descriptor request */ -usb_status_t usb_device_get_device_descriptor(usb_device_handle handle, - usb_device_get_device_descriptor_struct_t *device_descriptor); - -/* Get device configuration descriptor request */ +usb_status_t usb_device_get_device_descriptor( + usb_device_handle handle, usb_device_get_device_descriptor_struct_t *device_descriptor); usb_status_t usb_device_get_configuration_descriptor( usb_device_handle handle, usb_device_get_configuration_descriptor_struct_t *configuration_descriptor); - -/* Get device string descriptor request */ -usb_status_t usb_device_get_string_descriptor(usb_device_handle handle, - usb_device_get_string_descriptor_struct_t *string_descriptor); - -/* Get hid descriptor request */ -usb_status_t usb_device_get_hid_descriptor(usb_device_handle handle, - usb_device_get_hid_descriptor_struct_t *hid_descriptor); - -/* Get hid report descriptor request */ -usb_status_t usb_device_get_hid_report_descriptor(usb_device_handle handle, - usb_device_get_hid_report_descriptor_struct_t *hid_report_descriptor); - -/* Get hid physical descriptor request */ +usb_status_t usb_device_get_string_descriptor( + usb_device_handle handle, usb_device_get_string_descriptor_struct_t *string_descriptor); +usb_status_t usb_device_get_hid_descriptor( + usb_device_handle handle, usb_device_get_hid_descriptor_struct_t *hid_descriptor); +usb_status_t usb_device_get_hid_report_descriptor( + usb_device_handle handle, usb_device_get_hid_report_descriptor_struct_t *hid_report_descriptor); usb_status_t usb_device_get_hid_physical_descriptor( usb_device_handle handle, usb_device_get_hid_physical_descriptor_struct_t *hid_physical_descriptor); extern uint8_t g_device_descriptor[]; extern usb_language_list_t g_language_list; - extern usb_language_list_t *g_language_ptr; #endif