Fix USBCDC_ECM descriptors

Replace static arrays used for iMAC and config descriptor with class members
Minor coding style fixes
pull/9443/head
Juha Ylinen 2019-01-24 13:26:30 +02:00
parent 4e4653b7d4
commit e7416db621
2 changed files with 22 additions and 13 deletions

View File

@ -301,7 +301,7 @@ void USBCDC_ECM::callback_state_change(DeviceState new_state)
const uint8_t *USBCDC_ECM::device_desc() const uint8_t *USBCDC_ECM::device_desc()
{ {
uint8_t ep0_size = endpoint_max_packet_size(0x00); uint8_t ep0_size = endpoint_max_packet_size(0x00);
uint8_t deviceDescriptorTemp[] = { uint8_t device_descriptor_temp[] = {
DEVICE_DESCRIPTOR_LENGTH, // bLength DEVICE_DESCRIPTOR_LENGTH, // bLength
DEVICE_DESCRIPTOR, // bDescriptorType DEVICE_DESCRIPTOR, // bDescriptorType
0x00, 0x02, // bcdUSB 2.0 0x00, 0x02, // bcdUSB 2.0
@ -320,9 +320,9 @@ const uint8_t *USBCDC_ECM::device_desc()
STRING_OFFSET_ISERIAL, // iSerialNumber STRING_OFFSET_ISERIAL, // iSerialNumber
0x01 // bNumConfigurations 0x01 // bNumConfigurations
}; };
MBED_ASSERT(sizeof(deviceDescriptorTemp) == sizeof(deviceDescriptor)); MBED_ASSERT(sizeof(device_descriptor_temp) == sizeof(device_descriptor));
memcpy(deviceDescriptor, deviceDescriptorTemp, sizeof(deviceDescriptor)); memcpy(device_descriptor, device_descriptor_temp, sizeof(device_descriptor));
return deviceDescriptor; return device_descriptor;
} }
const uint8_t *USBCDC_ECM::string_iproduct_desc() const uint8_t *USBCDC_ECM::string_iproduct_desc()
@ -337,7 +337,7 @@ const uint8_t *USBCDC_ECM::string_iproduct_desc()
const uint8_t *USBCDC_ECM::string_iconfiguration_desc() const uint8_t *USBCDC_ECM::string_iconfiguration_desc()
{ {
static uint8_t string_imac_addr[26] = {0}; uint8_t string_imac_addr_temp[26] = {0};
const char unicodes[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', const char unicodes[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' 'A', 'B', 'C', 'D', 'E', 'F'
}; };
@ -345,14 +345,17 @@ const uint8_t *USBCDC_ECM::string_iconfiguration_desc()
mbed_mac_address(mac); mbed_mac_address(mac);
string_imac_addr[0] = 26; string_imac_addr_temp[0] = 26;
string_imac_addr[1] = STRING_DESCRIPTOR; string_imac_addr_temp[1] = STRING_DESCRIPTOR;
/* Convert MAC address to USB CDC string format */ /* Convert MAC address to USB CDC string format */
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
string_imac_addr[i * 4 + 2] = unicodes[mac[i] >> 4]; string_imac_addr_temp[i * 4 + 2] = unicodes[mac[i] >> 4];
string_imac_addr[i * 4 + 4] = unicodes[mac[i] & 0xF]; string_imac_addr_temp[i * 4 + 4] = unicodes[mac[i] & 0xF];
} }
return string_imac_addr;
MBED_ASSERT(sizeof(string_imac_addr_temp) == sizeof(_string_imac_addr));
memcpy(_string_imac_addr, string_imac_addr_temp, sizeof(string_imac_addr_temp));
return _string_imac_addr;
} }
const uint8_t *USBCDC_ECM::string_iserial_desc() const uint8_t *USBCDC_ECM::string_iserial_desc()
@ -373,7 +376,7 @@ const uint8_t *USBCDC_ECM::configuration_desc(uint8_t index)
return NULL; return NULL;
} }
static const uint8_t configDescriptor[] = { uint8_t config_descriptor_temp[] = {
// configuration descriptor, USB spec 9.6.3, page 264-265, Table 9-10 // configuration descriptor, USB spec 9.6.3, page 264-265, Table 9-10
0x09, // bLength 0x09, // bLength
CONFIGURATION_DESCRIPTOR, // bDescriptorType CONFIGURATION_DESCRIPTOR, // bDescriptorType
@ -469,7 +472,10 @@ const uint8_t *USBCDC_ECM::configuration_desc(uint8_t index)
(uint8_t) MSB(MAX_PACKET_SIZE_BULK), // wMaxPacketSize (MSB) (uint8_t) MSB(MAX_PACKET_SIZE_BULK), // wMaxPacketSize (MSB)
0 // bInterval 0 // bInterval
}; };
return configDescriptor;
MBED_ASSERT(sizeof(config_descriptor_temp) == sizeof(_config_descriptor));
memcpy(_config_descriptor, config_descriptor_temp, sizeof(config_descriptor_temp));
return _config_descriptor;
} }
void USBCDC_ECM::_int_callback() void USBCDC_ECM::_int_callback()

View File

@ -183,7 +183,7 @@ protected:
*/ */
virtual void callback_reset(); virtual void callback_reset();
uint8_t deviceDescriptor[18]; uint8_t device_descriptor[18];
private: private:
@ -191,6 +191,9 @@ private:
usb_ep_t _bulk_in; usb_ep_t _bulk_in;
usb_ep_t _bulk_out; usb_ep_t _bulk_out;
uint8_t _config_descriptor[80];
uint8_t _string_imac_addr[26];
uint8_t _bulk_buf[MAX_PACKET_SIZE_BULK]; uint8_t _bulk_buf[MAX_PACKET_SIZE_BULK];
uint32_t _bulk_buf_size; uint32_t _bulk_buf_size;