void CDC_Send(const uint8_t *data, uint32_t data_size)
{
// block until all bytes be sent
while (ringbuff_size(g_tx_buffer) > 0);
// puts the data into ring buffer
ringbuff_write(g_tx_buffer, data, data_size);
// forces the first send
CDC_BulkIn();
}
void CDC_BulkIn(void)
{
uint8_t buffer[USB_CDC_BUFSIZE];
uint32_t bytes_to_write;
if (!g_cdc_initialized) return;
memset(buffer, 0, USB_CDC_BUFSIZE);
bytes_to_write = ringbuff_read(g_tx_buffer, buffer, USB_CDC_BUFSIZE);
if (bytes_to_write > 0)
{
USB_WriteEP(CDC_DEP_IN, buffer, bytes_to_write);
}
}
|