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