)]}'
{
  "commit": "f748c01c4fa1104168a0f3317c37e6586d0027f7",
  "tree": "90ddab4dcdc8917c90664ba06e55d79e61b0c71a",
  "parents": [
    "42db982e7c6e8ee7d2f80d15a93a7092d3b708c9"
  ],
  "author": {
    "name": "hathach",
    "email": "thach@tinyusb.org",
    "time": "Fri Aug 28 00:36:38 2026 +0700"
  },
  "committer": {
    "name": "hathach",
    "email": "thach@tinyusb.org",
    "time": "Fri Aug 28 00:36:38 2026 +0700"
  },
  "message": "usbh: add enumeration control transfer timeout\n\nA device that ACKs SETUP but never completes the following stage (e.g. NAKs\nthe EP0 IN data stage forever) froze the control state machine: enumeration\nnever finishes and hub interrupt polling never resumes, so one dead device\nblocks all further enumeration on the bus. Observed with a degraded USB disk\nbehind a hub on a rp2040 PIO-USB host: wire capture shows SETUP ACKed then\nan endless IN/NAK storm with no completion event.\n\nArm a watchdog (CFG_TUH_ENUM_TIMEOUT_MS, default 5s to match Linux\u0027s\nUSB_CTRL_GET_TIMEOUT, 0 disables) on enumeration-owned control transfers\nusing the existing call_after slot, which already wakes a blocked host task.\nOn expiry abort the transfer at hcd level and complete it as FAILED so the\nnormal enumeration failure path frees dev0 and resumes hub polling.\nNon-enumeration control transfers keep their current behavior.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "44819b016efca6b882c5c91f387b5e6a25ccbadf",
      "old_mode": 33188,
      "old_path": "src/host/usbh.c",
      "new_id": "dd85b17593f808eb8738eb53f692b2f7a3044bff",
      "new_mode": 33188,
      "new_path": "src/host/usbh.c"
    },
    {
      "type": "modify",
      "old_id": "1eb23fb00b5936089409d974c3be4a0a4e689b96",
      "old_mode": 33188,
      "old_path": "src/tusb_option.h",
      "new_id": "8b3a41a755d3363e383b370fe86a528556c21aed",
      "new_mode": 33188,
      "new_path": "src/tusb_option.h"
    }
  ]
}
