Code: Select all
esp_err_t usb_host_get_device_descriptor(usb_device_handle_t dev_hdl, const usb_device_desc_t **device_desc)Code: Select all
usb_device_desc_tCode: Select all
iManufacturerHow can I access this array of strings?
Code: Select all
esp_err_t usb_host_get_device_descriptor(usb_device_handle_t dev_hdl, const usb_device_desc_t **device_desc)Code: Select all
usb_device_desc_tCode: Select all
iManufacturerCode: Select all
esp_err_t get_string_descriptor(usb_device_handle_t dev_hdl, uint8_t index, uint16_t langid, char *out_str, size_t max_len)
{
usb_transfer_t *transfer;
if (usb_host_transfer_alloc(128, 0, &transfer) != ESP_OK) return ESP_FAIL;
transfer->setup.bmRequestType = 0x80;
transfer->setup.bRequest = USB_B_REQUEST_GET_DESCRIPTOR;
transfer->setup.wValue = (USB_B_DESCRIPTOR_TYPE_STRING << 8) | index;
transfer->setup.wIndex = langid;
transfer->setup.wLength = 128;
if (usb_host_device_transfer(dev_hdl, transfer) != ESP_OK ||
transfer->status != USB_TRANSFER_STATUS_COMPLETED) {
usb_host_transfer_free(transfer);
return ESP_FAIL;
}
size_t len = transfer->actual_num_bytes;
if (len < 2 || transfer->data_buffer[1] != USB_B_DESCRIPTOR_TYPE_STRING) {
usb_host_transfer_free(transfer);
return ESP_FAIL;
}
for (int i = 2, j = 0; i < len && j < max_len - 1; i += 2) {
out_str[j++] = transfer->data_buffer[i];
out_str[j] = '\0';
}
usb_host_transfer_free(transfer);
return ESP_OK;
}
Code: Select all
char manufacturer[64];
get_string_descriptor(dev_hdl, device_desc->iManufacturer, 0x0409, manufacturer, sizeof(manufacturer));
printf("Manufacturer: %s\n", manufacturer);
Users browsing this forum: Bing [Bot], ChatGPT-User, PetalBot and 2 guests