mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	esp32_can: make queue lengths configurable (#7361)
This commit is contained in:
		| @@ -1,18 +1,23 @@ | ||||
| import esphome.codegen as cg | ||||
| import esphome.config_validation as cv | ||||
| from esphome import pins | ||||
| import esphome.codegen as cg | ||||
| from esphome.components import canbus | ||||
| from esphome.const import CONF_ID, CONF_RX_PIN, CONF_TX_PIN | ||||
| from esphome.components.canbus import CanbusComponent, CanSpeed, CONF_BIT_RATE | ||||
|  | ||||
| from esphome.components.canbus import CONF_BIT_RATE, CanbusComponent, CanSpeed | ||||
| from esphome.components.esp32 import get_esp32_variant | ||||
| from esphome.components.esp32.const import ( | ||||
|     VARIANT_ESP32, | ||||
|     VARIANT_ESP32S2, | ||||
|     VARIANT_ESP32S3, | ||||
|     VARIANT_ESP32C3, | ||||
|     VARIANT_ESP32C6, | ||||
|     VARIANT_ESP32H2, | ||||
|     VARIANT_ESP32S2, | ||||
|     VARIANT_ESP32S3, | ||||
| ) | ||||
| import esphome.config_validation as cv | ||||
| from esphome.const import ( | ||||
|     CONF_ID, | ||||
|     CONF_RX_PIN, | ||||
|     CONF_RX_QUEUE_LEN, | ||||
|     CONF_TX_PIN, | ||||
|     CONF_TX_QUEUE_LEN, | ||||
| ) | ||||
|  | ||||
| CODEOWNERS = ["@Sympatron"] | ||||
| @@ -77,6 +82,8 @@ CONFIG_SCHEMA = canbus.CANBUS_SCHEMA.extend( | ||||
|         cv.Optional(CONF_BIT_RATE, default="125KBPS"): validate_bit_rate, | ||||
|         cv.Required(CONF_RX_PIN): pins.internal_gpio_input_pin_number, | ||||
|         cv.Required(CONF_TX_PIN): pins.internal_gpio_output_pin_number, | ||||
|         cv.Optional(CONF_RX_QUEUE_LEN): cv.uint32_t, | ||||
|         cv.Optional(CONF_TX_QUEUE_LEN): cv.uint32_t, | ||||
|     } | ||||
| ) | ||||
|  | ||||
| @@ -87,3 +94,7 @@ async def to_code(config): | ||||
|  | ||||
|     cg.add(var.set_rx(config[CONF_RX_PIN])) | ||||
|     cg.add(var.set_tx(config[CONF_TX_PIN])) | ||||
|     if (rx_queue_len := config.get(CONF_RX_QUEUE_LEN)) is not None: | ||||
|         cg.add(var.set_rx_queue_len(rx_queue_len)) | ||||
|     if (tx_queue_len := config.get(CONF_TX_QUEUE_LEN)) is not None: | ||||
|         cg.add(var.set_tx_queue_len(tx_queue_len)) | ||||
|   | ||||
| @@ -69,6 +69,13 @@ static bool get_bitrate(canbus::CanSpeed bitrate, twai_timing_config_t *t_config | ||||
| bool ESP32Can::setup_internal() { | ||||
|   twai_general_config_t g_config = | ||||
|       TWAI_GENERAL_CONFIG_DEFAULT((gpio_num_t) this->tx_, (gpio_num_t) this->rx_, TWAI_MODE_NORMAL); | ||||
|   if (this->tx_queue_len_.has_value()) { | ||||
|     g_config.tx_queue_len = this->tx_queue_len_.value(); | ||||
|   } | ||||
|   if (this->rx_queue_len_.has_value()) { | ||||
|     g_config.rx_queue_len = this->rx_queue_len_.value(); | ||||
|   } | ||||
|  | ||||
|   twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL(); | ||||
|   twai_timing_config_t t_config; | ||||
|  | ||||
|   | ||||
| @@ -12,6 +12,8 @@ class ESP32Can : public canbus::Canbus { | ||||
|  public: | ||||
|   void set_rx(int rx) { rx_ = rx; } | ||||
|   void set_tx(int tx) { tx_ = tx; } | ||||
|   void set_tx_queue_len(uint32_t tx_queue_len) { this->tx_queue_len_ = tx_queue_len; } | ||||
|   void set_rx_queue_len(uint32_t rx_queue_len) { this->rx_queue_len_ = rx_queue_len; } | ||||
|   ESP32Can(){}; | ||||
|  | ||||
|  protected: | ||||
| @@ -21,6 +23,8 @@ class ESP32Can : public canbus::Canbus { | ||||
|  | ||||
|   int rx_{-1}; | ||||
|   int tx_{-1}; | ||||
|   optional<uint32_t> tx_queue_len_{}; | ||||
|   optional<uint32_t> rx_queue_len_{}; | ||||
| }; | ||||
|  | ||||
| }  // namespace esp32_can | ||||
|   | ||||
| @@ -730,6 +730,7 @@ CONF_RW_PIN = "rw_pin" | ||||
| CONF_RX_BUFFER_SIZE = "rx_buffer_size" | ||||
| CONF_RX_ONLY = "rx_only" | ||||
| CONF_RX_PIN = "rx_pin" | ||||
| CONF_RX_QUEUE_LEN = "rx_queue_len" | ||||
| CONF_SAFE_MODE = "safe_mode" | ||||
| CONF_SAMPLE_RATE = "sample_rate" | ||||
| CONF_SAMSUNG = "samsung" | ||||
| @@ -881,6 +882,7 @@ CONF_TVOC = "tvoc" | ||||
| CONF_TX_BUFFER_SIZE = "tx_buffer_size" | ||||
| CONF_TX_PIN = "tx_pin" | ||||
| CONF_TX_POWER = "tx_power" | ||||
| CONF_TX_QUEUE_LEN = "tx_queue_len" | ||||
| CONF_TYPE = "type" | ||||
| CONF_TYPE_ID = "type_id" | ||||
| CONF_UART_ID = "uart_id" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user