mikroSDK Reference Manual
tusb_config.h
1/*
2 * The MIT License (MIT)
3 *
4 * Copyright (c) 2019 Ha Thach (tinyusb.org)
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 *
24 */
25
50#ifndef _TUSB_CONFIG_H_
51#define _TUSB_CONFIG_H_
52
53#ifdef __cplusplus
54extern "C" {
55#endif
56
57#define CFG_TUSB_MCU OPT_MCU_NONE
58
59
60//--------------------------------------------------------------------+
61// MCU Specific Configuration
62//--------------------------------------------------------------------+
63
64#ifdef __HAS_DEVICE__
65 // RHPort number used for device, default to port 0
66 #ifndef BOARD_TUD_RHPORT
67 #define BOARD_TUD_RHPORT (0)
68 #endif
69
70 // RHPort max operational speed
71 #ifndef BOARD_TUD_MAX_SPEED
72 #define BOARD_TUD_MAX_SPEED (OPT_MODE_DEFAULT_SPEED)
73 #endif
74#endif
75
76#ifdef __HAS_HOST__
77 // RHPort number used for host, default to port 1
78 #ifndef BOARD_TUH_RHPORT
79 #define BOARD_TUH_RHPORT (1)
80 #endif
81
82 // RHPort max operational speed
83 #ifndef BOARD_TUH_MAX_SPEED
84 #define BOARD_TUH_MAX_SPEED (OPT_MODE_DEFAULT_SPEED)
85 #endif
86#endif
87
88//--------------------------------------------------------------------
89// COMMON CONFIGURATION
90//--------------------------------------------------------------------
91
92// defined by MikroE for default ISR
93// set to 0 to use your own
94#ifndef __USE_MIKROE_ISR__
95 #define __USE_MIKROE_ISR__ (1)
96#endif
97
98// defined by compiler flags for flexibility
99#ifndef CFG_TUSB_MCU
100 #error CFG_TUSB_MCU must be defined
101#endif
102
103#ifndef CFG_TUC_ENABLED
104 #define CFG_TUC_ENABLED (0)
105#endif
106
107#if (CFG_TUC_ENABLED==1) && !defined(TUP_TYPEC_RHPORTS_NUM)
108 #define TUP_TYPEC_RHPORTS_NUM (1)
109#endif
110
111#ifndef CFG_TUSB_OS
112 #define CFG_TUSB_OS (OPT_OS_NONE)
113#endif
114
115#ifndef CFG_TUSB_DEBUG
116 #define CFG_TUSB_DEBUG (0)
117#endif
118
119#ifdef __HAS_DEVICE__
120 // Enable Device stack
121 #define CFG_TUD_ENABLED (1)
122 #define TUD_OPT_RHPORT (0)
123
124 // Default is max speed that hardware controller could support with on-chip PHY
125 #ifndef CFG_TUD_MAX_SPEED
126 #define CFG_TUD_MAX_SPEED (BOARD_TUD_MAX_SPEED)
127 #endif
128#endif
129
130#ifdef __HAS_HOST__
131 // Enable Host stack
132 #define CFG_TUH_ENABLED (1)
133 #define TUH_OPT_RHPORT (1)
134
135 // Default is max speed that hardware controller could support with on-chip PHY
136 #ifndef CFG_TUH_MAX_SPEED
137 #define CFG_TUH_MAX_SPEED (BOARD_TUH_MAX_SPEED)
138 #endif
139#endif
140
149#ifndef CFG_TUSB_MEM_SECTION
150 #define CFG_TUSB_MEM_SECTION
151#endif
152
153#ifndef CFG_TUSB_MEM_ALIGN
154 #define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4)))
155#endif
156
157//--------------------------------------------------------------------
158// DEVICE CONFIGURATION
159//--------------------------------------------------------------------
160
161#ifndef CFG_TUD_ENDPOINT0_SIZE
162 #define CFG_TUD_ENDPOINT0_SIZE (64)
163#endif
164
165//------------- CLASS -------------//
166
167#ifdef __HAS_DEVICE__
168 // All device class modules are enabled by default.
169 // TODO - ideja je da korisnik odabere sta zeli da koristi, pa po tome inkludujemo!
170 #define CFG_TUD_CDC (1)
171 #define CFG_TUD_MSC (1)
172 #define CFG_TUD_HID (1)
173 #define CFG_TUD_MIDI (1)
174 #define CFG_TUD_VENDOR (1)
175 #define CFG_TUD_VIDEO (1)
176 #define CFG_TUD_USBTMC (0)
177 #define CFG_TUD_AUDIO (1)
178 #define CFG_TUD_DFU (1)
179 #define CFG_TUD_DFU_RUNTIME (1)
180 #define CFG_TUD_BTH (1)
181
182 // Network class has 2 drivers: ECM/RNDIS and NCM.
183 // Only one of the drivers can be enabled
184 #define CFG_TUD_ECM_RNDIS (1)
185 #define CFG_TUD_NCM (1-CFG_TUD_ECM_RNDIS)
186
187 #if CFG_TUD_HID==1
188 // HID buffer size Should be sufficient to hold ID (if any) + Data
189 #ifndef CFG_TUD_HID_EP_BUFSIZE
190 #define CFG_TUD_HID_EP_BUFSIZE (64)
191 #endif
192 #endif
193
194 #if CFG_TUD_MSC==1
195 // MSC buffer size Should be sufficient to hold ID (if any) + Data
196 #ifndef CFG_TUD_MSC_EP_BUFSIZE
197 #define CFG_TUD_MSC_EP_BUFSIZE (64)
198 #endif
199 #endif
200
201 #if CFG_TUD_MIDI==1
202 // MIDI FIFO size of TX and RX
203 #ifndef CFG_TUD_MIDI_RX_BUFSIZE
204 #define CFG_TUD_MIDI_RX_BUFSIZE (32)
205 #endif
206 #ifndef CFG_TUD_MIDI_TX_BUFSIZE
207 #define CFG_TUD_MIDI_TX_BUFSIZE (32)
208 #endif
209 #endif
210
211 #if CFG_TUD_VENDOR==1
212 // VENDOR FIFO size of TX and RX
213 #ifndef CFG_TUD_VENDOR_RX_BUFSIZE
214 #define CFG_TUD_VENDOR_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64)
215 #endif
216 #ifndef CFG_TUD_VENDOR_TX_BUFSIZE
217 #define CFG_TUD_VENDOR_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64)
218 #endif
219 #endif
220
221 #if CFG_TUD_CDC==1
222 // CDC FIFO size of TX and RX
223 #ifndef CFG_TUD_CDC_RX_BUFSIZE
224 #define CFG_TUD_CDC_RX_BUFSIZE (32)
225 #endif
226 #ifndef CFG_TUD_CDC_TX_BUFSIZE
227 #define CFG_TUD_CDC_TX_BUFSIZE (32)
228 #endif
229 #endif
230
231 #if CFG_TUD_VIDEO==1
232 // The number of video streaming interfaces
233 #ifndef CFG_TUD_VIDEO_STREAMING
234 #define CFG_TUD_VIDEO_STREAMING (1)
235 #endif
236
237 // video streaming endpoint size
238 #ifndef CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE
239 #define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE (256)
240 #endif
241
242 // use bulk endpoint for streaming interface
243 #ifndef CFG_TUD_VIDEO_STREAMING_BULK
244 #define CFG_TUD_VIDEO_STREAMING_BULK (0)
245 #endif
246 #endif
247
248 #if CFG_TUD_USBTMC==1
249 #ifndef CFG_TUD_USBTMC_ENABLE_INT_EP
250 #define CFG_TUD_USBTMC_ENABLE_INT_EP (1)
251 #endif
252 #ifndef CFG_TUD_USBTMC_ENABLE_488
253 #define CFG_TUD_USBTMC_ENABLE_488 (1)
254 #endif
255 #endif
256
257 #if CFG_TUD_AUDIO==1
258 #define TUD_AUDIO_HEADSET_STEREO_DESC_LEN (TUD_AUDIO_DESC_IAD_LEN\
259 + TUD_AUDIO_DESC_STD_AC_LEN\
260 + TUD_AUDIO_DESC_CS_AC_LEN\
261 + TUD_AUDIO_DESC_CLK_SRC_LEN\
262 + TUD_AUDIO_DESC_INPUT_TERM_LEN\
263 + TUD_AUDIO_DESC_FEATURE_UNIT_TWO_CHANNEL_LEN\
264 + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\
265 + TUD_AUDIO_DESC_INPUT_TERM_LEN\
266 + TUD_AUDIO_DESC_OUTPUT_TERM_LEN\
267 /* Interface 1, Alternate 0 */\
268 + TUD_AUDIO_DESC_STD_AS_INT_LEN\
269 /* Interface 1, Alternate 1 */\
270 + TUD_AUDIO_DESC_STD_AS_INT_LEN\
271 + TUD_AUDIO_DESC_CS_AS_INT_LEN\
272 + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\
273 + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\
274 + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\
275 /* Interface 1, Alternate 2 */\
276 + TUD_AUDIO_DESC_STD_AS_INT_LEN\
277 + TUD_AUDIO_DESC_CS_AS_INT_LEN\
278 + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\
279 + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\
280 + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\
281 /* Interface 2, Alternate 0 */\
282 + TUD_AUDIO_DESC_STD_AS_INT_LEN\
283 /* Interface 2, Alternate 1 */\
284 + TUD_AUDIO_DESC_STD_AS_INT_LEN\
285 + TUD_AUDIO_DESC_CS_AS_INT_LEN\
286 + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\
287 + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\
288 + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN\
289 /* Interface 2, Alternate 2 */\
290 + TUD_AUDIO_DESC_STD_AS_INT_LEN\
291 + TUD_AUDIO_DESC_CS_AS_INT_LEN\
292 + TUD_AUDIO_DESC_TYPE_I_FORMAT_LEN\
293 + TUD_AUDIO_DESC_STD_AS_ISO_EP_LEN\
294 + TUD_AUDIO_DESC_CS_AS_ISO_EP_LEN)
295 #ifndef CFG_TUD_AUDIO_FUNC_1_DESC_LEN
296 #define CFG_TUD_AUDIO_FUNC_1_DESC_LEN (TUD_AUDIO_HEADSET_STEREO_DESC_LEN)
297 #endif
298
299 // How many formats are used, need to adjust USB descriptor if changed
300 #ifndef CFG_TUD_AUDIO_FUNC_1_N_FORMATS
301 #define CFG_TUD_AUDIO_FUNC_1_N_FORMATS (2)
302 #endif
303
304 // Audio format type I specifications
305 #if defined(__RX__)
306 #ifndef CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE
307 // 16bit/48kHz is the best quality for Renesas RX
308 #define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE (48000)
309 #endif
310 #else
311 #ifndef CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE
312 // 24bit/96kHz is the best quality for full-speed, high-speed is needed beyond this
313 #define CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE (96000)
314 #endif
315 #endif
316 #ifndef CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX
317 #define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX (1)
318 #endif
319 #ifndef CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX
320 #define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX (2)
321 #endif
322
323 // 16bit in 16bit slots
324 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX
325 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX (2)
326 #endif
327 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX
328 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_TX (16)
329 #endif
330 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX
331 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX (2)
332 #endif
333 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX
334 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_RESOLUTION_RX (16)
335 #endif
336
337 #if defined(__RX__)
338 // 8bit in 8bit slots
339 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX
340 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX (1)
341 #endif
342 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX
343 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX (8)
344 #endif
345 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX
346 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX (1)
347 #endif
348 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX
349 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX (8)
350 #endif
351 #else
352 // 24bit in 32bit slots
353 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX
354 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX (4)
355 #endif
356 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX
357 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_TX (24)
358 #endif
359 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX
360 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX (4)
361 #endif
362 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX
363 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_RESOLUTION_RX (24)
364 #endif
365 #endif
366
367 // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense)
368 #ifndef CFG_TUD_AUDIO_ENABLE_EP_IN
369 #define CFG_TUD_AUDIO_ENABLE_EP_IN (1)
370 #endif
371
372 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN
373 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN (TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX))
374 #endif
375 #ifndef CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN
376 #define CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN (TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_TX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX))
377 #endif
378
379 #ifndef CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ
380 #define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ (TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN)*2)
381 #endif
382 #ifndef CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX
383 // Maximum EP IN size for all AS alternate settings used
384 #define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX (TU_MAX(CFG_TUD_AUDIO_FUNC_1_FORMAT_1_EP_SZ_IN, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_EP_SZ_IN))
385 #endif
386
387 // EP and buffer size - for isochronous EP´s, the buffer and EP size are equal (different sizes would not make sense)
388 #ifndef CFG_TUD_AUDIO_ENABLE_EP_OUT
389 #define CFG_TUD_AUDIO_ENABLE_EP_OUT (1)
390 #endif
391
392 #ifndef CFG_TUD_AUDIO_UNC_1_FORMAT_1_EP_SZ_OUT
393 #define CFG_TUD_AUDIO_UNC_1_FORMAT_1_EP_SZ_OUT (TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_1_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX))
394 #endif
395 #ifndef CFG_TUD_AUDIO_UNC_1_FORMAT_2_EP_SZ_OUT
396 #define CFG_TUD_AUDIO_UNC_1_FORMAT_2_EP_SZ_OUT (TUD_AUDIO_EP_SIZE(CFG_TUD_AUDIO_FUNC_1_MAX_SAMPLE_RATE, CFG_TUD_AUDIO_FUNC_1_FORMAT_2_N_BYTES_PER_SAMPLE_RX, CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_RX))
397 #endif
398
399 #ifndef CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ
400 #define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ (TU_MAX(CFG_TUD_AUDIO_UNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_UNC_1_FORMAT_2_EP_SZ_OUT)*2)
401 #endif
402 #ifndef CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX
403 // Maximum EP IN size for all AS alternate settings used
404 #define CFG_TUD_AUDIO_FUNC_1_EP_OUT_SZ_MAX (TU_MAX(CFG_TUD_AUDIO_UNC_1_FORMAT_1_EP_SZ_OUT, CFG_TUD_AUDIO_UNC_1_FORMAT_2_EP_SZ_OUT))
405 #endif
406
407 // Number of Standard AS Interface Descriptors (4.9.1) defined per audio function - this is required to be able to remember the current alternate settings of these interfaces - We restrict us here to have a constant number for all audio functions (which means this has to be the maximum number of AS interfaces an audio function has and a second audio function with less AS interfaces just wastes a few bytes)
408 #ifndef CFG_TUD_AUDIO_FUNC_1_N_AS_INT
409 #define CFG_TUD_AUDIO_FUNC_1_N_AS_INT (2)
410 #endif
411
412 // Size of control request buffer
413 #ifndef CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ
414 #define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ (64)
415 #endif
416 #endif
417
418 #if CFG_TUD_DFU==1
419 #ifndef CFG_TUD_DFU_XFER_BUFSIZE
420 #define CFG_TUD_DFU_XFER_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64)
421 #endif
422 #endif
423#endif
424
425#ifdef __HAS_HOST__
426 // TODO
427#endif
428
429#ifdef __cplusplus
430}
431#endif
432
433#endif /* _TUSB_CONFIG_H_ */