[remote_receiver, remote_transmitter] Improve error messages on the ESP32 (#6701)

This commit is contained in:
Mat931 2024-05-08 21:58:40 +00:00 committed by GitHub
parent e48d02495b
commit 487e171443
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 20 additions and 2 deletions

View file

@ -58,6 +58,7 @@ class RemoteReceiverComponent : public remote_base::RemoteReceiverBase,
void decode_rmt_(rmt_item32_t *item, size_t len); void decode_rmt_(rmt_item32_t *item, size_t len);
RingbufHandle_t ringbuf_; RingbufHandle_t ringbuf_;
esp_err_t error_code_{ESP_OK}; esp_err_t error_code_{ESP_OK};
std::string error_string_{""};
#endif #endif
#if defined(USE_ESP8266) || defined(USE_LIBRETINY) #if defined(USE_ESP8266) || defined(USE_LIBRETINY)

View file

@ -29,6 +29,7 @@ void RemoteReceiverComponent::setup() {
esp_err_t error = rmt_config(&rmt); esp_err_t error = rmt_config(&rmt);
if (error != ESP_OK) { if (error != ESP_OK) {
this->error_code_ = error; this->error_code_ = error;
this->error_string_ = "in rmt_config";
this->mark_failed(); this->mark_failed();
return; return;
} }
@ -36,18 +37,25 @@ void RemoteReceiverComponent::setup() {
error = rmt_driver_install(this->channel_, this->buffer_size_, 0); error = rmt_driver_install(this->channel_, this->buffer_size_, 0);
if (error != ESP_OK) { if (error != ESP_OK) {
this->error_code_ = error; this->error_code_ = error;
if (error == ESP_ERR_INVALID_STATE) {
this->error_string_ = str_sprintf("RMT channel %i is already in use by another component", this->channel_);
} else {
this->error_string_ = "in rmt_driver_install";
}
this->mark_failed(); this->mark_failed();
return; return;
} }
error = rmt_get_ringbuf_handle(this->channel_, &this->ringbuf_); error = rmt_get_ringbuf_handle(this->channel_, &this->ringbuf_);
if (error != ESP_OK) { if (error != ESP_OK) {
this->error_code_ = error; this->error_code_ = error;
this->error_string_ = "in rmt_get_ringbuf_handle";
this->mark_failed(); this->mark_failed();
return; return;
} }
error = rmt_rx_start(this->channel_, true); error = rmt_rx_start(this->channel_, true);
if (error != ESP_OK) { if (error != ESP_OK) {
this->error_code_ = error; this->error_code_ = error;
this->error_string_ = "in rmt_rx_start";
this->mark_failed(); this->mark_failed();
return; return;
} }
@ -67,7 +75,8 @@ void RemoteReceiverComponent::dump_config() {
ESP_LOGCONFIG(TAG, " Filter out pulses shorter than: %" PRIu32 " us", this->filter_us_); ESP_LOGCONFIG(TAG, " Filter out pulses shorter than: %" PRIu32 " us", this->filter_us_);
ESP_LOGCONFIG(TAG, " Signal is done after %" PRIu32 " us of no changes", this->idle_us_); ESP_LOGCONFIG(TAG, " Signal is done after %" PRIu32 " us of no changes", this->idle_us_);
if (this->is_failed()) { if (this->is_failed()) {
ESP_LOGE(TAG, "Configuring RMT driver failed: %s", esp_err_to_name(this->error_code_)); ESP_LOGE(TAG, "Configuring RMT driver failed: %s (%s)", esp_err_to_name(this->error_code_),
this->error_string_.c_str());
} }
} }

View file

@ -53,6 +53,7 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase,
bool initialized_{false}; bool initialized_{false};
std::vector<rmt_item32_t> rmt_temp_; std::vector<rmt_item32_t> rmt_temp_;
esp_err_t error_code_{ESP_OK}; esp_err_t error_code_{ESP_OK};
std::string error_string_{""};
bool inverted_{false}; bool inverted_{false};
#endif #endif
uint8_t carrier_duty_percent_; uint8_t carrier_duty_percent_;

View file

@ -23,7 +23,8 @@ void RemoteTransmitterComponent::dump_config() {
} }
if (this->is_failed()) { if (this->is_failed()) {
ESP_LOGE(TAG, "Configuring RMT driver failed: %s", esp_err_to_name(this->error_code_)); ESP_LOGE(TAG, "Configuring RMT driver failed: %s (%s)", esp_err_to_name(this->error_code_),
this->error_string_.c_str());
} }
} }
@ -56,6 +57,7 @@ void RemoteTransmitterComponent::configure_rmt_() {
esp_err_t error = rmt_config(&c); esp_err_t error = rmt_config(&c);
if (error != ESP_OK) { if (error != ESP_OK) {
this->error_code_ = error; this->error_code_ = error;
this->error_string_ = "in rmt_config";
this->mark_failed(); this->mark_failed();
return; return;
} }
@ -64,6 +66,11 @@ void RemoteTransmitterComponent::configure_rmt_() {
error = rmt_driver_install(this->channel_, 0, 0); error = rmt_driver_install(this->channel_, 0, 0);
if (error != ESP_OK) { if (error != ESP_OK) {
this->error_code_ = error; this->error_code_ = error;
if (error == ESP_ERR_INVALID_STATE) {
this->error_string_ = str_sprintf("RMT channel %i is already in use by another component", this->channel_);
} else {
this->error_string_ = "in rmt_driver_install";
}
this->mark_failed(); this->mark_failed();
return; return;
} }