From cfb61bc50a82c97bca295e14db9d971f2d8a5dc9 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Thu, 22 Jan 2026 20:35:37 -0600 Subject: [PATCH 1/3] [ir_rf_proxy] Remove unnecessary headers, add tests (#13464) --- esphome/components/ir_rf_proxy/ir_rf_proxy.h | 2 - tests/components/ir_rf_proxy/common-rx.yaml | 18 +++++++++ tests/components/ir_rf_proxy/common-tx.yaml | 19 +++++++++ tests/components/ir_rf_proxy/common.yaml | 39 +------------------ .../ir_rf_proxy/test-rx.esp32-idf.yaml | 7 ++++ .../ir_rf_proxy/test-rx.esp8266-ard.yaml | 7 ++++ .../ir_rf_proxy/test-rx.rp2040-ard.yaml | 7 ++++ .../ir_rf_proxy/test-tx.esp32-idf.yaml | 7 ++++ .../ir_rf_proxy/test-tx.esp8266-ard.yaml | 7 ++++ .../ir_rf_proxy/test-tx.rp2040-ard.yaml | 7 ++++ .../ir_rf_proxy/test.bk72xx-ard.yaml | 8 ++++ .../ir_rf_proxy/test.esp32-idf.yaml | 5 ++- .../ir_rf_proxy/test.esp8266-ard.yaml | 5 ++- .../ir_rf_proxy/test.rp2040-ard.yaml | 5 ++- 14 files changed, 101 insertions(+), 42 deletions(-) create mode 100644 tests/components/ir_rf_proxy/common-rx.yaml create mode 100644 tests/components/ir_rf_proxy/common-tx.yaml create mode 100644 tests/components/ir_rf_proxy/test-rx.esp32-idf.yaml create mode 100644 tests/components/ir_rf_proxy/test-rx.esp8266-ard.yaml create mode 100644 tests/components/ir_rf_proxy/test-rx.rp2040-ard.yaml create mode 100644 tests/components/ir_rf_proxy/test-tx.esp32-idf.yaml create mode 100644 tests/components/ir_rf_proxy/test-tx.esp8266-ard.yaml create mode 100644 tests/components/ir_rf_proxy/test-tx.rp2040-ard.yaml create mode 100644 tests/components/ir_rf_proxy/test.bk72xx-ard.yaml diff --git a/esphome/components/ir_rf_proxy/ir_rf_proxy.h b/esphome/components/ir_rf_proxy/ir_rf_proxy.h index d7c8919def..f067a6e17a 100644 --- a/esphome/components/ir_rf_proxy/ir_rf_proxy.h +++ b/esphome/components/ir_rf_proxy/ir_rf_proxy.h @@ -5,8 +5,6 @@ // Once the API is considered stable, this warning will be removed. #include "esphome/components/infrared/infrared.h" -#include "esphome/components/remote_transmitter/remote_transmitter.h" -#include "esphome/components/remote_receiver/remote_receiver.h" namespace esphome::ir_rf_proxy { diff --git a/tests/components/ir_rf_proxy/common-rx.yaml b/tests/components/ir_rf_proxy/common-rx.yaml new file mode 100644 index 0000000000..0f758f832d --- /dev/null +++ b/tests/components/ir_rf_proxy/common-rx.yaml @@ -0,0 +1,18 @@ +remote_receiver: + id: ir_receiver + pin: ${rx_pin} + +# Test various hardware types with transmitter/receiver using infrared platform +infrared: + # Infrared receiver + - platform: ir_rf_proxy + id: ir_rx + name: "IR Receiver" + remote_receiver_id: ir_receiver + + # RF 900MHz receiver + - platform: ir_rf_proxy + id: rf_900_rx + name: "RF 900 Receiver" + frequency: 900 MHz + remote_receiver_id: ir_receiver diff --git a/tests/components/ir_rf_proxy/common-tx.yaml b/tests/components/ir_rf_proxy/common-tx.yaml new file mode 100644 index 0000000000..4af9e2635e --- /dev/null +++ b/tests/components/ir_rf_proxy/common-tx.yaml @@ -0,0 +1,19 @@ +remote_transmitter: + id: ir_transmitter + pin: ${tx_pin} + carrier_duty_percent: 50% + +# Test various hardware types with transmitter/receiver using infrared platform +infrared: + # Infrared transmitter + - platform: ir_rf_proxy + id: ir_tx + name: "IR Transmitter" + remote_transmitter_id: ir_transmitter + + # RF 433MHz transmitter + - platform: ir_rf_proxy + id: rf_433_tx + name: "RF 433 Transmitter" + frequency: 433 MHz + remote_transmitter_id: ir_transmitter diff --git a/tests/components/ir_rf_proxy/common.yaml b/tests/components/ir_rf_proxy/common.yaml index cd2b10d31b..53a0cd379a 100644 --- a/tests/components/ir_rf_proxy/common.yaml +++ b/tests/components/ir_rf_proxy/common.yaml @@ -1,42 +1,7 @@ +network: + wifi: ssid: MySSID password: password1 api: - -remote_transmitter: - id: ir_transmitter - pin: ${tx_pin} - carrier_duty_percent: 50% - -remote_receiver: - id: ir_receiver - pin: ${rx_pin} - -# Test various hardware types with transmitter/receiver using infrared platform -infrared: - # Infrared transmitter - - platform: ir_rf_proxy - id: ir_tx - name: "IR Transmitter" - remote_transmitter_id: ir_transmitter - - # Infrared receiver - - platform: ir_rf_proxy - id: ir_rx - name: "IR Receiver" - remote_receiver_id: ir_receiver - - # RF 433MHz transmitter - - platform: ir_rf_proxy - id: rf_433_tx - name: "RF 433 Transmitter" - frequency: 433 MHz - remote_transmitter_id: ir_transmitter - - # RF 900MHz receiver - - platform: ir_rf_proxy - id: rf_900_rx - name: "RF 900 Receiver" - frequency: 900 MHz - remote_receiver_id: ir_receiver diff --git a/tests/components/ir_rf_proxy/test-rx.esp32-idf.yaml b/tests/components/ir_rf_proxy/test-rx.esp32-idf.yaml new file mode 100644 index 0000000000..8172885b31 --- /dev/null +++ b/tests/components/ir_rf_proxy/test-rx.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + tx_pin: GPIO4 + rx_pin: GPIO5 + +packages: + common: !include common.yaml + rx: !include common-rx.yaml diff --git a/tests/components/ir_rf_proxy/test-rx.esp8266-ard.yaml b/tests/components/ir_rf_proxy/test-rx.esp8266-ard.yaml new file mode 100644 index 0000000000..8172885b31 --- /dev/null +++ b/tests/components/ir_rf_proxy/test-rx.esp8266-ard.yaml @@ -0,0 +1,7 @@ +substitutions: + tx_pin: GPIO4 + rx_pin: GPIO5 + +packages: + common: !include common.yaml + rx: !include common-rx.yaml diff --git a/tests/components/ir_rf_proxy/test-rx.rp2040-ard.yaml b/tests/components/ir_rf_proxy/test-rx.rp2040-ard.yaml new file mode 100644 index 0000000000..8172885b31 --- /dev/null +++ b/tests/components/ir_rf_proxy/test-rx.rp2040-ard.yaml @@ -0,0 +1,7 @@ +substitutions: + tx_pin: GPIO4 + rx_pin: GPIO5 + +packages: + common: !include common.yaml + rx: !include common-rx.yaml diff --git a/tests/components/ir_rf_proxy/test-tx.esp32-idf.yaml b/tests/components/ir_rf_proxy/test-tx.esp32-idf.yaml new file mode 100644 index 0000000000..7162f15b2d --- /dev/null +++ b/tests/components/ir_rf_proxy/test-tx.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + tx_pin: GPIO4 + rx_pin: GPIO5 + +packages: + common: !include common.yaml + tx: !include common-tx.yaml diff --git a/tests/components/ir_rf_proxy/test-tx.esp8266-ard.yaml b/tests/components/ir_rf_proxy/test-tx.esp8266-ard.yaml new file mode 100644 index 0000000000..7162f15b2d --- /dev/null +++ b/tests/components/ir_rf_proxy/test-tx.esp8266-ard.yaml @@ -0,0 +1,7 @@ +substitutions: + tx_pin: GPIO4 + rx_pin: GPIO5 + +packages: + common: !include common.yaml + tx: !include common-tx.yaml diff --git a/tests/components/ir_rf_proxy/test-tx.rp2040-ard.yaml b/tests/components/ir_rf_proxy/test-tx.rp2040-ard.yaml new file mode 100644 index 0000000000..7162f15b2d --- /dev/null +++ b/tests/components/ir_rf_proxy/test-tx.rp2040-ard.yaml @@ -0,0 +1,7 @@ +substitutions: + tx_pin: GPIO4 + rx_pin: GPIO5 + +packages: + common: !include common.yaml + tx: !include common-tx.yaml diff --git a/tests/components/ir_rf_proxy/test.bk72xx-ard.yaml b/tests/components/ir_rf_proxy/test.bk72xx-ard.yaml new file mode 100644 index 0000000000..a0e145f476 --- /dev/null +++ b/tests/components/ir_rf_proxy/test.bk72xx-ard.yaml @@ -0,0 +1,8 @@ +substitutions: + tx_pin: GPIO4 + rx_pin: GPIO5 + +packages: + common: !include common.yaml + rx: !include common-rx.yaml + tx: !include common-tx.yaml diff --git a/tests/components/ir_rf_proxy/test.esp32-idf.yaml b/tests/components/ir_rf_proxy/test.esp32-idf.yaml index b516342f3b..a0e145f476 100644 --- a/tests/components/ir_rf_proxy/test.esp32-idf.yaml +++ b/tests/components/ir_rf_proxy/test.esp32-idf.yaml @@ -2,4 +2,7 @@ substitutions: tx_pin: GPIO4 rx_pin: GPIO5 -<<: !include common.yaml +packages: + common: !include common.yaml + rx: !include common-rx.yaml + tx: !include common-tx.yaml diff --git a/tests/components/ir_rf_proxy/test.esp8266-ard.yaml b/tests/components/ir_rf_proxy/test.esp8266-ard.yaml index b516342f3b..a0e145f476 100644 --- a/tests/components/ir_rf_proxy/test.esp8266-ard.yaml +++ b/tests/components/ir_rf_proxy/test.esp8266-ard.yaml @@ -2,4 +2,7 @@ substitutions: tx_pin: GPIO4 rx_pin: GPIO5 -<<: !include common.yaml +packages: + common: !include common.yaml + rx: !include common-rx.yaml + tx: !include common-tx.yaml diff --git a/tests/components/ir_rf_proxy/test.rp2040-ard.yaml b/tests/components/ir_rf_proxy/test.rp2040-ard.yaml index b516342f3b..a0e145f476 100644 --- a/tests/components/ir_rf_proxy/test.rp2040-ard.yaml +++ b/tests/components/ir_rf_proxy/test.rp2040-ard.yaml @@ -2,4 +2,7 @@ substitutions: tx_pin: GPIO4 rx_pin: GPIO5 -<<: !include common.yaml +packages: + common: !include common.yaml + rx: !include common-rx.yaml + tx: !include common-tx.yaml From be5bfe24da0198f05f883f391248186b4aa3733f Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 22 Jan 2026 22:05:50 -1000 Subject: [PATCH 2/3] [wifi] Avoid heap allocation when building AP SSID --- esphome/components/wifi/wifi_component.cpp | 26 +++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 52d9b2b442..68da12c251 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -746,16 +746,32 @@ void WiFiComponent::setup_ap_config_() { return; if (this->ap_.get_ssid().empty()) { - std::string name = App.get_name(); - if (name.length() > 32) { + // Build AP SSID from app name without heap allocation + // WiFi SSID max is 32 bytes, with MAC suffix we keep first 25 + last 7 + static constexpr size_t max_ssid_len = 32; + static constexpr size_t prefix_len = 25; + static constexpr size_t suffix_len = 7; + + const std::string &app_name = App.get_name(); + const char *name_ptr = app_name.c_str(); + size_t name_len = app_name.length(); + + if (name_len <= max_ssid_len) { + // Name fits, use directly + this->ap_.set_ssid(name_ptr); + } else { + // Name too long, need to truncate into stack buffer + char ssid_buf[max_ssid_len + 1]; if (App.is_name_add_mac_suffix_enabled()) { // Keep first 25 chars and last 7 chars (MAC suffix), remove middle - name.erase(25, name.length() - 32); + memcpy(ssid_buf, name_ptr, prefix_len); + memcpy(ssid_buf + prefix_len, name_ptr + name_len - suffix_len, suffix_len); } else { - name.resize(32); + memcpy(ssid_buf, name_ptr, max_ssid_len); } + ssid_buf[max_ssid_len] = '\0'; + this->ap_.set_ssid(ssid_buf); } - this->ap_.set_ssid(name); } this->ap_setup_ = this->wifi_start_ap_(this->ap_); From 425db688e50e1a94d3edb2b438fff25833fd141a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 22 Jan 2026 22:10:08 -1000 Subject: [PATCH 3/3] [wifi] Avoid heap allocation when building AP SSID --- esphome/components/wifi/wifi_component.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 68da12c251..0e08e1c025 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -748,28 +748,28 @@ void WiFiComponent::setup_ap_config_() { if (this->ap_.get_ssid().empty()) { // Build AP SSID from app name without heap allocation // WiFi SSID max is 32 bytes, with MAC suffix we keep first 25 + last 7 - static constexpr size_t max_ssid_len = 32; - static constexpr size_t prefix_len = 25; - static constexpr size_t suffix_len = 7; + static constexpr size_t MAX_SSID_LEN = 32; + static constexpr size_t PREFIX_LEN = 25; + static constexpr size_t SUFFIX_LEN = 7; const std::string &app_name = App.get_name(); const char *name_ptr = app_name.c_str(); size_t name_len = app_name.length(); - if (name_len <= max_ssid_len) { + if (name_len <= MAX_SSID_LEN) { // Name fits, use directly this->ap_.set_ssid(name_ptr); } else { // Name too long, need to truncate into stack buffer - char ssid_buf[max_ssid_len + 1]; + char ssid_buf[MAX_SSID_LEN + 1]; if (App.is_name_add_mac_suffix_enabled()) { // Keep first 25 chars and last 7 chars (MAC suffix), remove middle - memcpy(ssid_buf, name_ptr, prefix_len); - memcpy(ssid_buf + prefix_len, name_ptr + name_len - suffix_len, suffix_len); + memcpy(ssid_buf, name_ptr, PREFIX_LEN); + memcpy(ssid_buf + PREFIX_LEN, name_ptr + name_len - SUFFIX_LEN, SUFFIX_LEN); } else { - memcpy(ssid_buf, name_ptr, max_ssid_len); + memcpy(ssid_buf, name_ptr, MAX_SSID_LEN); } - ssid_buf[max_ssid_len] = '\0'; + ssid_buf[MAX_SSID_LEN] = '\0'; this->ap_.set_ssid(ssid_buf); } }