Skip to content

Add CFG_TUH_HID_SET_PROTOCOL_ON_ENUM configuration option#3558

Merged
hathach merged 2 commits intomasterfrom
hid-host-set-protocol-skipable
Mar 18, 2026
Merged

Add CFG_TUH_HID_SET_PROTOCOL_ON_ENUM configuration option#3558
hathach merged 2 commits intomasterfrom
hid-host-set-protocol-skipable

Conversation

@hathach
Copy link
Copy Markdown
Owner

@hathach hathach commented Mar 17, 2026

### Changes
- Introduced a new configuration option `CFG_TUH_HID_SET_PROTOCOL_ON_ENUM`.
- This option allows skipping the `set_protocol` step during enumeration.
- The default value for this option is set to `1`.

Copilot AI review requested due to automatic review settings March 17, 2026 08:50
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 28e14abdc7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +635 to +640
#if CFG_TUH_HID_SET_PROTOCOL_ON_ENUM
hidh_set_protocol(daddr, p_hid->itf_num, _hidh_default_protocol, process_set_config, CONFIG_GET_REPORT_DESC);
break;
#else
TU_ATTR_FALLTHROUGH;
#endif
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Sync protocol_mode when skipping SET_PROTOCOL on enum

With CFG_TUH_HID_SET_PROTOCOL_ON_ENUM set to 0, this branch falls through to CONFIG_GET_REPORT_DESC without sending SET_PROTOCOL, but the interface state still keeps the preloaded _hidh_default_protocol value (default Boot). For Boot-subclass devices this causes tuh_hid_get_protocol() to report Boot while the device is actually still in Report protocol, so applications that rely on the reported mode can take the wrong path.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new HID host configuration option to control whether SET_PROTOCOL is issued during enumeration, allowing users to skip that step for devices that misbehave.

Changes:

  • Introduced CFG_TUH_HID_SET_PROTOCOL_ON_ENUM (default 1) in the HID host public header.
  • Updated HID host enumeration state machine to optionally skip SET_PROTOCOL and fall through to report descriptor retrieval.
  • Minor internal renames/cleanup (_hidh_set_* -> hidh_set_*) and small comment/formatting tweaks.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/class/hid/hid_host.h Defines the new CFG_TUH_HID_SET_PROTOCOL_ON_ENUM configuration macro (default enabled).
src/class/hid/hid_host.c Gates the enumeration-time SET_PROTOCOL step behind the new macro (with fallthrough to continue enumeration).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

#if CFG_TUH_HID_SET_PROTOCOL_ON_ENUM
hidh_set_protocol(daddr, p_hid->itf_num, _hidh_default_protocol, process_set_config, CONFIG_GET_REPORT_DESC);
break;
#else
Comment on lines +635 to +640
#if CFG_TUH_HID_SET_PROTOCOL_ON_ENUM
hidh_set_protocol(daddr, p_hid->itf_num, _hidh_default_protocol, process_set_config, CONFIG_GET_REPORT_DESC);
break;
#else
TU_ATTR_FALLTHROUGH;
#endif
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 17, 2026

Size Difference Report

Because TinyUSB code size varies by port and configuration, the metrics below represent the averaged totals across all example builds.

Note: If there is no change, only one value is shown.

Changes >1% in size

file .text .bss size % diff
hid_host.c 1206 ➙ 1240 (+34) 1251 2457 ➙ 2491 (+34) +1.4%
TOTAL 1206 ➙ 1240 (+34) 1251 2457 ➙ 2491 (+34) +1.4%

Changes <1% in size

No entries.

