From 98a926f37f233247401e9cc00b35a27ca79753c3 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Thu, 22 Jan 2026 16:22:33 -0500 Subject: [PATCH] [heatpumpir] Fix ambiguous millis() call with HeatpumpIR library (#13458) Co-authored-by: Claude Opus 4.5 --- esphome/components/heatpumpir/heatpumpir.cpp | 35 +++++++++++++++++-- .../heatpumpir/ir_sender_esphome.cpp | 32 ----------------- .../components/heatpumpir/ir_sender_esphome.h | 25 ------------- 3 files changed, 33 insertions(+), 59 deletions(-) delete mode 100644 esphome/components/heatpumpir/ir_sender_esphome.cpp delete mode 100644 esphome/components/heatpumpir/ir_sender_esphome.h diff --git a/esphome/components/heatpumpir/heatpumpir.cpp b/esphome/components/heatpumpir/heatpumpir.cpp index 1f1362f8d8..6b73a24dc4 100644 --- a/esphome/components/heatpumpir/heatpumpir.cpp +++ b/esphome/components/heatpumpir/heatpumpir.cpp @@ -3,13 +3,44 @@ #if defined(USE_ARDUINO) || defined(USE_ESP32) #include -#include "ir_sender_esphome.h" -#include "HeatpumpIRFactory.h" +#include +#include +#include "esphome/components/remote_base/remote_base.h" #include "esphome/core/log.h" namespace esphome { namespace heatpumpir { +// IRSenderESPHome - bridge between ESPHome's remote_transmitter and HeatpumpIR library +// Defined here (not in a header) to isolate HeatpumpIR's headers from the rest of ESPHome, +// as they define conflicting symbols like millis() in the global namespace. +class IRSenderESPHome : public IRSender { + public: + IRSenderESPHome(remote_base::RemoteTransmitterBase *transmitter) : IRSender(0), transmit_(transmitter->transmit()) {} + + void setFrequency(int frequency) override { // NOLINT(readability-identifier-naming) + auto *data = this->transmit_.get_data(); + data->set_carrier_frequency(1000 * frequency); + } + + void space(int space_length) override { + if (space_length) { + auto *data = this->transmit_.get_data(); + data->space(space_length); + } else { + this->transmit_.perform(); + } + } + + void mark(int mark_length) override { + auto *data = this->transmit_.get_data(); + data->mark(mark_length); + } + + protected: + remote_base::RemoteTransmitterBase::TransmitCall transmit_; +}; + static const char *const TAG = "heatpumpir.climate"; const std::map> PROTOCOL_CONSTRUCTOR_MAP = { diff --git a/esphome/components/heatpumpir/ir_sender_esphome.cpp b/esphome/components/heatpumpir/ir_sender_esphome.cpp deleted file mode 100644 index f010c72dac..0000000000 --- a/esphome/components/heatpumpir/ir_sender_esphome.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "ir_sender_esphome.h" - -#if defined(USE_ARDUINO) || defined(USE_ESP32) - -namespace esphome { -namespace heatpumpir { - -void IRSenderESPHome::setFrequency(int frequency) { // NOLINT(readability-identifier-naming) - auto *data = transmit_.get_data(); - data->set_carrier_frequency(1000 * frequency); -} - -// Send an IR 'mark' symbol, i.e. transmitter ON -void IRSenderESPHome::mark(int mark_length) { - auto *data = transmit_.get_data(); - data->mark(mark_length); -} - -// Send an IR 'space' symbol, i.e. transmitter OFF -void IRSenderESPHome::space(int space_length) { - if (space_length) { - auto *data = transmit_.get_data(); - data->space(space_length); - } else { - transmit_.perform(); - } -} - -} // namespace heatpumpir -} // namespace esphome - -#endif diff --git a/esphome/components/heatpumpir/ir_sender_esphome.h b/esphome/components/heatpumpir/ir_sender_esphome.h deleted file mode 100644 index c4209145ba..0000000000 --- a/esphome/components/heatpumpir/ir_sender_esphome.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#if defined(USE_ARDUINO) || defined(USE_ESP32) - -#include "esphome/components/remote_base/remote_base.h" -#include // arduino-heatpump library - -namespace esphome { -namespace heatpumpir { - -class IRSenderESPHome : public IRSender { - public: - IRSenderESPHome(remote_base::RemoteTransmitterBase *transmitter) : IRSender(0), transmit_(transmitter->transmit()){}; - void setFrequency(int frequency) override; // NOLINT(readability-identifier-naming) - void space(int space_length) override; - void mark(int mark_length) override; - - protected: - remote_base::RemoteTransmitterBase::TransmitCall transmit_; -}; - -} // namespace heatpumpir -} // namespace esphome - -#endif