30#include "usbd_cdc_if.h"
44 uint8_t *buf = (uint8_t *)(uintptr_t)data;
47 uint16_t retries = 0u;
53 return (result == USBD_OK);
58#define CDC_HOST_SINK_SIZE 256u
60static uint8_t g_cdc_sink[CDC_HOST_SINK_SIZE];
61static uint16_t g_cdc_sink_len;
62static uint32_t g_cdc_call_count;
63static bool g_cdc_force_fail;
65bool CDC_Write(
const uint8_t *data, uint16_t len) {
67 if (g_cdc_force_fail) {
76 uint16_t write_len = len;
77 if (write_len > (uint16_t)CDC_HOST_SINK_SIZE) {
78 write_len = (uint16_t)CDC_HOST_SINK_SIZE;
80 (void)memcpy(g_cdc_sink, data, write_len);
81 g_cdc_sink_len = write_len;
87const uint8_t *__cdc_host_sink(
void) {
91uint16_t __cdc_host_sink_len(
void) {
92 return g_cdc_sink_len;
95uint32_t __cdc_host_call_count(
void) {
96 return g_cdc_call_count;
99void __cdc_host_set_fail(
bool fail) {
100 g_cdc_force_fail = fail;
103void __cdc_host_reset_state(
void) {
104 (void)memset(g_cdc_sink, 0,
sizeof(g_cdc_sink));
106 g_cdc_call_count = 0u;
107 g_cdc_force_fail =
false;
116 return CDC_Write((
const uint8_t *)s, (uint16_t)strlen(s));
bool CDC_WriteString(const char *s)
Convenience wrapper that pushes a NUL-terminated C string.
bool CDC_Write(const uint8_t *data, uint16_t len)
Push len bytes to the USB CDC IN endpoint.
#define CDC_WRITE_MAX_RETRIES
Maximum number of busy-retry attempts inside CDC_Write.
ICARUS OS - Main API Header.
uint32_t task_active_sleep(uint32_t ticks)
Sleep for specified ticks (cooperative, via SVC)
uint8_t CDC_Transmit_FS(uint8_t *buf, uint16_t len)
Transmit data over USB CDC.