mirror of
https://github.com/hathach/tinyusb.git
synced 2025-04-16 23:43:23 +00:00
improve auto descriptor
This commit is contained in:
parent
9444d45af6
commit
6d96b12e27
@ -346,7 +346,7 @@ tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, u
|
||||
if (desc_itf->bInterfaceProtocol == HID_PROTOCOL_KEYBOARD)
|
||||
{
|
||||
p_hid = &_hidd_itf[ITF_IDX_BOOT_KBD];
|
||||
p_hid->desc_report = tud_desc_set.hid_report.boot_keyboard;
|
||||
p_hid->desc_report = usbd_desc_set->hid_report.boot_keyboard;
|
||||
p_hid->get_report_cb = tud_hid_keyboard_get_report_cb;
|
||||
p_hid->set_report_cb = tud_hid_keyboard_set_report_cb;
|
||||
|
||||
@ -362,7 +362,7 @@ tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, u
|
||||
if (desc_itf->bInterfaceProtocol == HID_PROTOCOL_MOUSE)
|
||||
{
|
||||
p_hid = &_hidd_itf[ITF_IDX_BOOT_MSE];
|
||||
p_hid->desc_report = tud_desc_set.hid_report.boot_mouse;
|
||||
p_hid->desc_report = usbd_desc_set->hid_report.boot_mouse;
|
||||
p_hid->get_report_cb = tud_hid_mouse_get_report_cb;
|
||||
p_hid->set_report_cb = tud_hid_mouse_set_report_cb;
|
||||
|
||||
@ -383,7 +383,7 @@ tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, u
|
||||
// TODO parse report ID for keyboard, mouse
|
||||
p_hid = &_hidd_itf[ITF_IDX_GENERIC];
|
||||
|
||||
p_hid->desc_report = tud_desc_set.hid_report.generic;
|
||||
p_hid->desc_report = usbd_desc_set->hid_report.generic;
|
||||
p_hid->get_report_cb = tud_hid_generic_get_report_cb;
|
||||
p_hid->set_report_cb = tud_hid_generic_set_report_cb;
|
||||
|
||||
|
@ -75,6 +75,15 @@ typedef struct {
|
||||
CFG_TUSB_ATTR_USBRAM CFG_TUSB_MEM_ALIGN uint8_t _usbd_ctrl_buf[CFG_TUD_CTRL_BUFSIZE];
|
||||
static usbd_device_t _usbd_dev;
|
||||
|
||||
|
||||
// Auto descriptor is enabled, descriptor set point to auto generated one
|
||||
#if CFG_TUD_DESC_AUTO
|
||||
extern tud_desc_set_t const _usbd_auto_desc_set;
|
||||
tud_desc_set_t const* usbd_desc_set = &_usbd_auto_desc_set;
|
||||
#else
|
||||
tud_desc_set_t const* usbd_desc_set = &tud_desc_set;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Class Driver
|
||||
//--------------------------------------------------------------------+
|
||||
@ -310,33 +319,6 @@ static void usbd_reset(uint8_t rhport)
|
||||
{
|
||||
if ( usbd_class_drivers[i].reset ) usbd_class_drivers[i].reset( rhport );
|
||||
}
|
||||
|
||||
#if CFG_TUD_DESC_AUTO
|
||||
extern tusb_desc_device_t const _desc_auto_device;
|
||||
extern uint8_t const * const _desc_auto_config;
|
||||
|
||||
tud_desc_set.device = (uint8_t const*) &_desc_auto_device;
|
||||
tud_desc_set.config = _desc_auto_config;
|
||||
|
||||
#if CFG_TUD_HID
|
||||
#if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
|
||||
extern uint8_t const _desc_auto_hid_boot_kbd_report[];
|
||||
tud_desc_set.hid_report.boot_keyboard = _desc_auto_hid_boot_kbd_report;
|
||||
#endif
|
||||
|
||||
#if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
|
||||
extern uint8_t const _desc_auto_hid_boot_mse_report[];
|
||||
tud_desc_set.hid_report.boot_mouse = _desc_auto_hid_boot_mse_report;
|
||||
#endif
|
||||
|
||||
#if TUD_OPT_HID_GENERIC
|
||||
extern uint8_t const _desc_auto_hid_generic_report[];
|
||||
tud_desc_set.hid_report.generic = _desc_auto_hid_generic_report;
|
||||
#endif
|
||||
#endif // CFG_TUD_HID
|
||||
|
||||
#endif // CFG_TUD_DESC_AUTO
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
@ -452,7 +434,7 @@ static tusb_error_t proc_set_config_req(uint8_t rhport, uint8_t config_number)
|
||||
_usbd_dev.config_num = config_number;
|
||||
|
||||
//------------- parse configuration & open drivers -------------//
|
||||
uint8_t const * desc_cfg = tud_desc_set.config;
|
||||
uint8_t const * desc_cfg = (uint8_t const *) usbd_desc_set->config;
|
||||
TU_ASSERT(desc_cfg != NULL, TUSB_ERROR_DESCRIPTOR_CORRUPTED);
|
||||
uint8_t const * p_desc = desc_cfg + sizeof(tusb_desc_configuration_t);
|
||||
uint16_t const cfg_len = ((tusb_desc_configuration_t*)desc_cfg)->wTotalLength;
|
||||
@ -511,16 +493,17 @@ static uint16_t get_descriptor(uint8_t rhport, tusb_control_request_t const * co
|
||||
switch(desc_type)
|
||||
{
|
||||
case TUSB_DESC_DEVICE:
|
||||
desc_data = tud_desc_set.device;
|
||||
desc_data = (uint8_t const *) usbd_desc_set->device;
|
||||
len = sizeof(tusb_desc_device_t);
|
||||
break;
|
||||
|
||||
case TUSB_DESC_CONFIGURATION:
|
||||
desc_data = tud_desc_set.config;
|
||||
desc_data = (uint8_t const *) usbd_desc_set->config;
|
||||
len = ((tusb_desc_configuration_t const*) desc_data)->wTotalLength;
|
||||
break;
|
||||
|
||||
case TUSB_DESC_STRING:
|
||||
// String Descriptor always uses the desc set from user
|
||||
if ( desc_index < tud_desc_set.string_count )
|
||||
{
|
||||
desc_data = tud_desc_set.string_arr[desc_index];
|
||||
|
@ -59,8 +59,8 @@
|
||||
|
||||
/// \brief Descriptor pointer collector to all the needed.
|
||||
typedef struct {
|
||||
uint8_t const * device; ///< pointer to device descriptor \ref tusb_desc_device_t
|
||||
uint8_t const * config; ///< pointer to the whole configuration descriptor, starting by \ref tusb_desc_configuration_t
|
||||
void const * device; ///< pointer to device descriptor \ref tusb_desc_device_t
|
||||
void const * config; ///< pointer to the whole configuration descriptor, starting by \ref tusb_desc_configuration_t
|
||||
|
||||
uint8_t const** string_arr; ///< a array of pointers to string descriptors
|
||||
uint16_t string_count;
|
||||
|
@ -49,8 +49,8 @@
|
||||
// Auto Description Default Configure & Validation
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
// IF HID Generic is required, it is multiple Report : Keyboard + Mouse + Gamepad + Joystick
|
||||
#define TUD_OPT_HID_GENERIC (CFG_TUD_HID && ((CFG_TUD_HID_KEYBOARD && !CFG_TUD_HID_KEYBOARD_BOOT) || \
|
||||
// If HID Generic interface is generated
|
||||
#define AUTO_DESC_HID_GENERIC (CFG_TUD_HID && ((CFG_TUD_HID_KEYBOARD && !CFG_TUD_HID_KEYBOARD_BOOT) || \
|
||||
(CFG_TUD_HID_MOUSE && !CFG_TUD_HID_MOUSE_BOOT)) )
|
||||
/*------------- VID/PID -------------*/
|
||||
#ifndef CFG_TUD_DESC_VID
|
||||
@ -67,7 +67,7 @@
|
||||
*/
|
||||
#define _PID_MAP(itf, n) ( (CFG_TUD_##itf) << (n) )
|
||||
#define CFG_TUD_DESC_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \
|
||||
_PID_MAP(HID_KEYBOARD, 2) | _PID_MAP(HID_MOUSE, 3) | (TUD_OPT_HID_GENERIC << 4) )
|
||||
_PID_MAP(HID_KEYBOARD, 2) | _PID_MAP(HID_MOUSE, 3) | (AUTO_DESC_HID_GENERIC << 4) )
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
@ -85,7 +85,7 @@
|
||||
#define ITF_NUM_HID_BOOT_MSE (ITF_NUM_HID_BOOT_KBD + CFG_TUD_HID_KEYBOARD_BOOT)
|
||||
#define ITF_NUM_HID_GEN (ITF_NUM_HID_BOOT_MSE + CFG_TUD_HID_MOUSE_BOOT)
|
||||
|
||||
#define ITF_TOTAL (ITF_NUM_HID_GEN + TUD_OPT_HID_GENERIC)
|
||||
#define ITF_TOTAL (ITF_NUM_HID_GEN + AUTO_DESC_HID_GENERIC)
|
||||
|
||||
/*------------- Endpoint Numbering & Size -------------*/
|
||||
#define _EP_IN(x) (0x80 | (x))
|
||||
@ -132,7 +132,7 @@ uint8_t const _desc_auto_hid_boot_mse_report[] = { HID_REPORT_DESC_MOUSE() };
|
||||
|
||||
|
||||
/*------------- Generic (composite) Descriptor -------------*/
|
||||
#if TUD_OPT_HID_GENERIC
|
||||
#if AUTO_DESC_HID_GENERIC
|
||||
|
||||
// Report ID: 0 if there is only 1 report
|
||||
// starting from 1 if there is multiple reports
|
||||
@ -255,7 +255,7 @@ typedef struct ATTR_PACKED
|
||||
} hid_mse_boot;
|
||||
#endif
|
||||
|
||||
#if TUD_OPT_HID_GENERIC
|
||||
#if AUTO_DESC_HID_GENERIC
|
||||
|
||||
struct ATTR_PACKED
|
||||
{
|
||||
@ -521,7 +521,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
|
||||
|
||||
#endif // boot mouse
|
||||
|
||||
#if TUD_OPT_HID_GENERIC
|
||||
#if AUTO_DESC_HID_GENERIC
|
||||
|
||||
//------------- HID Generic Multiple report -------------//
|
||||
.hid_generic =
|
||||
@ -566,6 +566,29 @@ desc_auto_cfg_t const _desc_auto_config_struct =
|
||||
|
||||
uint8_t const * const _desc_auto_config = (uint8_t const*) &_desc_auto_config_struct;
|
||||
|
||||
tud_desc_set_t const _usbd_auto_desc_set =
|
||||
{
|
||||
.device = &_desc_auto_device,
|
||||
.config = &_desc_auto_config_struct,
|
||||
|
||||
.hid_report =
|
||||
{
|
||||
#if AUTO_DESC_HID_GENERIC
|
||||
.generic = _desc_auto_hid_generic_report,
|
||||
#else
|
||||
.generic = NULL,
|
||||
#endif
|
||||
|
||||
#if CFG_TUD_HID_KEYBOARD && CFG_TUD_HID_KEYBOARD_BOOT
|
||||
.boot_keyboard = _desc_auto_hid_boot_kbd_report,
|
||||
#endif
|
||||
|
||||
#if CFG_TUD_HID_MOUSE && CFG_TUD_HID_MOUSE_BOOT
|
||||
.boot_mouse = _desc_auto_hid_boot_mse_report
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -48,6 +48,9 @@
|
||||
extern osal_semaphore_t _usbd_ctrl_sem;
|
||||
extern uint8_t _usbd_ctrl_buf[CFG_TUD_CTRL_BUFSIZE];
|
||||
|
||||
// Either point to tud_desc_set or usbd_auto_desc_set depending on CFG_TUD_DESC_AUTO
|
||||
extern tud_desc_set_t const* usbd_desc_set;
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// INTERNAL API for stack management
|
||||
//--------------------------------------------------------------------+
|
||||
|
@ -46,6 +46,9 @@
|
||||
#include "nrf_clock.h"
|
||||
|
||||
#include "device/dcd.h"
|
||||
|
||||
// TODO remove later
|
||||
#include "device/usbd.h"
|
||||
#include "device/usbd_pvt.h" // to use defer function helper
|
||||
|
||||
/*------------------------------------------------------------------*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user