Possibly not a NuttX-specific question.

Short version: how should an App go about determining USB connect/disconnect (or some higher level USB device status changes that signifies a successful, perhaps specified-type of connection to a host PC) in a portable way?

Long version (TL;DR ?): the processor on my board has USBDEV and USBHOST support that is intended for traditional and separate USB 2.0 connectivity. I have wrapped a USB-C controller (FUSB302) around it so I can use a single (USB-C) connector as, essentially, an OTG connection. This works and auto-detects whatever is connected as needing host or device support and switches everything needed. Works a treat!

The USB-device usage is as a USB composite device (right now), one element of which is CDC-NCM, the other MSD. This fundamentally works but I have found that:

 * The DHCPD daemon can't be run *before* the first connection to the
   host otherwise it stops the CDC-NCM connection being established at
   all. It might be a bug in the (example app) daemon but the quick fix
   would be to start/stop it on USB connect/disconnect.
 * I want to run a (new) mDNS daemon on connection to advertise
   services, so I need to know when the USB is connected/disconnected
   and the CDC-NCM connection is valid.

So far I have considered:

1. Moving my USB-C/FUSB302 auto switching worker function from being a
   board-level function to an app-level function, but it doesn't know
   what type of device connection has been made, nor if it was
   ultimately successful. Doesn't sound right.
2. USBMONITOR has plenty reporting but it is a bit bewildering, is
   intended for DEBUG as I understand it, goes to syslog, and, anyway,
   the CDC-NCM code has no useful calls to USBTRACE (although I could
   add some.
3. Write my own USBMONITOR task that makes use of the USBTRACE calls
   littered throughout the code...if only I could fathom the correct
   TRACE value (and then add that to CDC-NCM!). And probably not
   portable as it is NuttX-thing?

Since this is *surely* something others have needed to do in the NuttX/Linux/POSIX world, but my web trawling has so far failed to turn up anything, I am reaching out as ever to my learned and experienced e-friends here :-)

Thank you for reading :-)

TimH

Reply via email to