dakejahl opened a new pull request, #4: URL: https://github.com/apache/nuttx-ntfc-testing/pull/4
## Summary Adds `driver/usb`, a check that a NuttX USB CDC/ACM link survives Linux USB runtime suspend. Moved here from https://github.com/apache/nuttx-ntfc/pull/14, which put it in the framework repository; test cases belong here. ## Problem A USB device driver that reports `CLASS_SUSPEND` but never `CLASS_RESUME` leaves `cdcacm_suspend()`'s `uart_connected(&priv->serdev, false)` latched, after which `serial.c` refuses every board-side `open()` and `write()` on the CDC port with `-ENOTCONN` for the rest of the boot. The device stays enumerated throughout and the host is perfectly happy, so nothing about the symptom points at suspend. Linux hosts reach that state unprompted — with `power/control=auto` and the usual `autosuspend_delay_ms=2000`, closing the tty is enough — which is why this reads as an intermittent USB wedge rather than a deterministic bug, and why it needs a check that forces the transition instead of waiting for it. ## Solution Each cycle re-arms runtime PM and waits for `runtime_status` to actually reach `suspended` before judging anything: a resumed device will not idle out again on its own until PM is toggled, so a naive loop measures nothing after the first cycle. Opening the port is what resumes the device. Bytes are counted both over the read window and over its trailing second. The tail count is what separates a working link from one that only flushed its stale CDC TX buffer on resume — on STM32H7 that stale buffer is a convincing 12 kB. The board is then asked over the NTFC console whether its own CDC port is writable again. The test skips rather than fails whenever the host cannot be brought into a measurable state: not Linux, no passwordless `sudo` for the two sysfs power attributes, no CDC/ACM port, the port already held open, or a device that never actually suspended. Wiring comes from the environment — `NTFC_USB_CDC_DEVICE` is the host path of the port under test, defaulting to the only CDC/ACM port present, and `NTFC_USB_CDC_PATH` is the same port as the board names it. The port under test must not be the NTFC console, since an open port pins runtime PM. Measurements below are from the standalone form of this check against an ARK FMU v6X (STM32H743, `CONFIG_STM32H7_OTGFS=y`, `CONFIG_CDCACM=y`), before the driver fix in https://github.com/apache/nuttx/pull/19936: ``` [1] suspended=True read=12179 tail=0 board-side open failed: -ENOTCONN [2] suspended=True read=0 tail=0 board-side open failed: -ENOTCONN FAIL: the link died after suspend and did not come back. ``` and after: ``` [1] suspended=True read=40898 tail=23316 board-side open ok [2] suspended=True read=42441 tail=22020 board-side open ok PASS: the link recovered from every suspend. ``` The host-side measurement is unchanged here; the board-side probe now goes through `pytest.product.sendCommand` instead of a second serial port. I have no v6X on the bench at the moment, so this pytest form itself has not yet been run against hardware — happy to re-run and post output once it is back. `black`, `isort` and `flake8` are clean. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
