Hello everyone,

I am attempting to create an embedded device for a school project where I need 
to send some text data over USB on
power-up. It is a constant stream of serial data.

For this, I am setting my own application as the entry point instead of NSH, 
which requires me to instantiate the USB
output myself.

I have copied the USB console setup from NSH into my application, and I can see 
the USB device showing up with `dmesg`
so I know it is successfully started. However, none of my `write()` calls to 
the file descriptor or `fprintf` calls are
working correctly.

The code for the USB setup is:
```c
void board_late_initialize(void) {

    /* Initialize the USB serial driver */
    struct boardioc_usbdev_ctrl_s ctrl;
    FAR void *handle;
    int ret;

#if defined(CONFIG_CDCACM)

    ctrl.usbdev = BOARDIOC_USBDEV_CDCACM;
    ctrl.action = BOARDIOC_USBDEV_CONNECT;
    ctrl.instance = 0;
    ctrl.handle = &handle;

    ret = boardctl(BOARDIOC_USBDEV_CONTROL, (uintptr_t)&ctrl);
    UNUSED(ret); /* Eliminate warning if not used */
    DEBUGASSERT(ret == OK);
#endif
}
```

Then I am writing to the USB device like so:

```c
#define USB_CONSOLE "/dev/ttyACM0"
do {
    console = open(USB_CONSOLE, O_RDWR);

    /* ENOTCONN means that the USB device is not yet connected, so sleep.
     * Anything else is bad.
     */

    DEBUGASSERT(errno == ENOTCONN);
    sleep(1);

} while (console < 0);

/* Make USB stdout, stderr, stdin */
dup2(console, 0);
dup2(console, 1);
dup2(console, 2);

printf("A=%lf,B=%lf,G=%lf\n", pos.x, pos.y, pos.z);
```

I have tried using `fprintf` on the file descriptor returned by `open`, and 
also using `write` directly to no avail. The
console just stays blank on my host computer.

Any ideas what else I could try?

Thanks,
Matteo

Attachment: signature.asc
Description: PGP signature

Reply via email to