No changes
file .text .rodata .data .bss size % diff
audio_device.c 2896 0 1260 1623 4514 +0.0%
cdc_device.c 1252 16 1106 682 1932 +0.0%
cdc_host.c 6617 487 15 1498 8327 +0.0%
dcd_ch32_usbfs.c 1473 0 0 2444 3917 +0.0%
dcd_ch32_usbhs.c 1469 0 0 448 1917 +0.0%
dcd_ci_fs.c 1925 0 0 1290 3215 +0.0%
dcd_ci_hs.c 1759 0 0 1344 2538 +0.0%
dcd_da146xx.c 3067 0 0 144 3211 +0.0%
dcd_dwc2.c 4176 25 0 265 4465 +0.0%
dcd_eptri.c 2271 0 0 259 2530 +0.0%
dcd_ft9xx.c 3276 0 0 172 3448 +0.0%
dcd_khci.c 1953 0 0 1290 3243 +0.0%
dcd_lpc17_40.c 1474 0 0 648 1798 +0.0%
dcd_lpc_ip3511.c 1463 0 0 264 1683 +0.0%
dcd_mm32f327x_otg.c 1478 0 0 1290 2768 +0.0%
dcd_msp430x5xx.c 1798 0 0 176 1974 +0.0%
dcd_musb.c 2445 0 0 160 2605 +0.0%
dcd_nrf5x.c 2918 0 0 292 3210 +0.0%
dcd_nuc120.c 1094 0 0 78 1172 +0.0%
dcd_nuc121.c 1168 0 0 101 1269 +0.0%
dcd_nuc505.c 0 0 1531 157 1688 +0.0%
dcd_rp2040.c 858 20 604 655 2137 +0.0%
dcd_rusb2.c 2919 0 0 156 3075 +0.0%
dcd_samd.c 1034 0 0 266 1300 +0.0%
dcd_samg.c 1320 0 0 72 1392 +0.0%
dcd_stm32_fsdev.c 2558 0 0 291 2849 +0.0%
dfu_device.c 777 28 712 140 916 +0.0%
dfu_rt_device.c 157 0 134 0 157 +0.0%
dwc2_common.c 602 30 0 0 618 +0.0%
ecm_rndis_device.c 1037 0 1 2858 3896 +0.0%
ehci.c 2763 0 0 6043 7597 +0.0%
fsdev_common.c 180 0 0 0 180 +0.0%
hcd_ch32_usbfs.c 2484 0 0 498 2982 +0.0%
hcd_ci_hs.c 184 0 0 0 184 +0.0%
hcd_dwc2.c 4994 33 1 513 5540 +0.0%
hcd_khci.c 2442 0 0 449 2891 +0.0%
hcd_musb.c 3073 0 0 157 3230 +0.0%
hcd_pio_usb.c 262 0 240 0 502 +0.0%
hcd_rp2040.c 976 73 416 384 1849 +0.0%
hcd_rusb2.c 2923 0 0 245 3168 +0.0%
hcd_samd.c 2220 0 0 324 2544 +0.0%
hcd_stm32_fsdev.c 3287 0 1 420 3708 +0.0%
hid_device.c 1125 44 997 119 1244 +0.0%
hub.c 1384 8 8 30 1418 +0.0%
midi_device.c 1150 0 1007 621 1770 +0.0%
midi_host.c 1341 7 7 3635 4979 +0.0%
msc_device.c 2525 108 2286 547 3071 +0.0%
msc_host.c 1587 0 0 394 1982 +0.0%
mtp_device.c 1696 22 735 588 2292 +0.0%
ncm_device.c 1538 28 718 5843 7395 +0.0%
ohci.c 1940 0 0 2414 4353 +0.0%
printer_device.c 830 0 706 564 1392 +0.0%
rp2040_usb.c 172 75 717 4 968 +0.0%
rusb2_common.c 160 0 16 0 176 +0.0%
tusb.c 451 0 383 3 453 +0.0%
tusb_fifo.c 842 0 480 0 837 +0.0%
typec_stm32.c 820 8 2 12 842 +0.0%
usbc.c 420 2 20 166 608 +0.0%
usbd.c 3225 57 88 275 3565 +0.0%
usbd_control.c 538 0 484 79 616 +0.0%
usbh.c 4649 55 99 961 5731 +0.0%
usbtmc_device.c 2196 24 68 316 2544 +0.0%
vendor_device.c 641 0 534 563 1202 +0.0%
video_device.c 4443 5 1235 479 4914 +0.0%
TOTAL 116695 1155 16611 45709 164491 +0.0%

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 17, 2026

MemBrowse Memory Report

Top 10 targets by memory change (%) (out of 2156 targets) View Project Dashboard →

target .text .rodata .data .bss total % diff
lpcxpresso1769/hid_controller 14,132 → 14,168 (+36) 14,140 → 14,176 (+36) +0.3%
ch32v203c_r0_1v0/hid_controller 18,144 → 18,188 (+44) 18,396 → 18,440 (+44) +0.2%
ea4088_quickstart/hid_controller 14,244 → 14,276 (+32) 14,260 → 14,292 (+32) +0.2%
metro_m4_express/hid_controller 14,892 → 14,924 (+32) 14,900 → 14,932 (+32) +0.2%
lpcxpresso18s37/hid_controller 16,672 → 16,708 (+36) 17,110 → 17,146 (+36) +0.2%
portenta_c33/hid_controller 17,216 → 17,252 (+36) 17,216 → 17,252 (+36) +0.2%
metro_m7_1011/hid_controller 19,312 → 19,348 (+36) 19,320 → 19,356 (+36) +0.2%
double_m33_express/hid_controller 19,488 → 19,524 (+36) 19,496 → 19,532 (+36) +0.2%
ea4357/hid_controller 17,920 → 17,952 (+32) 18,366 → 18,398 (+32) +0.2%
msp_exp432e401y/hid_controller 18,820 → 18,852 (+32) 18,840 → 18,872 (+32) +0.2%

@hathach hathach merged commit 8f7f286 into master Mar 18, 2026
408 of 411 checks passed
@hathach hathach deleted the hid-host-set-protocol-skipable branch March 18, 2026 07:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants