mirror of
https://github.com/esphome/esphome.git
synced 2024-11-14 02:58:11 +01:00
esp32_can: make queue lengths configurable (#7361)
This commit is contained in:
parent
87d801721b
commit
69f98e0f87
4 changed files with 31 additions and 7 deletions
|
@ -1,18 +1,23 @@
|
||||||
import esphome.codegen as cg
|
|
||||||
import esphome.config_validation as cv
|
|
||||||
from esphome import pins
|
from esphome import pins
|
||||||
|
import esphome.codegen as cg
|
||||||
from esphome.components import canbus
|
from esphome.components import canbus
|
||||||
from esphome.const import CONF_ID, CONF_RX_PIN, CONF_TX_PIN
|
from esphome.components.canbus import CONF_BIT_RATE, CanbusComponent, CanSpeed
|
||||||
from esphome.components.canbus import CanbusComponent, CanSpeed, CONF_BIT_RATE
|
|
||||||
|
|
||||||
from esphome.components.esp32 import get_esp32_variant
|
from esphome.components.esp32 import get_esp32_variant
|
||||||
from esphome.components.esp32.const import (
|
from esphome.components.esp32.const import (
|
||||||
VARIANT_ESP32,
|
VARIANT_ESP32,
|
||||||
VARIANT_ESP32S2,
|
|
||||||
VARIANT_ESP32S3,
|
|
||||||
VARIANT_ESP32C3,
|
VARIANT_ESP32C3,
|
||||||
VARIANT_ESP32C6,
|
VARIANT_ESP32C6,
|
||||||
VARIANT_ESP32H2,
|
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"]
|
CODEOWNERS = ["@Sympatron"]
|
||||||
|
@ -77,6 +82,8 @@ CONFIG_SCHEMA = canbus.CANBUS_SCHEMA.extend(
|
||||||
cv.Optional(CONF_BIT_RATE, default="125KBPS"): validate_bit_rate,
|
cv.Optional(CONF_BIT_RATE, default="125KBPS"): validate_bit_rate,
|
||||||
cv.Required(CONF_RX_PIN): pins.internal_gpio_input_pin_number,
|
cv.Required(CONF_RX_PIN): pins.internal_gpio_input_pin_number,
|
||||||
cv.Required(CONF_TX_PIN): pins.internal_gpio_output_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_rx(config[CONF_RX_PIN]))
|
||||||
cg.add(var.set_tx(config[CONF_TX_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() {
|
bool ESP32Can::setup_internal() {
|
||||||
twai_general_config_t g_config =
|
twai_general_config_t g_config =
|
||||||
TWAI_GENERAL_CONFIG_DEFAULT((gpio_num_t) this->tx_, (gpio_num_t) this->rx_, TWAI_MODE_NORMAL);
|
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_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL();
|
||||||
twai_timing_config_t t_config;
|
twai_timing_config_t t_config;
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,8 @@ class ESP32Can : public canbus::Canbus {
|
||||||
public:
|
public:
|
||||||
void set_rx(int rx) { rx_ = rx; }
|
void set_rx(int rx) { rx_ = rx; }
|
||||||
void set_tx(int tx) { tx_ = tx; }
|
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(){};
|
ESP32Can(){};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -21,6 +23,8 @@ class ESP32Can : public canbus::Canbus {
|
||||||
|
|
||||||
int rx_{-1};
|
int rx_{-1};
|
||||||
int tx_{-1};
|
int tx_{-1};
|
||||||
|
optional<uint32_t> tx_queue_len_{};
|
||||||
|
optional<uint32_t> rx_queue_len_{};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace esp32_can
|
} // namespace esp32_can
|
||||||
|
|
|
@ -730,6 +730,7 @@ CONF_RW_PIN = "rw_pin"
|
||||||
CONF_RX_BUFFER_SIZE = "rx_buffer_size"
|
CONF_RX_BUFFER_SIZE = "rx_buffer_size"
|
||||||
CONF_RX_ONLY = "rx_only"
|
CONF_RX_ONLY = "rx_only"
|
||||||
CONF_RX_PIN = "rx_pin"
|
CONF_RX_PIN = "rx_pin"
|
||||||
|
CONF_RX_QUEUE_LEN = "rx_queue_len"
|
||||||
CONF_SAFE_MODE = "safe_mode"
|
CONF_SAFE_MODE = "safe_mode"
|
||||||
CONF_SAMPLE_RATE = "sample_rate"
|
CONF_SAMPLE_RATE = "sample_rate"
|
||||||
CONF_SAMSUNG = "samsung"
|
CONF_SAMSUNG = "samsung"
|
||||||
|
@ -881,6 +882,7 @@ CONF_TVOC = "tvoc"
|
||||||
CONF_TX_BUFFER_SIZE = "tx_buffer_size"
|
CONF_TX_BUFFER_SIZE = "tx_buffer_size"
|
||||||
CONF_TX_PIN = "tx_pin"
|
CONF_TX_PIN = "tx_pin"
|
||||||
CONF_TX_POWER = "tx_power"
|
CONF_TX_POWER = "tx_power"
|
||||||
|
CONF_TX_QUEUE_LEN = "tx_queue_len"
|
||||||
CONF_TYPE = "type"
|
CONF_TYPE = "type"
|
||||||
CONF_TYPE_ID = "type_id"
|
CONF_TYPE_ID = "type_id"
|
||||||
CONF_UART_ID = "uart_id"
|
CONF_UART_ID = "uart_id"
|
||||||
|
|
Loading…
Reference in a new issue