refactor(usbd): replace _usbd_ctrl_epbuf with usbd_get_ctrl_buf() for cleaner abstraction and consistency across modules

This commit is contained in:
hathach
2026-03-11 15:14:09 +07:00
parent 14b594d0f7
commit 2e29388051
4 changed files with 15 additions and 13 deletions

View File

@ -430,7 +430,7 @@ static inline uint8_t* get_ctrl_buffer(void) {
#if CFG_TUD_AUDIO_CTRL_BUF_SZ > CFG_TUD_ENDPOINT0_BUFSIZE
return ctrl_buf;
#else
return _usbd_ctrl_epbuf.buf;
return usbd_get_ctrl_buf();
#endif
}

View File

@ -75,7 +75,7 @@ static inline uint8_t* get_xfer_buffer(void) {
#if CFG_TUD_DFU_XFER_BUFSIZE > CFG_TUD_ENDPOINT0_BUFSIZE
return _transfer_buf;
#else
return _usbd_ctrl_epbuf.buf;
return usbd_get_ctrl_buf();
#endif
}

View File

@ -59,7 +59,13 @@ typedef struct {
static usbd_control_xfer_t _ctrl_xfer;
CFG_TUD_MEM_SECTION usbd_ctrl_epbuf_t _usbd_ctrl_epbuf;
CFG_TUD_MEM_SECTION static struct {
TUD_EPBUF_DEF(buf, CFG_TUD_ENDPOINT0_BUFSIZE);
} _ctrl_epbuf;
uint8_t* usbd_get_ctrl_buf(void) {
return _ctrl_epbuf.buf;
}
//--------------------------------------------------------------------+
// Application API
@ -91,12 +97,12 @@ static bool data_stage_xact(uint8_t rhport) {
if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_IN) {
ep_addr = EDPT_CTRL_IN;
if (0u != xact_len && _ctrl_xfer.buffer != _usbd_ctrl_epbuf.buf) {
TU_VERIFY(0 == tu_memcpy_s(_usbd_ctrl_epbuf.buf, CFG_TUD_ENDPOINT0_BUFSIZE, _ctrl_xfer.buffer, xact_len));
if (0u != xact_len && _ctrl_xfer.buffer != _ctrl_epbuf.buf) {
TU_VERIFY(0 == tu_memcpy_s(_ctrl_epbuf.buf, CFG_TUD_ENDPOINT0_BUFSIZE, _ctrl_xfer.buffer, xact_len));
}
}
return usbd_edpt_xfer(rhport, ep_addr, xact_len ? _usbd_ctrl_epbuf.buf : NULL, xact_len, false);
return usbd_edpt_xfer(rhport, ep_addr, xact_len ? _ctrl_epbuf.buf : NULL, xact_len, false);
}
// Transmit data to/from the control endpoint.
@ -167,8 +173,8 @@ bool usbd_control_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result,
if (_ctrl_xfer.request.bmRequestType_bit.direction == TUSB_DIR_OUT) {
TU_VERIFY(_ctrl_xfer.buffer);
if (_ctrl_xfer.buffer != _usbd_ctrl_epbuf.buf) {
memcpy(_ctrl_xfer.buffer, _usbd_ctrl_epbuf.buf, xferred_bytes);
if (_ctrl_xfer.buffer != _ctrl_epbuf.buf) {
memcpy(_ctrl_xfer.buffer, _ctrl_epbuf.buf, xferred_bytes);
}
TU_LOG_MEM(CFG_TUD_LOG_LEVEL, _ctrl_xfer.buffer, xferred_bytes, 2);
}

View File

@ -72,11 +72,7 @@ void usbd_int_set(bool enabled);
void usbd_spin_lock(bool in_isr);
void usbd_spin_unlock(bool in_isr);
typedef struct {
TUD_EPBUF_DEF(buf, CFG_TUD_ENDPOINT0_BUFSIZE);
} usbd_ctrl_epbuf_t;
extern usbd_ctrl_epbuf_t _usbd_ctrl_epbuf;
uint8_t* usbd_get_ctrl_buf(void);
//--------------------------------------------------------------------+
// USBD Endpoint API