1
0
mirror of https://github.com/esphome/esphome.git synced 2026-02-08 00:31:58 +00:00

[heatpumpir] Fix ambiguous millis() call with HeatpumpIR library (#13458)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Jonathan Swoboda
2026-01-22 16:22:33 -05:00
committed by GitHub
parent 110c173eac
commit 98a926f37f
3 changed files with 33 additions and 59 deletions

View File

@@ -3,13 +3,44 @@
#if defined(USE_ARDUINO) || defined(USE_ESP32)
#include <map>
#include "ir_sender_esphome.h"
#include "HeatpumpIRFactory.h"
#include <IRSender.h>
#include <HeatpumpIRFactory.h>
#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, std::function<HeatpumpIR *()>> PROTOCOL_CONSTRUCTOR_MAP = {

View File

@@ -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

View File

@@ -1,25 +0,0 @@
#pragma once
#if defined(USE_ARDUINO) || defined(USE_ESP32)
#include "esphome/components/remote_base/remote_base.h"
#include <IRSender.h> // 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