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 [1]

[1] http://hsl.wz.cz/tasks.htm