Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /