Merge pull request #3034 from hathach/ctrl_fix
Fix UAC ctrl buffer alignment.
This commit is contained in:
8
.gitignore
vendored
8
.gitignore
vendored
@@ -15,6 +15,14 @@ latex
|
|||||||
*.jlink
|
*.jlink
|
||||||
*.emSession
|
*.emSession
|
||||||
*.ninja*
|
*.ninja*
|
||||||
|
*.eww
|
||||||
|
*.ewp
|
||||||
|
*.ewt
|
||||||
|
*.ewd
|
||||||
|
*.hex
|
||||||
|
cmake_install.cmake
|
||||||
|
CMakeCache.txt
|
||||||
|
settings/
|
||||||
.settings/
|
.settings/
|
||||||
.vscode/
|
.vscode/
|
||||||
.gdb_history
|
.gdb_history
|
||||||
|
@@ -208,15 +208,15 @@ tu_static CFG_TUD_MEM_SECTION struct {
|
|||||||
#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
|
#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
|
||||||
|
|
||||||
// Control buffers
|
// Control buffers
|
||||||
tu_static uint8_t ctrl_buf_1[CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ];
|
tu_static CFG_TUD_MEM_SECTION struct {
|
||||||
|
TUD_EPBUF_DEF(buf1, CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ);
|
||||||
#if CFG_TUD_AUDIO > 1
|
#if CFG_TUD_AUDIO > 1
|
||||||
tu_static uint8_t ctrl_buf_2[CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ];
|
TUD_EPBUF_DEF(buf2, CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ);
|
||||||
#endif
|
#endif
|
||||||
|
#if CFG_TUD_AUDIO > 2
|
||||||
#if CFG_TUD_AUDIO > 2
|
TUD_EPBUF_DEF(buf3, CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ);
|
||||||
tu_static uint8_t ctrl_buf_3[CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ];
|
#endif
|
||||||
#endif
|
} ctrl_buf;
|
||||||
|
|
||||||
// Active alternate setting of interfaces
|
// Active alternate setting of interfaces
|
||||||
tu_static uint8_t alt_setting_1[CFG_TUD_AUDIO_FUNC_1_N_AS_INT];
|
tu_static uint8_t alt_setting_1[CFG_TUD_AUDIO_FUNC_1_N_AS_INT];
|
||||||
@@ -1223,18 +1223,18 @@ void audiod_init(void) {
|
|||||||
// Initialize control buffers
|
// Initialize control buffers
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 0:
|
case 0:
|
||||||
audio->ctrl_buf = ctrl_buf_1;
|
audio->ctrl_buf = ctrl_buf.buf1;
|
||||||
audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ;
|
audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ;
|
||||||
break;
|
break;
|
||||||
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ > 0
|
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ > 0
|
||||||
case 1:
|
case 1:
|
||||||
audio->ctrl_buf = ctrl_buf_2;
|
audio->ctrl_buf = ctrl_buf.buf2;
|
||||||
audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ;
|
audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ > 0
|
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ > 0
|
||||||
case 2:
|
case 2:
|
||||||
audio->ctrl_buf = ctrl_buf_3;
|
audio->ctrl_buf = ctrl_buf.buf3;
|
||||||
audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ;
|
audio->ctrl_buf_sz = CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -297,7 +297,7 @@ bool dcd_init(uint8_t rhport, const tusb_rhport_init_t* rh_init) {
|
|||||||
|
|
||||||
dcd_reg->EPLISTSTART = (uint32_t) _dcd.ep;
|
dcd_reg->EPLISTSTART = (uint32_t) _dcd.ep;
|
||||||
dcd_reg->DATABUFSTART = tu_align((uint32_t) &_dcd, TU_BIT(22)); // 22-bit alignment
|
dcd_reg->DATABUFSTART = tu_align((uint32_t) &_dcd, TU_BIT(22)); // 22-bit alignment
|
||||||
dcd_reg->INTSTAT |= dcd_reg->INTSTAT; // clear all pending interrupt
|
dcd_reg->INTSTAT = dcd_reg->INTSTAT; // clear all pending interrupt
|
||||||
dcd_reg->INTEN = INT_DEVICE_STATUS_MASK;
|
dcd_reg->INTEN = INT_DEVICE_STATUS_MASK;
|
||||||
dcd_reg->DEVCMDSTAT |= DEVCMDSTAT_DEVICE_ENABLE_MASK | DEVCMDSTAT_DEVICE_CONNECT_MASK |
|
dcd_reg->DEVCMDSTAT |= DEVCMDSTAT_DEVICE_ENABLE_MASK | DEVCMDSTAT_DEVICE_CONNECT_MASK |
|
||||||
DEVCMDSTAT_RESET_CHANGE_MASK | DEVCMDSTAT_CONNECT_CHANGE_MASK | DEVCMDSTAT_SUSPEND_CHANGE_MASK;
|
DEVCMDSTAT_RESET_CHANGE_MASK | DEVCMDSTAT_CONNECT_CHANGE_MASK | DEVCMDSTAT_SUSPEND_CHANGE_MASK;
|
||||||
@@ -563,7 +563,8 @@ void dcd_int_handler(uint8_t rhport)
|
|||||||
|
|
||||||
uint32_t const cmd_stat = dcd_reg->DEVCMDSTAT;
|
uint32_t const cmd_stat = dcd_reg->DEVCMDSTAT;
|
||||||
|
|
||||||
uint32_t int_status = dcd_reg->INTSTAT & dcd_reg->INTEN;
|
uint32_t int_status = dcd_reg->INTSTAT;
|
||||||
|
int_status &= dcd_reg->INTEN;
|
||||||
dcd_reg->INTSTAT = int_status; // Acknowledge handled interrupt
|
dcd_reg->INTSTAT = int_status; // Acknowledge handled interrupt
|
||||||
|
|
||||||
if (int_status == 0) return;
|
if (int_status == 0) return;
|
||||||
|
Reference in New Issue
Block a user