mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 13:34:54 +01:00
UART change at runtime (#5909)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
parent
058c43e953
commit
9daaadb3b6
4 changed files with 51 additions and 2 deletions
|
@ -109,6 +109,11 @@ void ESP32ArduinoUARTComponent::setup() {
|
||||||
this->number_ = next_uart_num;
|
this->number_ = next_uart_num;
|
||||||
this->hw_serial_ = new HardwareSerial(next_uart_num++); // NOLINT(cppcoreguidelines-owning-memory)
|
this->hw_serial_ = new HardwareSerial(next_uart_num++); // NOLINT(cppcoreguidelines-owning-memory)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->load_settings(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ESP32ArduinoUARTComponent::load_settings(bool dump_config) {
|
||||||
int8_t tx = this->tx_pin_ != nullptr ? this->tx_pin_->get_pin() : -1;
|
int8_t tx = this->tx_pin_ != nullptr ? this->tx_pin_->get_pin() : -1;
|
||||||
int8_t rx = this->rx_pin_ != nullptr ? this->rx_pin_->get_pin() : -1;
|
int8_t rx = this->rx_pin_ != nullptr ? this->rx_pin_->get_pin() : -1;
|
||||||
bool invert = false;
|
bool invert = false;
|
||||||
|
@ -118,6 +123,10 @@ void ESP32ArduinoUARTComponent::setup() {
|
||||||
invert = true;
|
invert = true;
|
||||||
this->hw_serial_->setRxBufferSize(this->rx_buffer_size_);
|
this->hw_serial_->setRxBufferSize(this->rx_buffer_size_);
|
||||||
this->hw_serial_->begin(this->baud_rate_, get_config(), rx, tx, invert);
|
this->hw_serial_->begin(this->baud_rate_, get_config(), rx, tx, invert);
|
||||||
|
if (dump_config) {
|
||||||
|
ESP_LOGCONFIG(TAG, "UART %u was reloaded.", this->number_);
|
||||||
|
this->dump_config();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESP32ArduinoUARTComponent::dump_config() {
|
void ESP32ArduinoUARTComponent::dump_config() {
|
||||||
|
|
|
@ -32,6 +32,20 @@ class ESP32ArduinoUARTComponent : public UARTComponent, public Component {
|
||||||
HardwareSerial *get_hw_serial() { return this->hw_serial_; }
|
HardwareSerial *get_hw_serial() { return this->hw_serial_; }
|
||||||
uint8_t get_hw_serial_number() { return this->number_; }
|
uint8_t get_hw_serial_number() { return this->number_; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the UART with the current settings.
|
||||||
|
* @param dump_config (Optional, default `true`): True for displaying new settings or
|
||||||
|
* false to change it quitely
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```cpp
|
||||||
|
* id(uart1).load_settings();
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* This will load the current UART interface with the latest settings (baud_rate, parity, etc).
|
||||||
|
*/
|
||||||
|
void load_settings(bool dump_config = true);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void check_logger_conflict() override;
|
void check_logger_conflict() override;
|
||||||
|
|
||||||
|
|
|
@ -122,9 +122,21 @@ void IDFUARTComponent::setup() {
|
||||||
xSemaphoreGive(this->lock_);
|
xSemaphoreGive(this->lock_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IDFUARTComponent::load_settings(bool dump_config) {
|
||||||
|
uart_config_t uart_config = this->get_config_();
|
||||||
|
esp_err_t err = uart_param_config(this->uart_num_, &uart_config);
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "uart_param_config failed: %s", esp_err_to_name(err));
|
||||||
|
this->mark_failed();
|
||||||
|
return;
|
||||||
|
} else if (dump_config) {
|
||||||
|
ESP_LOGCONFIG(TAG, "UART %u was reloaded.", this->uart_num_);
|
||||||
|
this->dump_config();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void IDFUARTComponent::dump_config() {
|
void IDFUARTComponent::dump_config() {
|
||||||
ESP_LOGCONFIG(TAG, "UART Bus:");
|
ESP_LOGCONFIG(TAG, "UART Bus %u:", this->uart_num_);
|
||||||
ESP_LOGCONFIG(TAG, " Number: %u", this->uart_num_);
|
|
||||||
LOG_PIN(" TX Pin: ", tx_pin_);
|
LOG_PIN(" TX Pin: ", tx_pin_);
|
||||||
LOG_PIN(" RX Pin: ", rx_pin_);
|
LOG_PIN(" RX Pin: ", rx_pin_);
|
||||||
if (this->rx_pin_ != nullptr) {
|
if (this->rx_pin_ != nullptr) {
|
||||||
|
|
|
@ -26,6 +26,20 @@ class IDFUARTComponent : public UARTComponent, public Component {
|
||||||
uint8_t get_hw_serial_number() { return this->uart_num_; }
|
uint8_t get_hw_serial_number() { return this->uart_num_; }
|
||||||
QueueHandle_t *get_uart_event_queue() { return &this->uart_event_queue_; }
|
QueueHandle_t *get_uart_event_queue() { return &this->uart_event_queue_; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the UART with the current settings.
|
||||||
|
* @param dump_config (Optional, default `true`): True for displaying new settings or
|
||||||
|
* false to change it quitely
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```cpp
|
||||||
|
* id(uart1).load_settings();
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* This will load the current UART interface with the latest settings (baud_rate, parity, etc).
|
||||||
|
*/
|
||||||
|
void load_settings(bool dump_config = true);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void check_logger_conflict() override;
|
void check_logger_conflict() override;
|
||||||
uart_port_t uart_num_;
|
uart_port_t uart_num_;
|
||||||
|
|
Loading…
Reference in a new issue