12static uint8_t
s_rx[CDC_DATA_FS_MAX_PACKET_SIZE];
14static USBD_CDC_LineCodingTypeDef
s_line = { 115200u, 0u, 0u, 8u };
29 if (
cmd == CDC_SET_LINE_CODING) {
30 s_line.bitrate = (uint32_t)p[0] | ((uint32_t)p[1] << 8) | ((uint32_t)p[2] << 16) | ((uint32_t)p[3] << 24);
32 }
else if (
cmd == CDC_SET_CONTROL_LINE_STATE) {
34 const USBD_SetupReqTypedef *req = (
const USBD_SetupReqTypedef *)(
const void *)p;
36 }
else if (
cmd == CDC_GET_LINE_CODING) {
37 p[0] = (uint8_t)
s_line.bitrate; p[1] = (uint8_t)(
s_line.bitrate >> 8);
38 p[2] = (uint8_t)(
s_line.bitrate >> 16); p[3] = (uint8_t)(
s_line.bitrate >> 24);
49 USBD_CDC_ReceivePacket(&
s_dev);
53static int8_t
itf_tx_done(uint8_t *buf, uint32_t *len, uint8_t ep)
55 (void)buf; (void)len; (void)ep;
64 if (USBD_RegisterClass(&
s_dev, &USBD_CDC) != USBD_OK)
return -1;
65 if (USBD_CDC_RegisterInterface(&
s_dev, &
s_itf) != USBD_OK)
return -1;
66 if (USBD_Start(&
s_dev) != USBD_OK)
return -1;
80 USBD_CDC_HandleTypeDef *h = (USBD_CDC_HandleTypeDef *)
s_dev.pClassData;
81 if (!h || h->TxState != 0u)
return;
static void cmd(uint8_t port, const uint8_t *c, uint32_t n, uint8_t armed, uint32_t now)
static int8_t itf_control(uint8_t cmd, uint8_t *p, uint16_t len)
static USBD_HandleTypeDef s_dev
static uint8_t s_tx[2048]
uint8_t usb_cdc_configured(void)
enumerated by a host
int usb_cdc_init(void)
0 = started
static int8_t itf_init(void)
static int8_t itf_receive(uint8_t *buf, uint32_t *len)
static uint8_t s_rx[CDC_DATA_FS_MAX_PACKET_SIZE]
static USBD_CDC_LineCodingTypeDef s_line
static int8_t itf_deinit(void)
static USBD_CDC_ItfTypeDef s_itf
static int8_t itf_tx_done(uint8_t *buf, uint32_t *len, uint8_t ep)
USB CDC (virtual COM port) binding of the USB link (telemetry/usb_link.h).
void usbl_tx_consume(uint32_t n)
void usbl_rx_isr(const uint8_t *p, uint32_t n)
bytes that do not fit are dropped
void usbl_set_dtr(uint8_t on)
void usbl_tx_flush(void)
nobody listening: empties every ring
void usbl_set_configured(uint8_t on)
host state: configured by a host, DTR set (any context, single writer each)
uint32_t usbl_tx_peek(uint8_t *buf, uint32_t cap)
Byte-stream link over USB CDC: protocol v2 frames in both directions (A5 5A | TYPE | LEN | PAYLOAD | ...
USBD_DescriptorsTypeDef ACW_FS_Desc
USB descriptors of the ACwing FC (see usbd_desc.c).