Skip to content

Commit edc13ba

Browse files
committed
add itfnum to getDescriptor()
1 parent 11d6f54 commit edc13ba

File tree

4 files changed

+9
-18
lines changed

4 files changed

+9
-18
lines changed

cores/arduino/Adafruit_TinyUSB_Core/Adafruit_USBD_CDC.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ Adafruit_USBD_CDC::Adafruit_USBD_CDC(void)
3737

3838
}
3939

40-
uint16_t Adafruit_USBD_CDC::getDescriptor(uint8_t* buf, uint16_t bufsize)
40+
uint16_t Adafruit_USBD_CDC::getDescriptor(uint8_t itfnum, uint8_t* buf, uint16_t bufsize)
4141
{
4242
// CDC is mostly always existed for DFU
43-
// usb core will automatically update interface number and endpoint number
44-
uint8_t desc[] = { TUD_CDC_DESCRIPTOR(0, 0, EPIN, 8, EPOUT, EPIN, 64) };
43+
// usb core will automatically update endpoint number
44+
uint8_t desc[] = { TUD_CDC_DESCRIPTOR(itfnum, 0, EPIN, 8, EPOUT, EPIN, 64) };
4545
uint16_t const len = sizeof(desc);
4646

4747
if ( bufsize < len ) return 0;

cores/arduino/Adafruit_TinyUSB_Core/Adafruit_USBD_CDC.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class Adafruit_USBD_CDC : public Stream, Adafruit_USBD_Interface
3434
Adafruit_USBD_CDC(void);
3535

3636
// fron Adafruit_USBD_Interface
37-
virtual uint16_t getDescriptor(uint8_t* buf, uint16_t bufsize);
37+
virtual uint16_t getDescriptor(uint8_t itfnum, uint8_t* buf, uint16_t bufsize);
3838

3939
void setPins(uint8_t pin_rx, uint8_t pin_tx) { (void) pin_rx; (void) pin_tx; }
4040
void begin(uint32_t baud_count);

cores/arduino/Adafruit_TinyUSB_Core/Adafruit_USBD_Device.cpp

+4-13
Original file line numberDiff line numberDiff line change
@@ -95,26 +95,17 @@ Adafruit_USBD_Device::Adafruit_USBD_Device(void)
9595
bool Adafruit_USBD_Device::addInterface(Adafruit_USBD_Interface& itf)
9696
{
9797
uint8_t* desc = _desc_cfg+_desc_cfglen;
98-
uint16_t const len = itf.getDescriptor(desc, sizeof(_desc_cfg)-_desc_cfglen);
98+
uint16_t const len = itf.getDescriptor(_itf_count, desc, sizeof(_desc_cfg)-_desc_cfglen);
9999
uint8_t* desc_end = desc+len;
100100

101101
if ( !len ) return false;
102102

103-
// Handle IAD
104-
if ( desc[1] == TUSB_DESC_INTERFACE_ASSOCIATION )
105-
{
106-
// update starting interface
107-
((tusb_desc_interface_assoc_t*) desc)->bFirstInterface = _itf_count;
108-
109-
desc += desc[0]; // next
110-
}
111-
112103
while (desc < desc_end)
113104
{
114105
if (desc[1] == TUSB_DESC_INTERFACE)
115106
{
116-
// No alternate interface support
117-
((tusb_desc_interface_t*) desc)->bInterfaceNumber = _itf_count++;
107+
tusb_desc_interface_t* desc_itf = (tusb_desc_interface_t*) desc;
108+
if (desc_itf->bAlternateSetting == 0) _itf_count++;
118109
}else if (desc[1] == TUSB_DESC_ENDPOINT)
119110
{
120111
tusb_desc_endpoint_t* desc_ep = (tusb_desc_endpoint_t*) desc;
@@ -127,7 +118,7 @@ bool Adafruit_USBD_Device::addInterface(Adafruit_USBD_Interface& itf)
127118

128119
_desc_cfglen += len;
129120

130-
// Update config descriptor
121+
// Update configuration descriptor
131122
tusb_desc_configuration_t* config = (tusb_desc_configuration_t*)_desc_cfg;
132123
config->wTotalLength = _desc_cfglen;
133124
config->bNumInterfaces = _itf_count;

cores/arduino/Adafruit_TinyUSB_Core/Adafruit_USBD_Device.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
class Adafruit_USBD_Interface
3131
{
3232
public:
33-
virtual uint16_t getDescriptor(uint8_t* buf, uint16_t bufsize) = 0;
33+
virtual uint16_t getDescriptor(uint8_t itfnum, uint8_t* buf, uint16_t bufsize) = 0;
3434
};
3535

3636
class Adafruit_USBD_Device

0 commit comments

Comments
 (0)