Select one of the symbols to view example projects that use it.
 
Outline
#include "tusb.h"
#include "pico/stdio_usb/reset_interface.h"
#include "pico/unique_id.h"
#define USBD_VID
#define USBD_PID
#define USBD_PID
#define USBD_MANUFACTURER
#define USBD_PRODUCT
#define TUD_RPI_RESET_DESC_LEN
#define USBD_DESC_LEN
#define USBD_DESC_LEN
#define USBD_CONFIGURATION_DESCRIPTOR_ATTRIBUTE
#define USBD_MAX_POWER_MA
#define USBD_CONFIGURATION_DESCRIPTOR_ATTRIBUTE
#define USBD_MAX_POWER_MA
#define USBD_ITF_CDC
#define USBD_ITF_MAX
#define USBD_ITF_RPI_RESET
#define USBD_ITF_MAX
#define USBD_CDC_EP_CMD
#define USBD_CDC_EP_OUT
#define USBD_CDC_EP_IN
#define USBD_CDC_CMD_MAX_SIZE
#define USBD_CDC_IN_OUT_MAX_SIZE
#define USBD_STR_0
#define USBD_STR_MANUF
#define USBD_STR_PRODUCT
#define USBD_STR_SERIAL
#define USBD_STR_CDC
#define USBD_STR_RPI_RESET
usbd_desc_device
usbd_desc_cfg
usbd_serial_str
usbd_desc_str
tud_descriptor_device_cb()
tud_descriptor_configuration_cb(uint8_t)
tud_descriptor_string_cb(uint8_t, uint16_t)
Files
loading...
SourceVuRaspberry Pi Pico SDK and ExamplesPicoSDKsrc/rp2_common/pico_stdio_usb/stdio_usb_descriptors.c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* * This file is based on a file originally part of the * MicroPython project, http://micropython.org/ * * The MIT License (MIT) * * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * Copyright (c) 2019 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. *//* ... */ #if !defined(LIB_TINYUSB_HOST) && !defined(LIB_TINYUSB_DEVICE) #include "tusb.h" #include "pico/stdio_usb/reset_interface.h" #include "pico/unique_id.h" #ifndef USBD_VID #define USBD_VID (0x2E8A) // Raspberry Pi #endif #ifndef USBD_PID #if PICO_RP2040 #define USBD_PID (0x000a) // Raspberry Pi Pico SDK CDC for RP2040 #else #define USBD_PID (0x0009) // Raspberry Pi Pico SDK CDC #endif/* ... */ #endif #ifndef USBD_MANUFACTURER #define USBD_MANUFACTURER "Raspberry Pi" #endif #ifndef USBD_PRODUCT #define USBD_PRODUCT "Pico" #endif #define TUD_RPI_RESET_DESC_LEN 9 #if !PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE #define USBD_DESC_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN) #else #define USBD_DESC_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_RPI_RESET_DESC_LEN) #endif #if !PICO_STDIO_USB_DEVICE_SELF_POWERED #define USBD_CONFIGURATION_DESCRIPTOR_ATTRIBUTE (0) #define USBD_MAX_POWER_MA (250) /* ... */#else #define USBD_CONFIGURATION_DESCRIPTOR_ATTRIBUTE TUSB_DESC_CONFIG_ATT_SELF_POWERED #define USBD_MAX_POWER_MA (1) /* ... */#endif #define USBD_ITF_CDC (0) // needs 2 interfaces #if !PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE #define USBD_ITF_MAX (2) #else #define USBD_ITF_RPI_RESET (2) #define USBD_ITF_MAX (3) /* ... */#endif #define USBD_CDC_EP_CMD (0x81) #define USBD_CDC_EP_OUT (0x02) #define USBD_CDC_EP_IN (0x82) #define USBD_CDC_CMD_MAX_SIZE (8) #define USBD_CDC_IN_OUT_MAX_SIZE (64) #define USBD_STR_0 (0x00) #define USBD_STR_MANUF (0x01) #define USBD_STR_PRODUCT (0x02) #define USBD_STR_SERIAL (0x03) #define USBD_STR_CDC (0x04) #define USBD_STR_RPI_RESET (0x05) 11 defines // Note: descriptors returned from callbacks must exist long enough for transfer to complete static const tusb_desc_device_t usbd_desc_device = { .bLength = sizeof(tusb_desc_device_t), .bDescriptorType = TUSB_DESC_DEVICE, .bcdUSB = 0x0210, .bDeviceClass = TUSB_CLASS_MISC, .bDeviceSubClass = MISC_SUBCLASS_COMMON, .bDeviceProtocol = MISC_PROTOCOL_IAD, .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .idVendor = USBD_VID, .idProduct = USBD_PID, .bcdDevice = 0x0100, .iManufacturer = USBD_STR_MANUF, .iProduct = USBD_STR_PRODUCT, .iSerialNumber = USBD_STR_SERIAL, .bNumConfigurations = 1, ...}; #define TUD_RPI_RESET_DESCRIPTOR(_itfnum, _stridx) \ /* Interface */\ 9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUSB_CLASS_VENDOR_SPECIFIC, RESET_INTERFACE_SUBCLASS, RESET_INTERFACE_PROTOCOL, _stridx,... static const uint8_t usbd_desc_cfg[USBD_DESC_LEN] = { TUD_CONFIG_DESCRIPTOR(1, USBD_ITF_MAX, USBD_STR_0, USBD_DESC_LEN, USBD_CONFIGURATION_DESCRIPTOR_ATTRIBUTE, USBD_MAX_POWER_MA), TUD_CDC_DESCRIPTOR(USBD_ITF_CDC, USBD_STR_CDC, USBD_CDC_EP_CMD, USBD_CDC_CMD_MAX_SIZE, USBD_CDC_EP_OUT, USBD_CDC_EP_IN, USBD_CDC_IN_OUT_MAX_SIZE), #if PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE TUD_RPI_RESET_DESCRIPTOR(USBD_ITF_RPI_RESET, USBD_STR_RPI_RESET) #endif ...}; static char usbd_serial_str[PICO_UNIQUE_BOARD_ID_SIZE_BYTES * 2 + 1]; static const char *const usbd_desc_str[] = { [USBD_STR_MANUF] = USBD_MANUFACTURER, [USBD_STR_PRODUCT] = USBD_PRODUCT, [USBD_STR_SERIAL] = usbd_serial_str, [USBD_STR_CDC] = "Board CDC", #if PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE [USBD_STR_RPI_RESET] = "Reset", #endif ...}; const uint8_t *tud_descriptor_device_cb(void) { return (const uint8_t *)&usbd_desc_device; }{ ... } const uint8_t *tud_descriptor_configuration_cb(__unused uint8_t index) { return usbd_desc_cfg; }{ ... } const uint16_t *tud_descriptor_string_cb(uint8_t index, __unused uint16_t langid) { #ifndef USBD_DESC_STR_MAX #define USBD_DESC_STR_MAX (20) #elif USBD_DESC_STR_MAX > 127 #error USBD_DESC_STR_MAX too high (max is 127). #elif USBD_DESC_STR_MAX < 17 #error USBD_DESC_STR_MAX too low (min is 17). #endif static uint16_t desc_str[USBD_DESC_STR_MAX]; // Assign the SN using the unique flash id if (!usbd_serial_str[0]) { pico_get_unique_board_id_string(usbd_serial_str, sizeof(usbd_serial_str)); }if (!usbd_serial_str[0]) { ... } uint8_t len; if (index == 0) { desc_str[1] = 0x0409; // supported language is English len = 1; }if (index == 0) { ... } else { if (index >= sizeof(usbd_desc_str) / sizeof(usbd_desc_str[0])) { return NULL; }if (index >= sizeof(usbd_desc_str) / sizeof(usbd_desc_str[0])) { ... } const char *str = usbd_desc_str[index]; for (len = 0; len < USBD_DESC_STR_MAX - 1 && str[len]; ++len) { desc_str[1 + len] = str[len]; }for (len = 0; len < USBD_DESC_STR_MAX - 1 && str[len]; ++len) { ... } }else { ... } // first byte is length (including header), second byte is string type desc_str[0] = (uint16_t) ((TUSB_DESC_STRING << 8) | (2 * len + 2)); return desc_str; }{ ... } /* ... */#endif
Details
Show:
from
Types: Columns:
This file uses the notable symbols shown below. Click anywhere in the file to view more details.