)]}'
{
  "commit": "282d46e68d9100af0dfdcc01e7689bb63bbf8419",
  "tree": "d81e3b5b1a332e16de5375f3a18269ce2f920d74",
  "parents": [
    "53fef28335181fd6b4c8fb2ac65fdacf44659492"
  ],
  "author": {
    "name": "ice458",
    "email": "85405449+ice458@users.noreply.github.com",
    "time": "Fri Aug 14 16:00:06 2026 +0900"
  },
  "committer": {
    "name": "ice458",
    "email": "85405449+ice458@users.noreply.github.com",
    "time": "Fri Aug 14 16:00:06 2026 +0900"
  },
  "message": "usbtmc: re-arm (or stall) the bulk-OUT endpoint after a USB488 TRIGGER\n\nA single USB488 TRIGGER message left the bulk-OUT endpoint un-armed, so the\nhost\u0027s next bulk-OUT transfer timed out. The trigger itself succeeded\nsilently, so the failure surfaced on a later, unrelated command; only a\nUSBTMC device clear recovered it. The bundled examples/device/usbtmc\nreproduced this as shipped.\n\nEvery other branch of the STATE_IDLE dispatch in usbtmcd_xfer_cb() leaves\nthe endpoint in a defined state: it either transitions out of STATE_IDLE so\na later tud_usbtmc_start_bus_read() can re-arm it, or it stalls and lets the\nCLEAR_FEATURE(ENDPOINT_HALT) handler recover it. USBTMC_MSGID_USB488_TRIGGER\ndid neither, and because the state stayed STATE_IDLE, even an application\nfollowing the contract documented in usbtmc_device.h got a silent no-op from\ntud_usbtmc_start_bus_read().\n\nTransition to STATE_NAK so the re-arm can take effect, and stall the\nendpoint when trigger is unsupported or the application callback rejects it,\nmatching the existing handling for messages the driver cannot process. The\ncallback result is deliberately not wrapped in TU_VERIFY(), which would\nreturn before the stall/re-arm and reintroduce the same hang.\n\nSince the driver now re-arms after a trigger, drop tud_usbtmc_msg_trigger_cb\nfrom the list of callbacks after which the application must do so.\n\nFixes #3821\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "07190d89fcb6d5ccad476f956c01d5203b3ffa60",
      "old_mode": 33188,
      "old_path": "src/class/usbtmc/usbtmc_device.c",
      "new_id": "e248341acb7afd750ac269e118381cb7a3c5cd92",
      "new_mode": 33188,
      "new_path": "src/class/usbtmc/usbtmc_device.c"
    },
    {
      "type": "modify",
      "old_id": "3dc70087648f4078ec5afd9fd3c76185288d5d30",
      "old_mode": 33188,
      "old_path": "src/class/usbtmc/usbtmc_device.h",
      "new_id": "efda84f166b07801e912acb0e57c86a7b49d1daf",
      "new_mode": 33188,
      "new_path": "src/class/usbtmc/usbtmc_device.h"
    }
  ]
}
