ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
radio_frequency.h
Go to the documentation of this file.
1#pragma once
2
3// WARNING: This component is EXPERIMENTAL. The API may change at any time
4// without following the normal breaking changes policy. Use at your own risk.
5// Once the API is considered stable, this warning will be removed.
6
8
10
13
16 RADIO_FREQUENCY_MODULATION_OOK = 0, // On-Off Keying / Amplitude Shift Keying
17 // Future: RADIO_FREQUENCY_MODULATION_FSK, RADIO_FREQUENCY_MODULATION_GFSK, etc.
18};
19
20class RadioFrequency;
21
23class RadioFrequencyCall : public ir_rf_base::IrRfCall<RadioFrequencyCall, RadioFrequency> {
24 public:
25 explicit RadioFrequencyCall(RadioFrequency *parent) : IrRfCall(parent) {}
26
29 this->frequency_hz_ = frequency_hz;
30 return *this;
31 }
34 this->modulation_ = modulation;
35 return *this;
36 }
38 const optional<uint32_t> &get_frequency() const { return this->frequency_hz_; }
41
42 protected:
43 optional<uint32_t> frequency_hz_{};
45};
46
49 public:
54 void set_frequency_min_hz(uint32_t freq) { this->frequency_min_hz_ = freq; }
55
57 void set_frequency_max_hz(uint32_t freq) { this->frequency_max_hz_ = freq; }
58
61 this->frequency_min_hz_ = freq;
62 this->frequency_max_hz_ = freq;
63 }
64
69 this->supported_modulations_ |= (1u << static_cast<uint8_t>(mod));
70 }
71
72 protected:
73 uint32_t frequency_min_hz_{0}; // Minimum tunable frequency in Hz (0 = unspecified)
74 uint32_t frequency_max_hz_{0}; // Maximum tunable frequency in Hz (0 = unspecified)
75 uint32_t supported_modulations_{0}; // Bitmask of supported RadioFrequencyModulation values
76};
77
80 public:
81 RadioFrequency() = default;
82
83 void dump_config() override;
84
87 const RadioFrequencyTraits &get_traits() const { return this->traits_; }
88
91
94
96 template<typename F> void add_on_receive_callback(F &&callback) {
97 this->receive_callback_.add(std::forward<F>(callback));
98 }
99
105 template<typename F> void add_on_control_callback(F &&callback) {
106 this->control_callback_.add(std::forward<F>(callback));
107 }
108
109 protected:
111
113 void on_call_(const RadioFrequencyCall &call) { this->control_callback_.call(call); }
119 virtual bool control(const RadioFrequencyCall &call) = 0;
120
121 // Traits describing capabilities
123
124 // Callback manager for receive events (lazy: saves memory when no callbacks registered)
126 // Callback manager for on_control trigger (lazy: same memory savings)
128};
129
130} // namespace esphome::radio_frequency
Builder for a transmit; Call is the concrete call type and Entity its entity, so the fluent setters r...
Definition ir_rf_base.h:187
Everything an infrared or radio frequency entity does that does not depend on the medium: the remote_...
Definition ir_rf_base.h:76
RadioFrequencyCall - Builder pattern for transmitting radio frequency signals.
RadioFrequencyCall & set_frequency(uint32_t frequency_hz)
Set the carrier frequency in Hz (e.g. 433920000 for 433.92 MHz)
RadioFrequencyCall & set_modulation(RadioFrequencyModulation modulation)
Set the modulation type (defaults to OOK)
RadioFrequencyModulation get_modulation() const
Get the modulation type.
const optional< uint32_t > & get_frequency() const
Get the frequency in Hz.
RadioFrequency - Base class for radio frequency implementations.
RadioFrequencyCall make_call()
Create a call object for transmitting.
void on_call_(const RadioFrequencyCall &call)
Fires the on_control hooks before the platform-specific control() runs.
LazyCallbackManager< void(const RadioFrequencyCall &)> control_callback_
LazyCallbackManager< void(remote_base::RemoteReceiveData)> receive_callback_
bool on_receive(remote_base::RemoteReceiveData data) override
Called when RF data is received (from RemoteReceiverListener)
void add_on_receive_callback(F &&callback)
Add a callback to invoke when RF data is received.
const RadioFrequencyTraits & get_traits() const
void add_on_control_callback(F &&callback)
Add a callback to invoke when a transmit call is made on this entity.
RadioFrequencyTraits & get_traits()
Get the traits for this radio frequency implementation.
virtual bool control(const RadioFrequencyCall &call)=0
Perform the actual transmission (called by RadioFrequencyCall::perform()) Platforms must override thi...
RadioFrequencyTraits - Describes the capabilities of a radio frequency implementation.
uint32_t get_frequency_min_hz() const
Hardware-supported tunable frequency range in Hz.
uint32_t get_supported_modulations() const
Bitmask of supported RadioFrequencyModulation values (bit N = modulation value N supported).
void set_fixed_frequency_hz(uint32_t freq)
Convenience setter for fixed-frequency hardware (sets min == max).
void add_supported_modulation(RadioFrequencyModulation mod)
RadioFrequencyModulation
Modulation types supported by radio frequency implementations.
static void uint32_t