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); } } |