Sends
data through a USB endpoint.
Sets up the transfer descriptor, writes one or two
data payloads (depending on the number of FIFO bank for the endpoint) and then starts the actual transfer. The operation is complete when all the
data has been sent.
If the size of the buffer is greater than the size of the endpoint (or twice the size if the endpoint has two FIFO banks), then the buffer must be kept allocated until the transfer is finished*. This means that it is not possible to declare it on the stack (i.e. as a local variable of a function which returns after starting a transfer).