Loading...
Searching...
No Matches
tinyusb_descriptors.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 Gunar Schorcht
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser
5 * General Public License v2.1. See the file LICENSE in the top level
6 * directory for more details.
7 */
8
9#pragma once
10
20
21#include "tusb_config.h" /* defined by the application */
22#include "tinyusb.h"
23
24#if !DOXYGEN
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/* don't compile this part if CONFIG_TUSBD_USE_CUSTOM_DESC is set */
31#if !defined(CONFIG_TUSBD_USE_CUSTOM_DESC)
32
33#if !defined(HAVE_TUSBD_ITF_TYPE)
34enum {
35#if CONFIG_TUSBD_CDC_NUMOF > 0
36 TUSBD_ITF_CDC_0, /* CDC0 Notification interface */
37 TUSBD_ITF_CDC_0_DATA,
38#endif
39#if CONFIG_TUSBD_CDC_NUMOF > 1
40 TUSBD_ITF_CDC_1,
41 TUSBD_ITF_CDC_1_DATA,
42#endif
43#if CONFIG_TUSBD_DFU_NUMOF
44 TUSBD_ITF_DFU,
45#endif
46#if CONFIG_TUSBD_DFU_RT_NUMOF
47 TUSBD_ITF_DFU_RT,
48#endif
49#if CONFIG_TUSBD_HID_NUMOF > 0
50 TUSBD_ITF_HID_0,
51#endif
52#if CONFIG_TUSBD_HID_NUMOF > 1
53 TUSBD_ITF_HID_1,
54#endif
55#if CONFIG_TUSBD_MSC_NUMOF
56 TUSBD_ITF_MSC,
57#endif
58#if CONFIG_TUSBD_NET_NUMOF
59 TUSBD_ITF_NET,
60 TUSBD_ITF_NET_DATA,
61#endif
62#if CONFIG_TUSBD_VENDOR_NUMOF
63 TUSBD_ITF_VENDOR,
64#endif
65 TUSBD_ITF_NUMOF,
66};
67#endif /* !defined(HAVE_TUSBD_ITF_TYPE) */
68
69#if !defined(HAVE_TUSBD_EP_TYPE)
70enum {
71#if CONFIG_TUSBD_CDC_NUMOF > 0
72 TUSBD_EP_CDC_0_NOTIF = TUSBD_ITF_CDC_0 + 0x81,
73 TUSBD_EP_CDC_0_OUT = TUSBD_ITF_CDC_0_DATA + 0x01,
74 TUSBD_EP_CDC_0_IN = TUSBD_ITF_CDC_0_DATA + 0x81,
75#endif
76#if CONFIG_TUSBD_CDC_NUMOF > 1
77 TUSBD_EP_CDC_1_NOTIF = TUSBD_ITF_CDC_1 + 0x81,
78 TUSBD_EP_CDC_1_OUT = TUSBD_ITF_CDC_1_DATA + 0x01,
79 TUSBD_EP_CDC_1_IN = TUSBD_ITF_CDC_1_DATA + 0x81,
80#endif
81#if CONFIG_TUSBD_HID_NUMOF > 0
82 TUSBD_EP_HID_0_OUT = TUSBD_ITF_HID_0 + 0x01,
83 TUSBD_EP_HID_0_IN = TUSBD_ITF_HID_0 + 0x81,
84#endif
85#if CONFIG_TUSBD_HID_NUMOF > 1
86 TUSBD_EP_HID_1_OUT = TUSBD_ITF_HID_1 + 0x01,
87 TUSBD_EP_HID_1_IN = TUSBD_ITF_HID_1 + 0x81,
88#endif
89#if CONFIG_TUSBD_MSC_NUMOF
90 TUSBD_EP_MSC_OUT = TUSBD_ITF_MSC + 0x01,
91 TUSBD_EP_MSC_IN = TUSBD_ITF_MSC + 0x81,
92#endif
93#if CONFIG_TUSBD_NET_NUMOF
94 TUSBD_EP_NET_NOTIF = TUSBD_ITF_NET + 0x81,
95 TUSBD_EP_NET_OUT = TUSBD_ITF_NET_DATA + 0x01,
96 TUSBD_EP_NET_IN = TUSBD_ITF_NET_DATA + 0x81,
97#endif
98#if CONFIG_TUSBD_VENDOR_NUMOF
99 TUSBD_EP_VENDOR_OUT = TUSBD_ITF_VENDOR + 0x01,
100 TUSBD_EP_VENDOR_IN = TUSBD_ITF_VENDOR + 0x81,
101#endif
102 TUSBD_EP_NUMOF,
103};
104#endif /* !defined(HAVE_TUSBD_EP_TYPE) */
105
106#if !defined(HAVE_TUSBD_STR_IDX_TYPE)
107enum {
108 TUSBD_STR_IDX_LANGUAGE = 0,
109 TUSBD_STR_IDX_MANUFACTURER,
110 TUSBD_STR_IDX_PRODUCT,
111 TUSBD_STR_IDX_SERIAL,
112#if CONFIG_TUSBD_CDC_NUMOF > 0
113 TUSBD_STR_IDX_CDC_0,
114#endif
115#if CONFIG_TUSBD_CDC_NUMOF > 1
116 TUSBD_STR_IDX_CDC_1,
117#endif
118#if CONFIG_TUSBD_DFU_NUMOF
119 TUSBD_STR_IDX_DFU_SLOT_0,
120 TUSBD_STR_IDX_DFU_SLOT_1,
121#endif
122#if CONFIG_TUSBD_DFU_RT_NUMOF
123 TUSBD_STR_IDX_DFU_RT,
124#endif
125#if CONFIG_TUSBD_HID_NUMOF > 0
126 TUSBD_STR_IDX_HID_0,
127#endif
128#if CONFIG_TUSBD_HID_NUMOF > 1
129 TUSBD_STR_IDX_HID_1,
130#endif
131#if CONFIG_TUSBD_MSC_NUMOF
132 TUSBD_STR_IDX_MSC,
133#endif
134
135#if CONFIG_TUSBD_NET_NUMOF
136#if CONFIG_TUSBD_NET_CDC_ECM
137 TUSBD_STR_IDX_NET_CDC_ECM,
138#endif /* CONFIG_TUSBD_NET_CDC_ECM */
139#if CONFIG_TUSBD_NET_CDC_NCM
140 TUSBD_STR_IDX_NET_CDC_NCM,
141#endif /* CONFIG_TUSBD_NET_CDC_NCM */
142#if CONFIG_TUSBD_NET_RNDIS
143 TUSBD_STR_IDX_NET_RNDIS,
144#endif /* CONFIG_TUSBD_NET_RNDIS */
145 TUSBD_STR_IDX_NET_MAC,
146#endif /* CONFIG_TUSBD_NET_NUMOF */
147
148#if CONFIG_TUSBD_VENDOR_NUMOF
149 TUSBD_STR_IDX_VENDOR,
150#endif
151 TUSBD_STR_IDX_NUMOF,
152};
153#endif /* !defined(HAVE_TUSBD_STR_IDX_TYPE) */
154
155/* only two slots are supported */
156#define CONFIG_TUSBD_DFU_ALT_NUMOF 2
157
158#if !defined(TUSBD_DESC_TOTAL_LEN)
159
160#if CONFIG_TUSBD_NET_CDC_ECM
161#define TUSBD_DESC_NET_LEN TUD_CDC_ECM_DESC_LEN
162#elif CONFIG_TUSBD_NET_CDC_NCM
163#define TUSBD_DESC_NET_LEN TUD_CDC_NCM_DESC_LEN
164#elif CONFIG_TUSBD_NET_RNDIS
165#define TUSBD_DESC_NET_LEN TUD_RNDIS_DESC_LEN
166#else
167#define TUSBD_DESC_NET_LEN 0
168#endif
169
170#define TUSBD_DESC_TOTAL_LEN (TUD_CONFIG_DESC_LEN + \
171 (CONFIG_TUSBD_CDC_NUMOF * TUD_CDC_DESC_LEN) + \
172 (CONFIG_TUSBD_DFU_NUMOF * TUD_DFU_DESC_LEN(CONFIG_TUSBD_DFU_ALT_NUMOF)) + \
173 (CONFIG_TUSBD_DFU_RT_NUMOF * TUD_DFU_RT_DESC_LEN) + \
174 (CONFIG_TUSBD_HID_NUMOF * TUD_HID_INOUT_DESC_LEN) + \
175 (CONFIG_TUSBD_MSC_NUMOF * TUD_MSC_DESC_LEN) + \
176 (CONFIG_TUSBD_VENDOR_NUMOF * TUD_VENDOR_DESC_LEN) + \
177 TUSBD_DESC_NET_LEN)
178
179#endif /* !defined(TUSBD_DESC_TOTAL_LEN) */
180
181/* If CDC ECM and RNDIS are used simultaneously, an alternative configuration
182 * descriptor is required. In this case, the main configuration descriptor
183 * contains the CDC ECM interface descriptor and the alternative configuration
184 * descriptor contains the RNDIS interface descriptor. */
185#if CONFIG_TUSBD_NET_CDC_ECM && CONFIG_TUSBD_NET_RNDIS
186
187#define TUSBD_DESC_ALT_NET_LEN TUD_RNDIS_DESC_LEN
188
189#define TUSBD_DESC_ALT_TOTAL_LEN (TUD_CONFIG_DESC_LEN + \
190 (CONFIG_TUSBD_CDC_NUMOF * TUD_CDC_DESC_LEN) + \
191 (CONFIG_TUSBD_DFU_NUMOF * TUD_DFU_DESC_LEN(CONFIG_TUSBD_DFU_ALT_NUMOF)) + \
192 (CONFIG_TUSBD_DFU_RT_NUMOF * TUD_DFU_RT_DESC_LEN) + \
193 (CONFIG_TUSBD_HID_NUMOF * TUD_HID_INOUT_DESC_LEN) + \
194 (CONFIG_TUSBD_MSC_NUMOF * TUD_MSC_DESC_LEN) + \
195 (CONFIG_TUSBD_VENDOR_NUMOF * TUD_VENDOR_DESC_LEN) + \
196 TUSBD_DESC_ALT_NET_LEN)
197
198#endif /* CONFIG_TUSBD_NET_CDC_ECM && CONFIG_TUSBD_NET_RNDIS */
199
200#endif /* !defined(CONFIG_TUSBD_USE_CUSTOM_DESC) */
201
202#ifdef __cplusplus
203}
204#endif
205
206#endif /* !DOXYGEN */
TinyUSB API.
TinyUSB default configurations.