diff --git a/usb/usb_host_cdc_acm/cdc_acm_host.c b/usb/usb_host_cdc_acm/cdc_acm_host.c index 0064b6b..0fc8620 100644 --- a/usb/usb_host_cdc_acm/cdc_acm_host.c +++ b/usb/usb_host_cdc_acm/cdc_acm_host.c @@ -357,7 +357,7 @@ static esp_err_t cdc_acm_find_and_open_usb_device(uint16_t vid, uint16_t pid, in TimeOut_t connection_timeout; vTaskSetTimeOutState(&connection_timeout); - while (true) { + do { ESP_LOGD(TAG, "Checking list of connected USB devices"); uint8_t dev_addr_list[10]; int num_of_devices; @@ -380,12 +380,8 @@ static esp_err_t cdc_acm_find_and_open_usb_device(uint16_t vid, uint16_t pid, in } usb_host_device_close(p_cdc_acm_obj->cdc_acm_client_hdl, current_device); } - - if (xTaskCheckForTimeOut(&connection_timeout, &timeout_ticks) != pdFALSE) { - break; // Timeout elapsed and the device is not connected - } vTaskDelay(pdMS_TO_TICKS(50)); - } + } while (xTaskCheckForTimeOut(&connection_timeout, &timeout_ticks) == pdFALSE); // Timeout was reached, clean-up free(*dev); @@ -769,9 +765,10 @@ esp_err_t cdc_acm_host_open_vendor_specific(uint16_t vid, uint16_t pid, uint8_t // Find underlying USB device cdc_dev_t *cdc_dev; - ESP_GOTO_ON_ERROR( - cdc_acm_find_and_open_usb_device(vid, pid, dev_config->connection_timeout_ms, &cdc_dev), - exit, TAG, "USB device with VID: 0x%04X, PID: 0x%04X not found", vid, pid); + ret = cdc_acm_find_and_open_usb_device(vid, pid, dev_config->connection_timeout_ms, &cdc_dev); + if (ESP_OK != ret) { + goto exit; + } // Open procedure for CDC-ACM non-compliant devices: const usb_config_desc_t *config_desc; diff --git a/usb/usb_host_cdc_acm/idf_component.yml b/usb/usb_host_cdc_acm/idf_component.yml index 877a18b..fc7a717 100644 --- a/usb/usb_host_cdc_acm/idf_component.yml +++ b/usb/usb_host_cdc_acm/idf_component.yml @@ -1,4 +1,4 @@ -version: "1.0.2" +version: "1.0.3" description: USB Host CDC-ACM driver url: https://github.com/espressif/idf-extra-components/tree/master/usb/usb_host_cdc_acm dependencies: diff --git a/usb/usb_host_cdc_acm/include/usb/cdc_acm_host.h b/usb/usb_host_cdc_acm/include/usb/cdc_acm_host.h index 90f5a20..d1169e9 100644 --- a/usb/usb_host_cdc_acm/include/usb/cdc_acm_host.h +++ b/usb/usb_host_cdc_acm/include/usb/cdc_acm_host.h @@ -275,7 +275,7 @@ class CdcAcmDevice { public: // Operators CdcAcmDevice() : cdc_hdl(NULL) {}; - ~CdcAcmDevice() + virtual ~CdcAcmDevice() { // Close CDC-ACM device, if it wasn't explicitly closed if (this->cdc_hdl != NULL) { @@ -300,29 +300,29 @@ public: inline esp_err_t close() { - esp_err_t err = cdc_acm_host_close(this->cdc_hdl); + const esp_err_t err = cdc_acm_host_close(this->cdc_hdl); if (err == ESP_OK) { this->cdc_hdl = NULL; } return err; } - inline esp_err_t line_coding_get(cdc_acm_line_coding_t *line_coding) + virtual inline esp_err_t line_coding_get(cdc_acm_line_coding_t *line_coding) const { return cdc_acm_host_line_coding_get(this->cdc_hdl, line_coding); } - inline esp_err_t line_coding_set(cdc_acm_line_coding_t *line_coding) + virtual inline esp_err_t line_coding_set(cdc_acm_line_coding_t *line_coding) { return cdc_acm_host_line_coding_set(this->cdc_hdl, line_coding); } - inline esp_err_t set_control_line_state(bool dtr, bool rts) + virtual inline esp_err_t set_control_line_state(bool dtr, bool rts) { return cdc_acm_host_set_control_line_state(this->cdc_hdl, dtr, rts); } - inline esp_err_t send_break(uint16_t duration_ms) + virtual inline esp_err_t send_break(uint16_t duration_ms) { return cdc_acm_host_send_break(this->cdc_hdl, duration_ms); }