)]}'
{
  "commit": "f75b247304397a1bd8bd60867c947c5be0f72743",
  "tree": "1f633669512b096d21899996881d1625405439de",
  "parents": [
    "7530f13031c8e316131fe6272f7905db1245cfd9"
  ],
  "author": {
    "name": "hathach",
    "email": "thach@tinyusb.org",
    "time": "Fri Aug 14 11:29:37 2026 +0700"
  },
  "committer": {
    "name": "hathach",
    "email": "thach@tinyusb.org",
    "time": "Mon Aug 17 12:17:00 2026 +0700"
  },
  "message": "portable/nrf5x: complete zero-length bulk OUT transfers\n\nA zero-length OUT read (e.g. the MTP driver\u0027s read for the host\u0027s\nterminating data ZLP) could never complete when the ZLP\u0027s EPDATA\narrived after the read was armed: actual_len \u003c total_len is always\nfalse for total_len \u003d\u003d 0, so the handler only set data_received and the\narmed transfer hung forever, wedging both bulk endpoints (host sees\npure NAK; EP0 stays alive). Run the 0-byte DMA in that case to drain\nthe endpoint and complete the transfer, matching what the arm path\nalready does when the ZLP arrives first.\n\nFound via usbmon on the HIL rig: device/mtp on feather_nrf52840_express\nwedged after SendObject\u0027s terminating ZLP whenever the class armed the\nread before the host\u0027s (NAK-delayed) ZLP retry landed - deterministic\nunder CI load, which is why PR CI only passed this test on a re-flash\nretry (21.4 s vs the normal 2.2 s).\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5170e064528c3fa344063f5878b636ea89038115",
      "old_mode": 33188,
      "old_path": "src/portable/nordic/nrf5x/dcd_nrf5x.c",
      "new_id": "5c5f8ba8dbd7ba5cf0631c13dbdcb37d09f42e14",
      "new_mode": 33188,
      "new_path": "src/portable/nordic/nrf5x/dcd_nrf5x.c"
    }
  ]
}
