Skip to content

Commit 4ebe747

Browse files
authored
Merge pull request #471 from mgcookson/disable-unor4wifi-dfu-device
USB: Remove DFU interface from Uno R4 WiFi
2 parents ecc4ed8 + 43ab7f1 commit 4ebe747

File tree

2 files changed

+51
-21
lines changed

2 files changed

+51
-21
lines changed

cores/arduino/usb/USB.cpp

Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ extern "C" {
3131
#include "r_usb_basic_api.h"
3232
#include "r_usb_pcdc_api.h"
3333

34-
#define USBD_ITF_CDC (0) // needs 2 interfaces
35-
3634
#ifndef USBD_CDC_EP_CMD
3735
#define USBD_CDC_EP_CMD (0x81)
3836
#endif
@@ -121,45 +119,73 @@ const uint8_t *tud_descriptor_configuration_cb(uint8_t index) {
121119
void __SetupUSBDescriptor() {
122120
if (!usbd_desc_cfg) {
123121

124-
uint8_t interface_count = (__USBInstallSerial ? 3 : 0) + (__USBGetHIDReport ? 1 : 0) + (__USBInstallMSD ? 1 : 0);
122+
// This tracks the next (0 based) interface number to assign, incremented after each
123+
// interface descriptor is created. After all interface descriptors have been created,
124+
// it represents the (1 based) number of interface descriptors that have been defined.
125+
uint8_t interface_count = 0;
125126

126-
uint8_t cdc_desc[TUD_CDC_DESC_LEN + TUD_DFU_RT_DESC_LEN] = {
127+
/*
128+
* ----- CDC
129+
*/
130+
bool install_CDC = __USBInstallSerial;
131+
uint8_t cdc_desc[TUD_CDC_DESC_LEN] = {
127132
// Interface number, string index, protocol, report descriptor len, EP In & Out address, size & polling interval
128-
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),
129-
TUD_DFU_RT_DESCRIPTOR(USBD_ITF_CDC+2, USBD_STR_DFU_RT, 0x0d, 1000, 4096),
133+
TUD_CDC_DESCRIPTOR(interface_count, 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)
130134
};
135+
interface_count += (install_CDC ? 2 : 0);
131136

132137
/*
133-
* ----- HID
134-
*/
138+
* ----- DFU
139+
*/
140+
bool install_DFU = false;
141+
#if CFG_TUD_DFU_RUNTIME
142+
install_DFU = __USBInstallSerial;
143+
uint8_t dfu_desc[TUD_DFU_RT_DESC_LEN] = {
144+
// Interface number, string index, attribute, timeout, xfer size
145+
TUD_DFU_RT_DESCRIPTOR(interface_count, USBD_STR_DFU_RT, 0x0d, 1000, 4096)
146+
};
147+
interface_count += (install_DFU ? 1 : 0);
148+
#else
149+
uint8_t dfu_desc[0] = {};
150+
#endif
135151

152+
/*
153+
* ----- HID
154+
*/
155+
bool install_HID = false;
136156
size_t hid_report_len = 0;
137157
if (__USBGetHIDReport) {
158+
install_HID = true;
138159
__USBGetHIDReport(&hid_report_len);
139160
}
140-
uint8_t hid_itf = __USBInstallSerial ? 3 : 0;
141161
uint8_t hid_desc[TUD_HID_DESC_LEN] = {
142162
// Interface number, string index, protocol, report descriptor len, EP In & Out address, size & polling interval
143-
TUD_HID_DESCRIPTOR(hid_itf, 0, HID_ITF_PROTOCOL_NONE, hid_report_len, USBD_HID_EP, CFG_TUD_HID_EP_BUFSIZE, 10)
163+
TUD_HID_DESCRIPTOR(interface_count, 0, HID_ITF_PROTOCOL_NONE, hid_report_len, USBD_HID_EP, CFG_TUD_HID_EP_BUFSIZE, 10)
144164
};
165+
interface_count += (install_HID ? 1: 0);
145166

146167
/*
147168
* ----- MASS STORAGE DEVICE
148-
*/
149-
169+
*/
170+
bool install_MSD = false;
150171
#if CFG_TUD_MSC
151-
uint8_t msd_itf = (__USBInstallSerial ? 3 : 0) + (__USBGetHIDReport ? 1 : 0);
172+
install_MSD = __USBInstallMSD;
152173
uint8_t msd_desc[TUD_MSC_DESC_LEN] = {
153174
// Interface number, string index, EP Out & EP In address, EP size
154-
TUD_MSC_DESCRIPTOR(msd_itf, 0, USBD_MSD_EP_OUT, USBD_MSD_EP_IN, USBD_MSD_IN_OUT_SIZE)
175+
TUD_MSC_DESCRIPTOR(interface_count, 0, USBD_MSD_EP_OUT, USBD_MSD_EP_IN, USBD_MSD_IN_OUT_SIZE)
155176
};
177+
interface_count += (install_MSD ? 1 : 0);
156178
#else
157179
uint8_t msd_desc[0] = {};
158180
#endif
159181

160-
161-
int usbd_desc_len = TUD_CONFIG_DESC_LEN + (__USBInstallSerial ? sizeof(cdc_desc) : 0) + (__USBGetHIDReport ? sizeof(hid_desc) : 0) + (__USBInstallMSD ? sizeof(msd_desc) : 0);
162-
182+
// Create configuration descriptor
183+
int usbd_desc_len =
184+
TUD_CONFIG_DESC_LEN
185+
+ (install_CDC ? sizeof(cdc_desc) : 0)
186+
+ (install_DFU ? sizeof(dfu_desc) : 0)
187+
+ (install_HID ? sizeof(hid_desc) : 0)
188+
+ (install_MSD ? sizeof(msd_desc) : 0);
163189
uint8_t tud_cfg_desc[TUD_CONFIG_DESC_LEN] = {
164190
// Config number, interface count, string index, total length, attribute, power in mA
165191
TUD_CONFIG_DESCRIPTOR(1, interface_count, USBD_STR_0, usbd_desc_len, TUSB_DESC_CONFIG_ATT_SELF_POWERED, 500)
@@ -172,15 +198,19 @@ void __SetupUSBDescriptor() {
172198
uint8_t *ptr = usbd_desc_cfg;
173199
memcpy(ptr, tud_cfg_desc, sizeof(tud_cfg_desc));
174200
ptr += sizeof(tud_cfg_desc);
175-
if (__USBInstallSerial) {
201+
if (install_CDC) {
176202
memcpy(ptr, cdc_desc, sizeof(cdc_desc));
177203
ptr += sizeof(cdc_desc);
178204
}
179-
if (__USBGetHIDReport) {
205+
if (install_DFU) {
206+
memcpy(ptr, dfu_desc, sizeof(dfu_desc));
207+
ptr += sizeof(dfu_desc);
208+
}
209+
if (install_HID) {
180210
memcpy(ptr, hid_desc, sizeof(hid_desc));
181211
ptr += sizeof(hid_desc);
182212
}
183-
if (__USBInstallMSD) {
213+
if (install_MSD) {
184214
memcpy(ptr, msd_desc, sizeof(msd_desc));
185215
ptr += sizeof(msd_desc);
186216
}

variants/UNOWIFIR4/tusb_config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
#define CFG_TUD_HID 1
8181
#define CFG_TUD_MIDI 0
8282
#define CFG_TUD_VENDOR 0
83-
#define CFG_TUD_DFU_RUNTIME 1
83+
#define CFG_TUD_DFU_RUNTIME 0
8484

8585
// CDC FIFO size of TX and RX
8686
#define CFG_TUD_CDC_RX_BUFSIZE ((TUD_OPT_HIGH_SPEED ? 512 : 64) * 4)

0 commit comments

Comments
 (0)