usb: Define CdcAcmDevice methods as virtual

Virtual methods can be overridden by derived class.
This commit is contained in:
Tomas Rezucha 2022-09-13 14:40:57 +02:00
parent fd9ecc13c1
commit 76a75a9d47
3 changed files with 13 additions and 16 deletions

View File

@ -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; TimeOut_t connection_timeout;
vTaskSetTimeOutState(&connection_timeout); vTaskSetTimeOutState(&connection_timeout);
while (true) { do {
ESP_LOGD(TAG, "Checking list of connected USB devices"); ESP_LOGD(TAG, "Checking list of connected USB devices");
uint8_t dev_addr_list[10]; uint8_t dev_addr_list[10];
int num_of_devices; 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); 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)); vTaskDelay(pdMS_TO_TICKS(50));
} } while (xTaskCheckForTimeOut(&connection_timeout, &timeout_ticks) == pdFALSE);
// Timeout was reached, clean-up // Timeout was reached, clean-up
free(*dev); 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 // Find underlying USB device
cdc_dev_t *cdc_dev; cdc_dev_t *cdc_dev;
ESP_GOTO_ON_ERROR( ret = cdc_acm_find_and_open_usb_device(vid, pid, dev_config->connection_timeout_ms, &cdc_dev);
cdc_acm_find_and_open_usb_device(vid, pid, dev_config->connection_timeout_ms, &cdc_dev), if (ESP_OK != ret) {
exit, TAG, "USB device with VID: 0x%04X, PID: 0x%04X not found", vid, pid); goto exit;
}
// Open procedure for CDC-ACM non-compliant devices: // Open procedure for CDC-ACM non-compliant devices:
const usb_config_desc_t *config_desc; const usb_config_desc_t *config_desc;

View File

@ -1,4 +1,4 @@
version: "1.0.2" version: "1.0.3"
description: USB Host CDC-ACM driver description: USB Host CDC-ACM driver
url: https://github.com/espressif/idf-extra-components/tree/master/usb/usb_host_cdc_acm url: https://github.com/espressif/idf-extra-components/tree/master/usb/usb_host_cdc_acm
dependencies: dependencies:

View File

@ -275,7 +275,7 @@ class CdcAcmDevice {
public: public:
// Operators // Operators
CdcAcmDevice() : cdc_hdl(NULL) {}; CdcAcmDevice() : cdc_hdl(NULL) {};
~CdcAcmDevice() virtual ~CdcAcmDevice()
{ {
// Close CDC-ACM device, if it wasn't explicitly closed // Close CDC-ACM device, if it wasn't explicitly closed
if (this->cdc_hdl != NULL) { if (this->cdc_hdl != NULL) {
@ -300,29 +300,29 @@ public:
inline esp_err_t close() 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) { if (err == ESP_OK) {
this->cdc_hdl = NULL; this->cdc_hdl = NULL;
} }
return err; 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); 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); 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); 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); return cdc_acm_host_send_break(this->cdc_hdl, duration_ms);
} }