diff options
| author | sakumisu <[email protected]> | 2022-02-12 18:49:06 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2022-02-12 18:49:06 +0800 |
| commit | ae5c69158770d6c67961636308d11fb9dcbcb759 (patch) | |
| tree | 58ce0df37fd814f68b078981c5f9cd7b0e519630 /class | |
| parent | e63b2ce974adcfa91929c8d6ffe6c21d6bc00602 (diff) | |
add static to embelish request handler
Diffstat (limited to 'class')
| -rw-r--r-- | class/audio/usbd_audio.c | 29 | ||||
| -rw-r--r-- | class/audio/usbd_audio.h | 14 | ||||
| -rw-r--r-- | class/cdc/usbd_cdc.c | 22 | ||||
| -rw-r--r-- | class/dfu/usbd_dfu.c | 6 | ||||
| -rw-r--r-- | class/hid/usbd_hid.c | 97 | ||||
| -rw-r--r-- | class/hid/usbd_hid.h | 18 | ||||
| -rw-r--r-- | class/hub/usbd_hub.c | 4 | ||||
| -rw-r--r-- | class/msc/usbd_msc.c | 2 |
8 files changed, 102 insertions, 90 deletions
diff --git a/class/audio/usbd_audio.c b/class/audio/usbd_audio.c index 6d0fdeb7..92c9a4c2 100644 --- a/class/audio/usbd_audio.c +++ b/class/audio/usbd_audio.c @@ -23,13 +23,19 @@ #include "usbd_core.h" #include "usbd_audio.h" -struct usbd_audio_control_info audio_control_info = { 0xdb00, 0x0000, 0x0100, 0xf600, 0 }; +struct usbd_audio_control_info { + uint16_t vol_min; + uint16_t vol_max; + uint16_t vol_res; + uint16_t vol_current; + uint8_t mute; +} audio_control_info = { 0xdb00, 0x0000, 0x0100, 0xf600, 0 }; -int audio_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) +static int audio_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) { USB_LOG_DBG("AUDIO Class request: " - "bRequest 0x%02x\r\n", - setup->bRequest); + "bRequest 0x%02x\r\n", + setup->bRequest); switch (setup->bRequest) { case AUDIO_REQUEST_SET_CUR: @@ -37,6 +43,7 @@ int audio_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, if (LO_BYTE(setup->wValue) == 0x01) { if (HI_BYTE(setup->wValue) == AUDIO_FU_CONTROL_MUTE) { memcpy(&audio_control_info.mute, *data, *len); + usbd_audio_set_mute(audio_control_info.mute); } else if (HI_BYTE(setup->wValue) == AUDIO_FU_CONTROL_VOLUME) { memcpy(&audio_control_info.vol_current, *data, *len); int vol; @@ -96,7 +103,7 @@ int audio_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, return 0; } -void audio_notify_handler(uint8_t event, void *arg) +static void audio_notify_handler(uint8_t event, void *arg) { switch (event) { case USBD_EVENT_RESET: @@ -104,10 +111,12 @@ void audio_notify_handler(uint8_t event, void *arg) break; case USBD_EVENT_SOF: + usbd_audio_sof_callback(); break; case USBD_EVENT_SET_INTERFACE: - usbd_audio_set_interface_callback(((uint8_t *)arg)[3]); + struct usb_interface_descriptor *intf = (struct usb_interface_descriptor *)arg; + usbd_audio_set_interface_callback(intf->bAlternateSetting); break; default: @@ -134,3 +143,11 @@ void usbd_audio_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) __WEAK void usbd_audio_set_volume(uint8_t vol) { } + +__WEAK void usbd_audio_set_mute(uint8_t mute) +{ +} + +__WEAK void usbd_audio_sof_callback(void) +{ +}
\ No newline at end of file diff --git a/class/audio/usbd_audio.h b/class/audio/usbd_audio.h index c1d4e8cd..5eb32a79 100644 --- a/class/audio/usbd_audio.h +++ b/class/audio/usbd_audio.h @@ -29,17 +29,13 @@ extern "C" { #endif -struct usbd_audio_control_info { - uint16_t vol_min; - uint16_t vol_max; - uint16_t vol_res; - uint16_t vol_current; - uint8_t mute; -}; - void usbd_audio_add_interface(usbd_class_t *devclass, usbd_interface_t *intf); -void usbd_audio_set_interface_callback(uint8_t value); + +void usbd_audio_set_mute(uint8_t mute); void usbd_audio_set_volume(uint8_t vol); +void usbd_audio_sof_callback(void); +void usbd_audio_set_interface_callback(uint8_t value); + #ifdef __cplusplus } #endif diff --git a/class/cdc/usbd_cdc.c b/class/cdc/usbd_cdc.c index 008ca671..707e6ac0 100644 --- a/class/cdc/usbd_cdc.c +++ b/class/cdc/usbd_cdc.c @@ -27,7 +27,7 @@ const char *stop_name[] = { "1", "1.5", "2" }; const char *parity_name[] = { "N", "O", "E", "M", "S" }; /* Device data structure */ -struct cdc_acm_cfg_private { +struct cdc_acm_cfg_priv { /* CDC ACM line coding properties. LE order */ struct cdc_line_coding line_coding; /* CDC ACM line state bitmap, DTE side */ @@ -144,16 +144,6 @@ static void cdc_notify_handler(uint8_t event, void *arg) } } -__WEAK void usbd_cdc_acm_set_line_coding(uint32_t baudrate, uint8_t databits, uint8_t parity, uint8_t stopbits) -{ -} -__WEAK void usbd_cdc_acm_set_dtr(bool dtr) -{ -} -__WEAK void usbd_cdc_acm_set_rts(bool rts) -{ -} - void usbd_cdc_add_acm_interface(usbd_class_t *devclass, usbd_interface_t *intf) { static usbd_class_t *last_class = NULL; @@ -169,3 +159,13 @@ void usbd_cdc_add_acm_interface(usbd_class_t *devclass, usbd_interface_t *intf) intf->notify_handler = cdc_notify_handler; usbd_class_add_interface(devclass, intf); } + +__WEAK void usbd_cdc_acm_set_line_coding(uint32_t baudrate, uint8_t databits, uint8_t parity, uint8_t stopbits) +{ +} +__WEAK void usbd_cdc_acm_set_dtr(bool dtr) +{ +} +__WEAK void usbd_cdc_acm_set_rts(bool rts) +{ +} diff --git a/class/dfu/usbd_dfu.c b/class/dfu/usbd_dfu.c index b5638fb0..88901ffe 100644 --- a/class/dfu/usbd_dfu.c +++ b/class/dfu/usbd_dfu.c @@ -24,11 +24,11 @@ #include "usbd_dfu.h" /* Device data structure */ -struct dfu_cfg_private { +struct dfu_cfg_priv { struct dfu_info info; } usbd_dfu_cfg; -int dfu_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) +static int dfu_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) { USB_LOG_WRN("DFU Class request: " "bRequest 0x%02x\r\n", @@ -57,7 +57,7 @@ int dfu_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, ui return 0; } -void dfu_notify_handler(uint8_t event, void *arg) +static void dfu_notify_handler(uint8_t event, void *arg) { switch (event) { case USBD_EVENT_RESET: diff --git a/class/hid/usbd_hid.c b/class/hid/usbd_hid.c index 7aa0f60d..dfbf8d0d 100644 --- a/class/hid/usbd_hid.c +++ b/class/hid/usbd_hid.c @@ -26,7 +26,7 @@ #define HID_STATE_IDLE 0 #define HID_STATE_BUSY 1 -struct usbd_hid_cfg_private { +struct usbd_hid_cfg_priv { const uint8_t *hid_descriptor; const uint8_t *hid_report_descriptor; uint32_t hid_report_descriptor_len; @@ -53,7 +53,7 @@ static void usbd_hid_reset(void) usb_slist_t *i; usb_slist_for_each(i, &usbd_hid_class_head) { - struct usbd_hid_cfg_private *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_private, list); + struct usbd_hid_cfg_priv *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_priv, list); hid_intf->hid_state = HID_STATE_IDLE; hid_intf->report = 0; hid_intf->idle_state = 0; @@ -61,22 +61,22 @@ static void usbd_hid_reset(void) } } -int hid_custom_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) +static int hid_custom_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) { USB_LOG_DBG("HID Custom request: " - "bRequest 0x%02x\r\n", - setup->bRequest); + "bRequest 0x%02x\r\n", + setup->bRequest); if (((setup->bmRequestType & USB_REQUEST_DIR_MASK) == USB_REQUEST_DIR_IN) && setup->bRequest == USB_REQUEST_GET_DESCRIPTOR) { uint8_t value = (uint8_t)(setup->wValue >> 8); uint8_t intf_num = (uint8_t)setup->wIndex; - struct usbd_hid_cfg_private *current_hid_intf = NULL; + struct usbd_hid_cfg_priv *current_hid_intf = NULL; usb_slist_t *i; usb_slist_for_each(i, &usbd_hid_class_head) { - struct usbd_hid_cfg_private *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_private, list); + struct usbd_hid_cfg_priv *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_priv, list); if (hid_intf->current_intf_num == intf_num) { current_hid_intf = hid_intf; @@ -116,17 +116,17 @@ int hid_custom_request_handler(struct usb_setup_packet *setup, uint8_t **data, u return -1; } -int hid_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) +static int hid_class_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) { USB_LOG_DBG("HID Class request: " - "bRequest 0x%02x\r\n", - setup->bRequest); + "bRequest 0x%02x\r\n", + setup->bRequest); - struct usbd_hid_cfg_private *current_hid_intf = NULL; + struct usbd_hid_cfg_priv *current_hid_intf = NULL; usb_slist_t *i; usb_slist_for_each(i, &usbd_hid_class_head) { - struct usbd_hid_cfg_private *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_private, list); + struct usbd_hid_cfg_priv *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_priv, list); uint8_t intf_num = (uint8_t)setup->wIndex; if (hid_intf->current_intf_num == intf_num) { current_hid_intf = hid_intf; @@ -199,18 +199,24 @@ static void hid_notify_handler(uint8_t event, void *arg) } } -void usbd_hid_reset_state(void) +void usbd_hid_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) { - // usbd_hid_cfg.hid_state = HID_STATE_IDLE; -} + static usbd_class_t *last_class = NULL; + static uint8_t hid_num = 0; + if (last_class != devclass) { + last_class = devclass; + usbd_class_register(devclass); + } -void usbd_hid_send_report(uint8_t ep, uint8_t *data, uint8_t len) -{ - // if(usbd_hid_cfg.hid_state == HID_STATE_IDLE) - // { - // usbd_hid_cfg.hid_state = HID_STATE_BUSY; - // usbd_ep_write(ep, data, len, NULL); - // } + intf->class_handler = hid_class_request_handler; + intf->custom_handler = hid_custom_request_handler; + intf->vendor_handler = NULL; + intf->notify_handler = hid_notify_handler; + usbd_class_add_interface(devclass, intf); + + usbd_hid_cfg[hid_num].current_intf_num = intf->intf_num; + usb_slist_add_tail(&usbd_hid_class_head, &usbd_hid_cfg[hid_num].list); + hid_num++; } void usbd_hid_descriptor_register(uint8_t intf_num, const uint8_t *desc) @@ -223,7 +229,7 @@ void usbd_hid_report_descriptor_register(uint8_t intf_num, const uint8_t *desc, usb_slist_t *i; usb_slist_for_each(i, &usbd_hid_class_head) { - struct usbd_hid_cfg_private *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_private, list); + struct usbd_hid_cfg_priv *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_priv, list); if (hid_intf->current_intf_num == intf_num) { hid_intf->hid_report_descriptor = desc; @@ -232,20 +238,19 @@ void usbd_hid_report_descriptor_register(uint8_t intf_num, const uint8_t *desc, } } } -// clang-format off -void usbd_hid_set_request_callback( uint8_t intf_num, - uint8_t (*get_report_callback)(uint8_t report_id, uint8_t report_type), - void (*set_report_callback)(uint8_t report_id, uint8_t report_type, uint8_t *report, uint8_t report_len), - uint8_t (*get_idle_callback)(uint8_t report_id), - void (*set_idle_callback)(uint8_t report_id, uint8_t duration), - void (*set_protocol_callback)(uint8_t protocol), - uint8_t (*get_protocol_callback)(void)) -// clang-format on + +void usbd_hid_set_request_callback(uint8_t intf_num, + uint8_t (*get_report_callback)(uint8_t report_id, uint8_t report_type), + void (*set_report_callback)(uint8_t report_id, uint8_t report_type, uint8_t *report, uint8_t report_len), + uint8_t (*get_idle_callback)(uint8_t report_id), + void (*set_idle_callback)(uint8_t report_id, uint8_t duration), + void (*set_protocol_callback)(uint8_t protocol), + uint8_t (*get_protocol_callback)(void)) { usb_slist_t *i; usb_slist_for_each(i, &usbd_hid_class_head) { - struct usbd_hid_cfg_private *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_private, list); + struct usbd_hid_cfg_priv *hid_intf = usb_slist_entry(i, struct usbd_hid_cfg_priv, list); if (hid_intf->current_intf_num == intf_num) { if (get_report_callback) @@ -265,22 +270,16 @@ void usbd_hid_set_request_callback( uint8_t intf_num, } } -void usbd_hid_add_interface(usbd_class_t *devclass, usbd_interface_t *intf) +void usbd_hid_reset_state(void) { - static usbd_class_t *last_class = NULL; - static uint8_t hid_num = 0; - if (last_class != devclass) { - last_class = devclass; - usbd_class_register(devclass); - } - - intf->class_handler = hid_class_request_handler; - intf->custom_handler = hid_custom_request_handler; - intf->vendor_handler = NULL; - intf->notify_handler = hid_notify_handler; - usbd_class_add_interface(devclass, intf); + // usbd_hid_cfg.hid_state = HID_STATE_IDLE; +} - usbd_hid_cfg[hid_num].current_intf_num = intf->intf_num; - usb_slist_add_tail(&usbd_hid_class_head, &usbd_hid_cfg[hid_num].list); - hid_num++; +void usbd_hid_send_report(uint8_t ep, uint8_t *data, uint8_t len) +{ + // if(usbd_hid_cfg.hid_state == HID_STATE_IDLE) + // { + // usbd_hid_cfg.hid_state = HID_STATE_BUSY; + // usbd_ep_write(ep, data, len, NULL); + // } } diff --git a/class/hid/usbd_hid.h b/class/hid/usbd_hid.h index 1259e4ff..05bb8611 100644 --- a/class/hid/usbd_hid.h +++ b/class/hid/usbd_hid.h @@ -34,15 +34,15 @@ void usbd_hid_report_descriptor_register(uint8_t intf_num, const uint8_t *desc, void usbd_hid_add_interface(usbd_class_t *devclass, usbd_interface_t *intf); void usbd_hid_reset_state(void); void usbd_hid_send_report(uint8_t ep, uint8_t *data, uint8_t len); -// clang-format off -void usbd_hid_set_request_callback( uint8_t intf_num, - uint8_t (*get_report_callback)(uint8_t report_id, uint8_t report_type), - void (*set_report_callback)(uint8_t report_id, uint8_t report_type, uint8_t *report, uint8_t report_len), - uint8_t (*get_idle_callback)(uint8_t report_id), - void (*set_idle_callback)(uint8_t report_id, uint8_t duration), - void (*set_protocol_callback)(uint8_t protocol), - uint8_t (*get_protocol_callback)(void)); -// clang-format on + +void usbd_hid_set_request_callback(uint8_t intf_num, + uint8_t (*get_report_callback)(uint8_t report_id, uint8_t report_type), + void (*set_report_callback)(uint8_t report_id, uint8_t report_type, uint8_t *report, uint8_t report_len), + uint8_t (*get_idle_callback)(uint8_t report_id), + void (*set_idle_callback)(uint8_t report_id, uint8_t duration), + void (*set_protocol_callback)(uint8_t protocol), + uint8_t (*get_protocol_callback)(void)); + #ifdef __cplusplus } #endif diff --git a/class/hub/usbd_hub.c b/class/hub/usbd_hub.c index a3c1d4f4..99399f69 100644 --- a/class/hub/usbd_hub.c +++ b/class/hub/usbd_hub.c @@ -34,7 +34,7 @@ static struct usb_hub_descriptor hub_desc = { .PortPwrCtrlMask = 0xff }; -int hub_custom_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) +static int hub_custom_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) { USBD_LOG_DBG("HUB Class Custom request: " "bRequest 0x%02x\r\n", @@ -78,7 +78,7 @@ int hub_custom_request_handler(struct usb_setup_packet *setup, uint8_t **data, u return -1; } -void hub_notify_handler(uint8_t event, void *arg) +static void hub_notify_handler(uint8_t event, void *arg) { switch (event) { case USBD_EVENT_RESET: diff --git a/class/msc/usbd_msc.c b/class/msc/usbd_msc.c index 50dd5d79..57781e4b 100644 --- a/class/msc/usbd_msc.c +++ b/class/msc/usbd_msc.c @@ -47,7 +47,7 @@ enum Stage { }; /* Device data structure */ -struct usbd_msc_cfg_private { +struct usbd_msc_cfg_priv { /* state of the bulk-only state machine */ enum Stage stage; struct CBW cbw; |
