mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +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