summaryrefslogtreecommitdiff
path: root/src/class
diff options
context:
space:
mode:
authorhathach <[email protected]>2025-11-27 00:16:39 +0700
committerhathach <[email protected]>2025-11-27 00:16:39 +0700
commit726497af685b0f1f7f9b03815641c5b977f7d1ed (patch)
treeb48c4ee4b2106ecf4230c086eda01fd9440abfb1 /src/class
parentd6c50c7ce2735999e16e05a3da60ff98f8032e96 (diff)
omit cdc epnotify for dedicated hw fifo
Diffstat (limited to 'src/class')
-rw-r--r--src/class/cdc/cdc_device.c40
-rw-r--r--src/class/cdc/cdc_device.h24
-rw-r--r--src/class/vendor/vendor_device.c22
3 files changed, 42 insertions, 44 deletions
diff --git a/src/class/cdc/cdc_device.c b/src/class/cdc/cdc_device.c
index a77dfb140..7ef8aa738 100644
--- a/src/class/cdc/cdc_device.c
+++ b/src/class/cdc/cdc_device.c
@@ -172,42 +172,22 @@ void tud_cdc_n_get_line_coding(uint8_t itf, cdc_line_coding_t *coding) {
#if CFG_TUD_CDC_NOTIFY
bool tud_cdc_n_notify_msg(uint8_t itf, cdc_notify_msg_t *msg) {
TU_VERIFY(itf < CFG_TUD_CDC);
- cdcd_interface_t *p_cdc = &_cdcd_itf[itf];
- cdcd_epbuf_t *p_epbuf = &_cdcd_epbuf[itf];
- cdc_notify_msg_t *notify_msg = &p_epbuf->epnotify;
-
- *notify_msg = *msg;
- notify_msg->request.wIndex = p_cdc->itf_num;
-
+ const cdcd_interface_t *p_cdc = &_cdcd_itf[itf];
TU_VERIFY(tud_ready() && p_cdc->ep_notify != 0);
TU_VERIFY(usbd_edpt_claim(p_cdc->rhport, p_cdc->ep_notify));
- return usbd_edpt_xfer(p_cdc->rhport, p_cdc->ep_notify, (uint8_t *)msg, 8 + msg->request.wLength, false);
-}
-bool tud_cdc_n_notify_uart_state (uint8_t itf, const cdc_notify_uart_state_t *state) {
- cdc_notify_msg_t notify_msg;
- notify_msg.request.bmRequestType = CDC_REQ_TYPE_NOTIF;
- notify_msg.request.bRequest = CDC_NOTIF_SERIAL_STATE;
- notify_msg.request.wValue = 0;
- notify_msg.request.wIndex = 0; // filled later
- notify_msg.request.wLength = sizeof(cdc_notify_uart_state_t);
- notify_msg.serial_state = *state;
+ #if CFG_TUD_EDPT_DEDICATED_HWFIFO
+ cdc_notify_msg_t *msg_epbuf = msg;
+ #else
+ cdc_notify_msg_t *msg_epbuf = &_cdcd_epbuf[itf].epnotify;
+ *msg_epbuf = *msg;
+ #endif
- return tud_cdc_n_notify_msg(itf, &notify_msg);
-}
-
-bool tud_cdc_n_notify_conn_speed_change(uint8_t itf, const cdc_notify_conn_speed_change_t* conn_speed_change) {
- cdc_notify_msg_t notify_msg;
- notify_msg.request.bmRequestType = CDC_REQ_TYPE_NOTIF;
- notify_msg.request.bRequest = CDC_NOTIF_CONNECTION_SPEED_CHANGE;
- notify_msg.request.wValue = 0;
- notify_msg.request.wIndex = 0; // filled later
- notify_msg.request.wLength = sizeof(cdc_notify_conn_speed_change_t);
- notify_msg.conn_speed_change = *conn_speed_change;
+ msg_epbuf->request.wIndex = p_cdc->itf_num;
- return tud_cdc_n_notify_msg(itf, &notify_msg);
+ return usbd_edpt_xfer(p_cdc->rhport, p_cdc->ep_notify, (uint8_t *)msg_epbuf, 8 + msg_epbuf->request.wLength, false);
}
- #endif
+#endif
void tud_cdc_n_set_wanted_char(uint8_t itf, char wanted) {
TU_VERIFY(itf < CFG_TUD_CDC, );
diff --git a/src/class/cdc/cdc_device.h b/src/class/cdc/cdc_device.h
index 6596022df..0809b578f 100644
--- a/src/class/cdc/cdc_device.h
+++ b/src/class/cdc/cdc_device.h
@@ -144,10 +144,30 @@ bool tud_cdc_n_write_clear(uint8_t itf);
bool tud_cdc_n_notify_msg(uint8_t itf, cdc_notify_msg_t *msg);
// Send UART status notification: DCD, DSR etc ..
-bool tud_cdc_n_notify_uart_state(uint8_t itf, const cdc_notify_uart_state_t *state);
+TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_n_notify_uart_state(uint8_t itf,
+ const cdc_notify_uart_state_t *state) {
+ cdc_notify_msg_t notify_msg;
+ notify_msg.request.bmRequestType = CDC_REQ_TYPE_NOTIF;
+ notify_msg.request.bRequest = CDC_NOTIF_SERIAL_STATE;
+ notify_msg.request.wValue = 0;
+ notify_msg.request.wIndex = 0; // filled later
+ notify_msg.request.wLength = sizeof(cdc_notify_uart_state_t);
+ notify_msg.serial_state = *state;
+ return tud_cdc_n_notify_msg(itf, &notify_msg);
+}
// Send connection speed change notification
-bool tud_cdc_n_notify_conn_speed_change(uint8_t itf, const cdc_notify_conn_speed_change_t* conn_speed_change);
+TU_ATTR_ALWAYS_INLINE static inline bool
+tud_cdc_n_notify_conn_speed_change(uint8_t itf, const cdc_notify_conn_speed_change_t *conn_speed_change) {
+ cdc_notify_msg_t notify_msg;
+ notify_msg.request.bmRequestType = CDC_REQ_TYPE_NOTIF;
+ notify_msg.request.bRequest = CDC_NOTIF_CONNECTION_SPEED_CHANGE;
+ notify_msg.request.wValue = 0;
+ notify_msg.request.wIndex = 0; // filled later
+ notify_msg.request.wLength = sizeof(cdc_notify_conn_speed_change_t);
+ notify_msg.conn_speed_change = *conn_speed_change;
+ return tud_cdc_n_notify_msg(itf, &notify_msg);
+}
TU_ATTR_ALWAYS_INLINE static inline bool tud_cdc_notify_msg(cdc_notify_msg_t *msg) {
return tud_cdc_n_notify_msg(0, msg);
diff --git a/src/class/vendor/vendor_device.c b/src/class/vendor/vendor_device.c
index 7da4d2239..ee6cd7105 100644
--- a/src/class/vendor/vendor_device.c
+++ b/src/class/vendor/vendor_device.c
@@ -162,23 +162,21 @@ void vendord_init(void) {
vendord_interface_t* p_itf = &_vendord_itf[i];
vendord_epbuf_t* p_epbuf = &_vendord_epbuf[i];
- uint8_t* rx_ff_buf =
- #if CFG_TUD_VENDOR_RX_BUFSIZE > 0
- p_itf->rx.ff_buf;
- #else
- NULL;
- #endif
+ #if CFG_TUD_VENDOR_RX_BUFSIZE > 0
+ uint8_t *rx_ff_buf = p_itf->rx.ff_buf;
+ #else
+ uint8_t *rx_ff_buf = NULL;
+ #endif
tu_edpt_stream_init(&p_itf->rx.stream, false, false, false,
rx_ff_buf, CFG_TUD_VENDOR_RX_BUFSIZE,
p_epbuf->epout, CFG_TUD_VENDOR_EPSIZE);
- uint8_t* tx_ff_buf =
- #if CFG_TUD_VENDOR_TX_BUFSIZE > 0
- p_itf->tx.ff_buf;
- #else
- NULL;
- #endif
+ #if CFG_TUD_VENDOR_TX_BUFSIZE > 0
+ uint8_t *tx_ff_buf = p_itf->tx.ff_buf;
+ #else
+ uint8_t* tx_ff_buf = NULL;
+ #endif
tu_edpt_stream_init(&p_itf->tx.stream, false, true, false,
tx_ff_buf, CFG_TUD_VENDOR_TX_BUFSIZE,