60
60
61
61
#include "audio_device.h"
62
62
63
+ //--------------------------------------------------------------------+
64
+ // ESP32 out-of-sync
65
+ //--------------------------------------------------------------------+
66
+ #if defined(ARDUINO_ARCH_ESP32 ) && !defined(tu_static )
67
+ #define tu_static static
68
+ static inline int tu_memset_s (void * dest , size_t destsz , int ch , size_t count ) { if (count > destsz ) { return -1 ; } memset (dest , ch , count ); return 0 ; }
69
+ static inline int tu_memcpy_s (void * dest , size_t destsz , const void * src , size_t count ) { if (count > destsz ) { return -1 ; } memcpy (dest , src , count ); return 0 ; }
70
+ #endif
71
+
72
+ #ifndef CFG_TUD_MEM_SECTION
73
+ #define CFG_TUD_MEM_SECTION CFG_TUSB_MEM_SECTION
74
+ #endif
75
+
76
+ #ifndef CFG_TUD_LOG_LEVEL
77
+ #define CFG_TUD_LOG_LEVEL 2
78
+ #endif
79
+
63
80
//--------------------------------------------------------------------+
64
81
// MACRO CONSTANT TYPEDEF
65
82
//--------------------------------------------------------------------+
66
83
67
84
// Use ring buffer if it's available, some MCUs need extra RAM requirements
68
85
#ifndef TUD_AUDIO_PREFER_RING_BUFFER
69
- #if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT
86
+ #if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX
70
87
#define TUD_AUDIO_PREFER_RING_BUFFER 0
71
88
#else
72
89
#define TUD_AUDIO_PREFER_RING_BUFFER 1
85
102
CFG_TUSB_MCU == OPT_MCU_RX72N || \
86
103
CFG_TUSB_MCU == OPT_MCU_LPC18XX || \
87
104
CFG_TUSB_MCU == OPT_MCU_LPC43XX || \
88
- CFG_TUSB_MCU == OPT_MCU_MIMXRT || \
105
+ CFG_TUSB_MCU == OPT_MCU_MIMXRT1XXX || \
89
106
CFG_TUSB_MCU == OPT_MCU_MSP432E4
90
107
#if TUD_AUDIO_PREFER_RING_BUFFER
91
108
#define USE_LINEAR_BUFFER 0
113
130
// EP IN software buffers and mutexes
114
131
#if CFG_TUD_AUDIO_ENABLE_EP_IN && !CFG_TUD_AUDIO_ENABLE_ENCODING
115
132
#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0
116
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_1 [CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ ];
133
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_1 [CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ ];
117
134
#if CFG_FIFO_MUTEX
118
135
osal_mutex_def_t ep_in_ff_mutex_wr_1 ; // No need for read mutex as only USB driver reads from FIFO
119
136
#endif
120
137
#endif // CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ > 0
121
138
122
139
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0
123
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_2 [CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ ];
140
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_2 [CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ ];
124
141
#if CFG_FIFO_MUTEX
125
142
osal_mutex_def_t ep_in_ff_mutex_wr_2 ; // No need for read mutex as only USB driver reads from FIFO
126
143
#endif
127
144
#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SW_BUF_SZ > 0
128
145
129
146
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ > 0
130
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_3 [CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ ];
147
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_in_sw_buf_3 [CFG_TUD_AUDIO_FUNC_3_EP_IN_SW_BUF_SZ ];
131
148
#if CFG_FIFO_MUTEX
132
149
osal_mutex_def_t ep_in_ff_mutex_wr_3 ; // No need for read mutex as only USB driver reads from FIFO
133
150
#endif
139
156
// - the software encoding is used - in this case the linear buffers serve as a target memory where logical channels are encoded into
140
157
#if CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_ENCODING )
141
158
#if CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX > 0
142
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_1 [CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX ];
159
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_1 [CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX ];
143
160
#endif
144
161
145
162
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX > 0
146
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_2 [CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX ];
163
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_2 [CFG_TUD_AUDIO_FUNC_2_EP_IN_SZ_MAX ];
147
164
#endif
148
165
149
166
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX > 0
150
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_3 [CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX ];
167
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_in_3 [CFG_TUD_AUDIO_FUNC_3_EP_IN_SZ_MAX ];
151
168
#endif
152
169
#endif // CFG_TUD_AUDIO_ENABLE_EP_IN && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
153
170
154
171
// EP OUT software buffers and mutexes
155
172
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && !CFG_TUD_AUDIO_ENABLE_DECODING
156
173
#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0
157
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_1 [CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ ];
174
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_1 [CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ ];
158
175
#if CFG_FIFO_MUTEX
159
176
osal_mutex_def_t ep_out_ff_mutex_rd_1 ; // No need for write mutex as only USB driver writes into FIFO
160
177
#endif
161
178
#endif // CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ > 0
162
179
163
180
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0
164
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_2 [CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ ];
181
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_2 [CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ ];
165
182
#if CFG_FIFO_MUTEX
166
183
osal_mutex_def_t ep_out_ff_mutex_rd_2 ; // No need for write mutex as only USB driver writes into FIFO
167
184
#endif
168
185
#endif // CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SW_BUF_SZ > 0
169
186
170
187
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ > 0
171
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_3 [CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ ];
188
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t audio_ep_out_sw_buf_3 [CFG_TUD_AUDIO_FUNC_3_EP_OUT_SW_BUF_SZ ];
172
189
#if CFG_FIFO_MUTEX
173
190
osal_mutex_def_t ep_out_ff_mutex_rd_3 ; // No need for write mutex as only USB driver writes into FIFO
174
191
#endif
180
197
// - the software encoding is used - in this case the linear buffers serve as a target memory where logical channels are encoded into
181
198
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING )
182
199
#if CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX > 0
183
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_1 [CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX ];
200
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_1 [CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX ];
184
201
#endif
185
202
186
203
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX > 0
187
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_2 [CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX ];
204
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_2 [CFG_TUD_AUDIO_FUNC_2_EP_OUT_SZ_MAX ];
188
205
#endif
189
206
190
207
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX > 0
191
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_3 [CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX ];
208
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t lin_buf_out_3 [CFG_TUD_AUDIO_FUNC_3_EP_OUT_SZ_MAX ];
192
209
#endif
193
210
#endif // CFG_TUD_AUDIO_ENABLE_EP_OUT && (USE_LINEAR_BUFFER || CFG_TUD_AUDIO_ENABLE_DECODING)
194
211
195
212
// Control buffers
196
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_1 [CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ ];
213
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_1 [CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ ];
197
214
198
215
#if CFG_TUD_AUDIO > 1
199
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_2 [CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ ];
216
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_2 [CFG_TUD_AUDIO_FUNC_2_CTRL_BUF_SZ ];
200
217
#endif
201
218
202
219
#if CFG_TUD_AUDIO > 2
203
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_3 [CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ ];
220
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t ctrl_buf_3 [CFG_TUD_AUDIO_FUNC_3_CTRL_BUF_SZ ];
204
221
#endif
205
222
206
223
// Active alternate setting of interfaces
@@ -217,23 +234,23 @@ uint8_t alt_setting_3[CFG_TUD_AUDIO_FUNC_3_N_AS_INT];
217
234
// Software encoding/decoding support FIFOs
218
235
#if CFG_TUD_AUDIO_ENABLE_EP_IN && CFG_TUD_AUDIO_ENABLE_ENCODING
219
236
#if CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ > 0
220
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_1 [CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ ];
237
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_1 [CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ ];
221
238
tu_fifo_t tx_supp_ff_1 [CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO ];
222
239
#if CFG_FIFO_MUTEX
223
240
osal_mutex_def_t tx_supp_ff_mutex_wr_1 [CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO ]; // No need for read mutex as only USB driver reads from FIFO
224
241
#endif
225
242
#endif
226
243
227
244
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ > 0
228
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_2 [CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ ];
245
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_2 [CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_2_TX_SUPP_SW_FIFO_SZ ];
229
246
tu_fifo_t tx_supp_ff_2 [CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO ];
230
247
#if CFG_FIFO_MUTEX
231
248
osal_mutex_def_t tx_supp_ff_mutex_wr_2 [CFG_TUD_AUDIO_FUNC_2_N_TX_SUPP_SW_FIFO ]; // No need for read mutex as only USB driver reads from FIFO
232
249
#endif
233
250
#endif
234
251
235
252
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ > 0
236
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_3 [CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ ];
253
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t tx_supp_ff_buf_3 [CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_3_TX_SUPP_SW_FIFO_SZ ];
237
254
tu_fifo_t tx_supp_ff_3 [CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO ];
238
255
#if CFG_FIFO_MUTEX
239
256
osal_mutex_def_t tx_supp_ff_mutex_wr_3 [CFG_TUD_AUDIO_FUNC_3_N_TX_SUPP_SW_FIFO ]; // No need for read mutex as only USB driver reads from FIFO
@@ -243,23 +260,23 @@ uint8_t alt_setting_3[CFG_TUD_AUDIO_FUNC_3_N_AS_INT];
243
260
244
261
#if CFG_TUD_AUDIO_ENABLE_EP_OUT && CFG_TUD_AUDIO_ENABLE_DECODING
245
262
#if CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ > 0
246
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_1 [CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ ];
263
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_1 [CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_1_RX_SUPP_SW_FIFO_SZ ];
247
264
tu_fifo_t rx_supp_ff_1 [CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO ];
248
265
#if CFG_FIFO_MUTEX
249
266
osal_mutex_def_t rx_supp_ff_mutex_rd_1 [CFG_TUD_AUDIO_FUNC_1_N_RX_SUPP_SW_FIFO ]; // No need for write mutex as only USB driver writes into FIFO
250
267
#endif
251
268
#endif
252
269
253
270
#if CFG_TUD_AUDIO > 1 && CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ > 0
254
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_2 [CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ ];
271
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_2 [CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_2_RX_SUPP_SW_FIFO_SZ ];
255
272
tu_fifo_t rx_supp_ff_2 [CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO ];
256
273
#if CFG_FIFO_MUTEX
257
274
osal_mutex_def_t rx_supp_ff_mutex_rd_2 [CFG_TUD_AUDIO_FUNC_2_N_RX_SUPP_SW_FIFO ]; // No need for write mutex as only USB driver writes into FIFO
258
275
#endif
259
276
#endif
260
277
261
278
#if CFG_TUD_AUDIO > 2 && CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ > 0
262
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_3 [CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ ];
279
+ CFG_TUD_MEM_SECTION CFG_TUSB_MEM_ALIGN uint8_t rx_supp_ff_buf_3 [CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO ][CFG_TUD_AUDIO_FUNC_3_RX_SUPP_SW_FIFO_SZ ];
263
280
tu_fifo_t rx_supp_ff_3 [CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO ];
264
281
#if CFG_FIFO_MUTEX
265
282
osal_mutex_def_t rx_supp_ff_mutex_rd_3 [CFG_TUD_AUDIO_FUNC_3_N_RX_SUPP_SW_FIFO ]; // No need for write mutex as only USB driver writes into FIFO
@@ -416,7 +433,7 @@ typedef struct
416
433
//--------------------------------------------------------------------+
417
434
// INTERNAL OBJECT & FUNCTION DECLARATION
418
435
//--------------------------------------------------------------------+
419
- CFG_TUSB_MEM_SECTION audiod_function_t _audiod_fct [CFG_TUD_AUDIO ];
436
+ CFG_TUD_MEM_SECTION audiod_function_t _audiod_fct [CFG_TUD_AUDIO ];
420
437
421
438
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
422
439
static bool audiod_rx_done_cb (uint8_t rhport , audiod_function_t * audio , uint16_t n_bytes_received );
0 commit comments