@@ -83,8 +83,9 @@ Adafruit_USBD_Device::Adafruit_USBD_Device(void)
83
83
.bMaxPower = TUSB_DESC_CONFIG_POWER_MA (USB_CONFIG_POWER)
84
84
};
85
85
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);
88
89
_desc_cfglen = sizeof (tusb_desc_configuration_t );
89
90
_itf_count = 0 ;
90
91
_epin_count = _epout_count = 1 ;
@@ -96,7 +97,7 @@ Adafruit_USBD_Device::Adafruit_USBD_Device(void)
96
97
bool Adafruit_USBD_Device::addInterface (Adafruit_USBD_Interface& itf)
97
98
{
98
99
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);
100
101
uint8_t * desc_end = desc+len;
101
102
102
103
if ( !len ) return false ;
@@ -127,6 +128,16 @@ bool Adafruit_USBD_Device::addInterface(Adafruit_USBD_Interface& itf)
127
128
return true ;
128
129
}
129
130
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
+
130
141
void Adafruit_USBD_Device::setID (uint16_t vid, uint16_t pid)
131
142
{
132
143
_desc_device.idVendor = vid;
0 commit comments