Skip to content

Commit 04eb7d1

Browse files
authored
Merge pull request #173 from kaysievers/tinyusb-descriptor-size
tinyusb: Allow to replace the built-in descriptor buffer
2 parents ef4072f + dcd4e5b commit 04eb7d1

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

cores/arduino/Adafruit_TinyUSB_Core/Adafruit_USBD_Device.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,9 @@ Adafruit_USBD_Device::Adafruit_USBD_Device(void)
8383
.bMaxPower = TUSB_DESC_CONFIG_POWER_MA(USB_CONFIG_POWER)
8484
};
8585

86-
memcpy(_desc_cfg, &dev_cfg, sizeof(tusb_desc_configuration_t));
87-
86+
memcpy(_desc_cfg_buffer, &dev_cfg, sizeof(tusb_desc_configuration_t));
87+
_desc_cfg = _desc_cfg_buffer;
88+
_desc_cfg_size = sizeof(_desc_cfg_buffer);
8889
_desc_cfglen = sizeof(tusb_desc_configuration_t);
8990
_itf_count = 0;
9091
_epin_count = _epout_count = 1;
@@ -96,7 +97,7 @@ Adafruit_USBD_Device::Adafruit_USBD_Device(void)
9697
bool Adafruit_USBD_Device::addInterface(Adafruit_USBD_Interface& itf)
9798
{
9899
uint8_t* desc = _desc_cfg+_desc_cfglen;
99-
uint16_t const len = itf.getDescriptor(_itf_count, desc, sizeof(_desc_cfg)-_desc_cfglen);
100+
uint16_t const len = itf.getDescriptor(_itf_count, desc, _desc_cfg_size-_desc_cfglen);
100101
uint8_t* desc_end = desc+len;
101102

102103
if ( !len ) return false;
@@ -127,6 +128,16 @@ bool Adafruit_USBD_Device::addInterface(Adafruit_USBD_Interface& itf)
127128
return true;
128129
}
129130

131+
void Adafruit_USBD_Device::setDescriptorBuffer(uint8_t* buf, uint32_t buflen)
132+
{
133+
if (buflen < _desc_cfg_size)
134+
return;
135+
136+
memcpy(buf, _desc_cfg, _desc_cfglen);
137+
_desc_cfg = buf;
138+
_desc_cfg_size = buflen;
139+
}
140+
130141
void Adafruit_USBD_Device::setID(uint16_t vid, uint16_t pid)
131142
{
132143
_desc_device.idVendor = vid;

cores/arduino/Adafruit_TinyUSB_Core/Adafruit_USBD_Device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ class Adafruit_USBD_Device
3838
private:
3939
tusb_desc_device_t _desc_device;
4040

41-
uint8_t _desc_cfg[256];
41+
uint8_t *_desc_cfg;
42+
uint16_t _desc_cfg_size;
4243
uint16_t _desc_cfglen;
44+
uint8_t _desc_cfg_buffer[256];
4345

4446
uint8_t _itf_count;
4547

@@ -50,6 +52,7 @@ class Adafruit_USBD_Device
5052
Adafruit_USBD_Device(void);
5153

5254
bool addInterface(Adafruit_USBD_Interface& itf);
55+
void setDescriptorBuffer(uint8_t* buf, uint32_t buflen);
5356

5457
void setID(uint16_t vid, uint16_t pid);
5558
void setVersion(uint16_t bcd);

0 commit comments

Comments
 (0)