mirror of
https://github.com/esphome/esphome.git
synced 2025-10-31 23:21:54 +00:00
Merge branch 'dev' into multi_device
This commit is contained in:
@@ -42,17 +42,17 @@ void MAX9611Component::setup() {
|
|||||||
const uint8_t fast_mode_dat[] = {CONTROL_REGISTER_1_ADRR, MAX9611Multiplexer::MAX9611_MULTIPLEXER_FAST_MODE};
|
const uint8_t fast_mode_dat[] = {CONTROL_REGISTER_1_ADRR, MAX9611Multiplexer::MAX9611_MULTIPLEXER_FAST_MODE};
|
||||||
|
|
||||||
if (this->write(reinterpret_cast<const uint8_t *>(&setup_dat), sizeof(setup_dat)) != ErrorCode::ERROR_OK) {
|
if (this->write(reinterpret_cast<const uint8_t *>(&setup_dat), sizeof(setup_dat)) != ErrorCode::ERROR_OK) {
|
||||||
ESP_LOGE(TAG, "Failed to setup Max9611 during GAIN SET");
|
ESP_LOGE(TAG, "GAIN SET failed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
delay(SETUP_DELAY);
|
delay(SETUP_DELAY);
|
||||||
if (this->write(reinterpret_cast<const uint8_t *>(&fast_mode_dat), sizeof(fast_mode_dat)) != ErrorCode::ERROR_OK) {
|
if (this->write(reinterpret_cast<const uint8_t *>(&fast_mode_dat), sizeof(fast_mode_dat)) != ErrorCode::ERROR_OK) {
|
||||||
ESP_LOGE(TAG, "Failed to setup Max9611 during FAST MODE SET");
|
ESP_LOGE(TAG, "FAST MODE SET failed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void MAX9611Component::dump_config() {
|
void MAX9611Component::dump_config() {
|
||||||
ESP_LOGCONFIG(TAG, "Dump Config max9611...");
|
ESP_LOGCONFIG(TAG, "MAX9611:");
|
||||||
ESP_LOGCONFIG(TAG, " CSA Gain Register: %x", gain_);
|
ESP_LOGCONFIG(TAG, " CSA Gain Register: %x", gain_);
|
||||||
LOG_I2C_DEVICE(this);
|
LOG_I2C_DEVICE(this);
|
||||||
}
|
}
|
||||||
@@ -63,7 +63,7 @@ void MAX9611Component::update() {
|
|||||||
// Just read the entire register map in a bulk read, faster than individually querying register.
|
// Just read the entire register map in a bulk read, faster than individually querying register.
|
||||||
const ErrorCode read_result = this->read(register_map_, sizeof(register_map_));
|
const ErrorCode read_result = this->read(register_map_, sizeof(register_map_));
|
||||||
if (write_result != ErrorCode::ERROR_OK || read_result != ErrorCode::ERROR_OK) {
|
if (write_result != ErrorCode::ERROR_OK || read_result != ErrorCode::ERROR_OK) {
|
||||||
ESP_LOGW(TAG, "MAX9611 Update FAILED!");
|
ESP_LOGW(TAG, "Update failed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint16_t csa_register = ((register_map_[CSA_DATA_BYTE_MSB_ADRR] << 8) | (register_map_[CSA_DATA_BYTE_LSB_ADRR])) >> 4;
|
uint16_t csa_register = ((register_map_[CSA_DATA_BYTE_MSB_ADRR] << 8) | (register_map_[CSA_DATA_BYTE_LSB_ADRR])) >> 4;
|
||||||
|
|||||||
@@ -1003,8 +1003,13 @@ uint16_t Nextion::recv_ret_string_(std::string &response, uint32_t timeout, bool
|
|||||||
* @param variable_name Name for the queue
|
* @param variable_name Name for the queue
|
||||||
*/
|
*/
|
||||||
void Nextion::add_no_result_to_queue_(const std::string &variable_name) {
|
void Nextion::add_no_result_to_queue_(const std::string &variable_name) {
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
|
ExternalRAMAllocator<nextion::NextionQueue> allocator(ExternalRAMAllocator<nextion::NextionQueue>::ALLOW_FAILURE);
|
||||||
nextion::NextionQueue *nextion_queue = new nextion::NextionQueue;
|
nextion::NextionQueue *nextion_queue = allocator.allocate(1);
|
||||||
|
if (nextion_queue == nullptr) {
|
||||||
|
ESP_LOGW(TAG, "Failed to allocate NextionQueue");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
new (nextion_queue) nextion::NextionQueue();
|
||||||
|
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
|
// NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
|
||||||
nextion_queue->component = new nextion::NextionComponentBase;
|
nextion_queue->component = new nextion::NextionComponentBase;
|
||||||
@@ -1137,8 +1142,13 @@ void Nextion::add_to_get_queue(NextionComponentBase *component) {
|
|||||||
if ((!this->is_setup() && !this->ignore_is_setup_))
|
if ((!this->is_setup() && !this->ignore_is_setup_))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
|
ExternalRAMAllocator<nextion::NextionQueue> allocator(ExternalRAMAllocator<nextion::NextionQueue>::ALLOW_FAILURE);
|
||||||
nextion::NextionQueue *nextion_queue = new nextion::NextionQueue;
|
nextion::NextionQueue *nextion_queue = allocator.allocate(1);
|
||||||
|
if (nextion_queue == nullptr) {
|
||||||
|
ESP_LOGW(TAG, "Failed to allocate NextionQueue");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
new (nextion_queue) nextion::NextionQueue();
|
||||||
|
|
||||||
nextion_queue->component = component;
|
nextion_queue->component = component;
|
||||||
nextion_queue->queue_time = millis();
|
nextion_queue->queue_time = millis();
|
||||||
@@ -1165,8 +1175,13 @@ void Nextion::add_addt_command_to_queue(NextionComponentBase *component) {
|
|||||||
if ((!this->is_setup() && !this->ignore_is_setup_) || this->is_sleeping())
|
if ((!this->is_setup() && !this->ignore_is_setup_) || this->is_sleeping())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
|
ExternalRAMAllocator<nextion::NextionQueue> allocator(ExternalRAMAllocator<nextion::NextionQueue>::ALLOW_FAILURE);
|
||||||
nextion::NextionQueue *nextion_queue = new nextion::NextionQueue;
|
nextion::NextionQueue *nextion_queue = allocator.allocate(1);
|
||||||
|
if (nextion_queue == nullptr) {
|
||||||
|
ESP_LOGW(TAG, "Failed to allocate NextionQueue");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
new (nextion_queue) nextion::NextionQueue();
|
||||||
|
|
||||||
nextion_queue->component = component;
|
nextion_queue->component = component;
|
||||||
nextion_queue->queue_time = millis();
|
nextion_queue->queue_time = millis();
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace rp2040 {
|
|||||||
|
|
||||||
static const char *const TAG = "rp2040";
|
static const char *const TAG = "rp2040";
|
||||||
|
|
||||||
static int IRAM_ATTR flags_to_mode(gpio::Flags flags, uint8_t pin) {
|
static int flags_to_mode(gpio::Flags flags, uint8_t pin) {
|
||||||
if (flags == gpio::FLAG_INPUT) { // NOLINT(bugprone-branch-clone)
|
if (flags == gpio::FLAG_INPUT) { // NOLINT(bugprone-branch-clone)
|
||||||
return INPUT;
|
return INPUT;
|
||||||
} else if (flags == gpio::FLAG_OUTPUT) {
|
} else if (flags == gpio::FLAG_OUTPUT) {
|
||||||
@@ -25,14 +25,16 @@ static int IRAM_ATTR flags_to_mode(gpio::Flags flags, uint8_t pin) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct ISRPinArg {
|
struct ISRPinArg {
|
||||||
|
uint32_t mask;
|
||||||
uint8_t pin;
|
uint8_t pin;
|
||||||
bool inverted;
|
bool inverted;
|
||||||
};
|
};
|
||||||
|
|
||||||
ISRInternalGPIOPin RP2040GPIOPin::to_isr() const {
|
ISRInternalGPIOPin RP2040GPIOPin::to_isr() const {
|
||||||
auto *arg = new ISRPinArg{}; // NOLINT(cppcoreguidelines-owning-memory)
|
auto *arg = new ISRPinArg{}; // NOLINT(cppcoreguidelines-owning-memory)
|
||||||
arg->pin = pin_;
|
arg->pin = this->pin_;
|
||||||
arg->inverted = inverted_;
|
arg->inverted = this->inverted_;
|
||||||
|
arg->mask = 1 << this->pin_;
|
||||||
return ISRInternalGPIOPin((void *) arg);
|
return ISRInternalGPIOPin((void *) arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,21 +83,36 @@ void RP2040GPIOPin::detach_interrupt() const { detachInterrupt(pin_); }
|
|||||||
using namespace rp2040;
|
using namespace rp2040;
|
||||||
|
|
||||||
bool IRAM_ATTR ISRInternalGPIOPin::digital_read() {
|
bool IRAM_ATTR ISRInternalGPIOPin::digital_read() {
|
||||||
auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
|
auto *arg = reinterpret_cast<ISRPinArg *>(this->arg_);
|
||||||
return bool(digitalRead(arg->pin)) != arg->inverted; // NOLINT
|
return bool(sio_hw->gpio_in & arg->mask) != arg->inverted;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IRAM_ATTR ISRInternalGPIOPin::digital_write(bool value) {
|
void IRAM_ATTR ISRInternalGPIOPin::digital_write(bool value) {
|
||||||
auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
|
auto *arg = reinterpret_cast<ISRPinArg *>(this->arg_);
|
||||||
digitalWrite(arg->pin, value != arg->inverted ? 1 : 0); // NOLINT
|
if (value != arg->inverted) {
|
||||||
|
sio_hw->gpio_set = arg->mask;
|
||||||
|
} else {
|
||||||
|
sio_hw->gpio_clr = arg->mask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IRAM_ATTR ISRInternalGPIOPin::clear_interrupt() {
|
void IRAM_ATTR ISRInternalGPIOPin::clear_interrupt() {
|
||||||
// TODO: implement
|
// TODO: implement
|
||||||
// auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
|
// auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
|
||||||
// GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, 1UL << arg->pin);
|
// GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, 1UL << arg->pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IRAM_ATTR ISRInternalGPIOPin::pin_mode(gpio::Flags flags) {
|
void IRAM_ATTR ISRInternalGPIOPin::pin_mode(gpio::Flags flags) {
|
||||||
auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
|
auto *arg = reinterpret_cast<ISRPinArg *>(this->arg_);
|
||||||
pinMode(arg->pin, flags_to_mode(flags, arg->pin)); // NOLINT
|
if (flags & gpio::FLAG_OUTPUT) {
|
||||||
|
sio_hw->gpio_oe_set = arg->mask;
|
||||||
|
} else if (flags & gpio::FLAG_INPUT) {
|
||||||
|
sio_hw->gpio_oe_clr = arg->mask;
|
||||||
|
hw_write_masked(&padsbank0_hw->io[arg->pin],
|
||||||
|
(bool_to_bit(flags & gpio::FLAG_PULLUP) << PADS_BANK0_GPIO0_PUE_LSB) |
|
||||||
|
(bool_to_bit(flags & gpio::FLAG_PULLDOWN) << PADS_BANK0_GPIO0_PDE_LSB),
|
||||||
|
PADS_BANK0_GPIO0_PUE_BITS | PADS_BANK0_GPIO0_PDE_BITS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ CODEOWNERS = ["@DrCoolZic"]
|
|||||||
AUTO_LOAD = ["uart"]
|
AUTO_LOAD = ["uart"]
|
||||||
|
|
||||||
MULTI_CONF = True
|
MULTI_CONF = True
|
||||||
|
CONF_DATA_BITS = "data_bits"
|
||||||
CONF_STOP_BITS = "stop_bits"
|
CONF_STOP_BITS = "stop_bits"
|
||||||
CONF_PARITY = "parity"
|
CONF_PARITY = "parity"
|
||||||
CONF_CRYSTAL = "crystal"
|
CONF_CRYSTAL = "crystal"
|
||||||
@@ -60,6 +61,7 @@ WKBASE_SCHEMA = cv.Schema(
|
|||||||
cv.Required(CONF_ID): cv.declare_id(WeikaiChannel),
|
cv.Required(CONF_ID): cv.declare_id(WeikaiChannel),
|
||||||
cv.Optional(CONF_CHANNEL, default=0): cv.int_range(min=0, max=3),
|
cv.Optional(CONF_CHANNEL, default=0): cv.int_range(min=0, max=3),
|
||||||
cv.Required(CONF_BAUD_RATE): cv.int_range(min=1),
|
cv.Required(CONF_BAUD_RATE): cv.int_range(min=1),
|
||||||
|
cv.Optional(CONF_DATA_BITS, default=8): cv.one_of(8, int=True),
|
||||||
cv.Optional(CONF_STOP_BITS, default=1): cv.one_of(1, 2, int=True),
|
cv.Optional(CONF_STOP_BITS, default=1): cv.one_of(1, 2, int=True),
|
||||||
cv.Optional(CONF_PARITY, default="NONE"): cv.enum(
|
cv.Optional(CONF_PARITY, default="NONE"): cv.enum(
|
||||||
uart.UART_PARITY_OPTIONS, upper=True
|
uart.UART_PARITY_OPTIONS, upper=True
|
||||||
|
|||||||
@@ -24,6 +24,11 @@
|
|||||||
#define PROGMEM ICACHE_RODATA_ATTR
|
#define PROGMEM ICACHE_RODATA_ATTR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#elif defined(USE_RP2040)
|
||||||
|
|
||||||
|
#define IRAM_ATTR __attribute__((noinline, long_call, section(".time_critical")))
|
||||||
|
#define PROGMEM
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define IRAM_ATTR
|
#define IRAM_ATTR
|
||||||
|
|||||||
@@ -604,6 +604,10 @@ class ESPHomeDumper(yaml.SafeDumper):
|
|||||||
return self.represent_secret(value.id)
|
return self.represent_secret(value.id)
|
||||||
return self.represent_stringify(value.id)
|
return self.represent_stringify(value.id)
|
||||||
|
|
||||||
|
# The below override configures this dumper to indent output YAML properly:
|
||||||
|
def increase_indent(self, flow=False, indentless=False):
|
||||||
|
return super().increase_indent(flow, False)
|
||||||
|
|
||||||
|
|
||||||
ESPHomeDumper.add_multi_representer(
|
ESPHomeDumper.add_multi_representer(
|
||||||
dict, lambda dumper, value: dumper.represent_mapping("tag:yaml.org,2002:map", value)
|
dict, lambda dumper, value: dumper.represent_mapping("tag:yaml.org,2002:map", value)
|
||||||
|
|||||||
@@ -323,6 +323,17 @@ build_flags =
|
|||||||
${flags:clangtidy.build_flags}
|
${flags:clangtidy.build_flags}
|
||||||
-DUSE_ESP32_VARIANT_ESP32C3
|
-DUSE_ESP32_VARIANT_ESP32C3
|
||||||
|
|
||||||
|
;;;;;;;; ESP32-C6 ;;;;;;;;
|
||||||
|
|
||||||
|
[env:esp32c6-idf]
|
||||||
|
extends = common:esp32-idf
|
||||||
|
board = esp32-c6-devkitc-1
|
||||||
|
board_build.esp-idf.sdkconfig_path = .temp/sdkconfig-esp32c6-idf
|
||||||
|
build_flags =
|
||||||
|
${common:esp32-idf.build_flags}
|
||||||
|
${flags:runtime.build_flags}
|
||||||
|
-DUSE_ESP32_VARIANT_ESP32C6
|
||||||
|
|
||||||
;;;;;;;; ESP32-S2 ;;;;;;;;
|
;;;;;;;; ESP32-S2 ;;;;;;;;
|
||||||
|
|
||||||
[env:esp32s2-arduino]
|
[env:esp32s2-arduino]
|
||||||
|
|||||||
@@ -17,4 +17,10 @@ wk2132_i2c:
|
|||||||
parity: none
|
parity: none
|
||||||
- id: wk2132_id_1
|
- id: wk2132_id_1
|
||||||
channel: 1
|
channel: 1
|
||||||
baud_rate: 19200
|
baud_rate: 9600
|
||||||
|
|
||||||
|
# Ensures a sensor doesn't break validation
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
uart_id: wk2132_id_1
|
||||||
|
id: distance_sensor
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ substitutions:
|
|||||||
sda_pin: GPIO21
|
sda_pin: GPIO21
|
||||||
|
|
||||||
<<: !include common.yaml
|
<<: !include common.yaml
|
||||||
|
|
||||||
|
|||||||
@@ -18,4 +18,10 @@ wk2132_spi:
|
|||||||
parity: none
|
parity: none
|
||||||
- id: wk2132_spi_id1
|
- id: wk2132_spi_id1
|
||||||
channel: 1
|
channel: 1
|
||||||
baud_rate: 921600
|
baud_rate: 9600
|
||||||
|
|
||||||
|
# Ensures a sensor doesn't break validation
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
uart_id: wk2132_spi_id1
|
||||||
|
id: distance_sensor
|
||||||
|
|||||||
@@ -24,7 +24,13 @@ wk2168_i2c:
|
|||||||
baud_rate: 115200
|
baud_rate: 115200
|
||||||
- id: id3
|
- id: id3
|
||||||
channel: 3
|
channel: 3
|
||||||
baud_rate: 115200
|
baud_rate: 9600
|
||||||
|
|
||||||
|
# Ensures a sensor doesn't break validation
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
uart_id: id3
|
||||||
|
id: distance_sensor
|
||||||
|
|
||||||
# individual binary_sensor inputs
|
# individual binary_sensor inputs
|
||||||
binary_sensor:
|
binary_sensor:
|
||||||
|
|||||||
@@ -24,7 +24,13 @@ wk2168_spi:
|
|||||||
baud_rate: 115200
|
baud_rate: 115200
|
||||||
- id: id3
|
- id: id3
|
||||||
channel: 3
|
channel: 3
|
||||||
baud_rate: 115200
|
baud_rate: 9600
|
||||||
|
|
||||||
|
# Ensures a sensor doesn't break validation
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
uart_id: id3
|
||||||
|
id: distance_sensor
|
||||||
|
|
||||||
# individual binary_sensor inputs
|
# individual binary_sensor inputs
|
||||||
binary_sensor:
|
binary_sensor:
|
||||||
|
|||||||
@@ -25,4 +25,10 @@ wk2204_i2c:
|
|||||||
parity: none
|
parity: none
|
||||||
- id: wk2204_id_3
|
- id: wk2204_id_3
|
||||||
channel: 3
|
channel: 3
|
||||||
baud_rate: 19200
|
baud_rate: 9600
|
||||||
|
|
||||||
|
# Ensures a sensor doesn't break validation
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
uart_id: wk2204_id_3
|
||||||
|
id: distance_sensor
|
||||||
|
|||||||
@@ -26,4 +26,10 @@ wk2204_spi:
|
|||||||
parity: none
|
parity: none
|
||||||
- id: wk2204_spi_id3
|
- id: wk2204_spi_id3
|
||||||
channel: 3
|
channel: 3
|
||||||
baud_rate: 921600
|
baud_rate: 9600
|
||||||
|
|
||||||
|
# Ensures a sensor doesn't break validation
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
uart_id: wk2204_spi_id3
|
||||||
|
id: distance_sensor
|
||||||
|
|||||||
@@ -18,10 +18,16 @@ wk2212_i2c:
|
|||||||
parity: none
|
parity: none
|
||||||
- id: uart_i2c_id1
|
- id: uart_i2c_id1
|
||||||
channel: 1
|
channel: 1
|
||||||
baud_rate: 115200
|
baud_rate: 9600
|
||||||
stop_bits: 1
|
stop_bits: 1
|
||||||
parity: none
|
parity: none
|
||||||
|
|
||||||
|
# Ensures a sensor doesn't break validation
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
uart_id: uart_i2c_id1
|
||||||
|
id: distance_sensor
|
||||||
|
|
||||||
# individual binary_sensor inputs
|
# individual binary_sensor inputs
|
||||||
binary_sensor:
|
binary_sensor:
|
||||||
- platform: gpio
|
- platform: gpio
|
||||||
|
|||||||
@@ -18,7 +18,13 @@ wk2212_spi:
|
|||||||
parity: none
|
parity: none
|
||||||
- id: id1
|
- id: id1
|
||||||
channel: 1
|
channel: 1
|
||||||
baud_rate: 115200
|
baud_rate: 9600
|
||||||
|
|
||||||
|
# Ensures a sensor doesn't break validation
|
||||||
|
sensor:
|
||||||
|
- platform: a02yyuw
|
||||||
|
uart_id: id1
|
||||||
|
id: distance_sensor
|
||||||
|
|
||||||
# individual binary_sensor inputs
|
# individual binary_sensor inputs
|
||||||
binary_sensor:
|
binary_sensor:
|
||||||
@@ -55,4 +61,3 @@ switch:
|
|||||||
mode:
|
mode:
|
||||||
output: true
|
output: true
|
||||||
inverted: true
|
inverted: true
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
esphome:
|
||||||
|
name: componenttestesp32c6idf
|
||||||
|
friendly_name: $component_name
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32-c6-devkitc-1
|
||||||
|
framework:
|
||||||
|
type: esp-idf
|
||||||
|
|
||||||
|
logger:
|
||||||
|
level: VERY_VERBOSE
|
||||||
|
|
||||||
|
packages:
|
||||||
|
component_under_test: !include
|
||||||
|
file: $component_test_file
|
||||||
|
vars:
|
||||||
|
component_test_file: $component_test_file
|
||||||
Reference in New Issue
Block a user