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 
21 #include "tusb_config.h" /* defined by the application */
22 #include "tinyusb.h"
23 
24 #if !DOXYGEN
25 
26 #ifdef __cplusplus
27 extern "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)
34 enum {
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)
70 enum {
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)
107 enum {
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.