mirror of
https://github.com/hathach/tinyusb.git
synced 2026-03-31 20:03:28 +00:00
Move control buffer out of USB section
Signed-off-by: HiFiPhile <admin@hifiphile.com>
This commit is contained in:
@ -182,9 +182,7 @@ tu_static CFG_TUD_MEM_SECTION struct {
|
||||
#endif// CFG_TUD_AUDIO_ENABLE_EP_OUT && USE_LINEAR_BUFFER
|
||||
|
||||
// Control buffer
|
||||
tu_static CFG_TUD_MEM_SECTION struct {
|
||||
TUD_EPBUF_DEF(buf, CFG_TUD_AUDIO_CTRL_BUF_SZ);
|
||||
} ctrl_buf;
|
||||
CFG_TUD_MEM_ALIGN uint8_t ctrl_buf[CFG_TUD_AUDIO_CTRL_BUF_SZ];
|
||||
|
||||
// Aligned buffer for feedback EP
|
||||
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
|
||||
@ -1314,20 +1312,20 @@ static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const
|
||||
if (tud_audio_n_version(func_id) == 2) {
|
||||
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||
if (_audiod_fct[func_id].bclock_id_tx == entityID && ctrlSel == AUDIO20_CS_CTRL_SAM_FREQ && p_request->bRequest == AUDIO20_CS_REQ_CUR) {
|
||||
_audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(ctrl_buf.buf);
|
||||
_audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(ctrl_buf);
|
||||
audiod_calc_tx_packet_sz(&_audiod_fct[func_id]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Invoke callback
|
||||
return tud_audio_set_req_entity_cb(rhport, p_request, ctrl_buf.buf);
|
||||
return tud_audio_set_req_entity_cb(rhport, p_request, ctrl_buf);
|
||||
} else {
|
||||
// Find index of audio driver structure and verify interface really exists
|
||||
TU_VERIFY(audiod_verify_itf_exists(itf, &func_id));
|
||||
|
||||
// Invoke callback
|
||||
return tud_audio_set_req_itf_cb(rhport, p_request, ctrl_buf.buf);
|
||||
return tud_audio_set_req_itf_cb(rhport, p_request, ctrl_buf);
|
||||
}
|
||||
} break;
|
||||
|
||||
@ -1342,7 +1340,7 @@ static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const
|
||||
if (_audiod_fct[func_id].ep_in == ep) {
|
||||
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||
if (ctrlSel == AUDIO10_EP_CTRL_SAMPLING_FREQ && p_request->bRequest == AUDIO10_CS_REQ_SET_CUR) {
|
||||
_audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(ctrl_buf.buf) & 0x00FFFFFF;
|
||||
_audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(ctrl_buf) & 0x00FFFFFF;
|
||||
audiod_calc_tx_packet_sz(&_audiod_fct[func_id]);
|
||||
}
|
||||
}
|
||||
@ -1350,7 +1348,7 @@ static bool audiod_control_complete(uint8_t rhport, tusb_control_request_t const
|
||||
#endif
|
||||
|
||||
// Invoke callback
|
||||
bool ret = tud_audio_set_req_ep_cb(rhport, p_request, ctrl_buf.buf);
|
||||
bool ret = tud_audio_set_req_ep_cb(rhport, p_request, ctrl_buf);
|
||||
|
||||
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP
|
||||
if (ret && tud_audio_n_version(func_id) == 1) {
|
||||
@ -1447,7 +1445,7 @@ static bool audiod_control_request(uint8_t rhport, tusb_control_request_t const
|
||||
}
|
||||
|
||||
// If we end here, the received request is a set request - we schedule a receive for the data stage and return true here. We handle the rest later in audiod_control_complete() once the data stage was finished
|
||||
TU_VERIFY(tud_control_xfer(rhport, p_request, ctrl_buf.buf, sizeof(ctrl_buf.buf)));
|
||||
TU_VERIFY(tud_control_xfer(rhport, p_request, ctrl_buf, sizeof(ctrl_buf)));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1708,10 +1706,10 @@ bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_req
|
||||
}
|
||||
|
||||
// Crop length
|
||||
if (len > sizeof(ctrl_buf.buf)) len = sizeof(ctrl_buf.buf);
|
||||
if (len > sizeof(ctrl_buf)) len = sizeof(ctrl_buf);
|
||||
|
||||
// Copy into buffer
|
||||
TU_VERIFY(0 == tu_memcpy_s(ctrl_buf.buf, sizeof(ctrl_buf.buf), data, (size_t) len));
|
||||
TU_VERIFY(0 == tu_memcpy_s(ctrl_buf, sizeof(ctrl_buf), data, (size_t) len));
|
||||
|
||||
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_EP_IN_FLOW_CONTROL
|
||||
if (tud_audio_n_version(func_id) == 2) {
|
||||
@ -1720,7 +1718,7 @@ bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_req
|
||||
uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
|
||||
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||
if (_audiod_fct[func_id].bclock_id_tx == entityID && ctrlSel == AUDIO20_CS_CTRL_SAM_FREQ && p_request->bRequest == AUDIO20_CS_REQ_CUR) {
|
||||
_audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(ctrl_buf.buf);
|
||||
_audiod_fct[func_id].sample_rate_tx = tu_unaligned_read32(ctrl_buf);
|
||||
audiod_calc_tx_packet_sz(&_audiod_fct[func_id]);
|
||||
}
|
||||
}
|
||||
@ -1728,7 +1726,7 @@ bool tud_audio_buffer_and_schedule_control_xfer(uint8_t rhport, tusb_control_req
|
||||
#endif
|
||||
|
||||
// Schedule transmit
|
||||
return tud_control_xfer(rhport, p_request, ctrl_buf.buf, len);
|
||||
return tud_control_xfer(rhport, p_request, ctrl_buf, len);
|
||||
}
|
||||
|
||||
// Verify an entity with the given ID exists and returns also the corresponding driver index
|
||||
|
||||
Reference in New Issue
Block a user