Thu Nov 6 23:22:51 EST 2014
libopencm3 USB IN >64 bytes
To make a large transfer, a callback is necessary.
The cdcacm example doesn't have one:
usbd_ep_setup(usbd_dev, 0x01, USB_ENDPOINT_ATTR_BULK, 64, cdcacm_data_rx_cb);
usbd_ep_setup(usbd_dev, 0x82, USB_ENDPOINT_ATTR_BULK, 64, NULL);
usbd_ep_setup(usbd_dev, 0x83, USB_ENDPOINT_ATTR_INTERRUPT, 16, NULL);
For IN enpoints this gets called after transfer is complete.
Suspending output is a bit more painful than suspending input. So the
solution is to either throw memory at the problem: generate output in
memory and have a simple state machine export it, possibly doing some
postprocessing (like RSP escapes).
Alternatively, use a task that can be suspended. Some alternatives:
- RTOS tasks
- main program + interrupt state machines
- cooperative multitasking