@@ -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)
9697bool 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+
130141void Adafruit_USBD_Device::setID (uint16_t vid, uint16_t pid)
131142{
132143 _desc_device.idVendor = vid;
0 commit comments