mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	UART change at runtime (#5909)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
		| @@ -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_; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user