vendor device open fix for descriptor parsing
This commit is contained in:
10
src/class/vendor/vendor_device.c
vendored
10
src/class/vendor/vendor_device.c
vendored
@@ -196,8 +196,9 @@ void vendord_reset(uint8_t rhport) {
|
|||||||
|
|
||||||
uint16_t vendord_open(uint8_t rhport, const tusb_desc_interface_t* desc_itf, uint16_t max_len) {
|
uint16_t vendord_open(uint8_t rhport, const tusb_desc_interface_t* desc_itf, uint16_t max_len) {
|
||||||
TU_VERIFY(TUSB_CLASS_VENDOR_SPECIFIC == desc_itf->bInterfaceClass, 0);
|
TU_VERIFY(TUSB_CLASS_VENDOR_SPECIFIC == desc_itf->bInterfaceClass, 0);
|
||||||
const uint8_t* p_desc = tu_desc_next(desc_itf);
|
const uint8_t* p_desc = (const uint8_t*)desc_itf;
|
||||||
const uint8_t* desc_end = (uint8_t const*)desc_itf + max_len;
|
const uint8_t* desc_end = p_desc + max_len;
|
||||||
|
p_desc = tu_desc_next(p_desc);
|
||||||
|
|
||||||
// Find available interface
|
// Find available interface
|
||||||
vendord_interface_t* p_vendor = NULL;
|
vendord_interface_t* p_vendor = NULL;
|
||||||
@@ -235,6 +236,11 @@ uint16_t vendord_open(uint8_t rhport, const tusb_desc_interface_t* desc_itf, uin
|
|||||||
p_desc = tu_desc_next(p_desc);
|
p_desc = tu_desc_next(p_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// skip any other descriptors until the next interface descriptor, or end of all descriptors
|
||||||
|
while ( (TUSB_DESC_INTERFACE != tu_desc_type(p_desc)) && (p_desc < desc_end) ) {
|
||||||
|
p_desc = tu_desc_next(p_desc);
|
||||||
|
}
|
||||||
|
|
||||||
return (uint16_t) ((uintptr_t) p_desc - (uintptr_t) desc_itf);
|
return (uint16_t) ((uintptr_t) p_desc - (uintptr_t) desc_itf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user