4#include "DriverArduino.h"
6#include "Transceiver.h"
30 : _irProtocol(&protocol),
33 _signal(protocol.frequency()),
34 _codec(protocol.codec()),
35 _rx(_codec, _rxPin, protocol.frequency()),
36 _tx(_codec, _txPin, _signal, protocol.frequency()),
37 _transceiver(_rx, _tx) {
40 setIRProtocol(protocol);
45 : _irProtocol(&protocol),
48 _signal(protocol.frequency()),
49 _codec(protocol.codec()),
50 _rx(_codec, _rxPin, protocol.frequency()),
51 _tx(_codec, _txPin, _signal, protocol.frequency()),
52 _transceiver(_rx, _tx) {
56 setIRProtocol(protocol);
62 int available()
override {
return _transceiver.
available(); }
63 size_t readBytes(uint8_t* data,
size_t len) {
66 int read()
override {
return _transceiver.
read(); }
67 int peek()
override {
return _transceiver.
peek(); }
68 void flush()
override { _transceiver.
flush(); }
69 size_t write(uint8_t b)
override {
return _transceiver.
write(b); }
70 size_t write(
const uint8_t* data,
size_t len) {
71 return _transceiver.
write(data, len);
74 const IRProtocol& getInfo()
const {
return *_irProtocol; }
77 void setIRProtocol(IRProtocol& info) {
78 if (&info == _irProtocol)
return;
83 _codec.
init(*_irProtocol, info.shortPulseUs(), info.longPulseUs(),
85 _rx.init(_codec, _rxPin, info.frequency());
86 _tx.init(_txProtocol, _codec, _txPin, info.frequency());
87 uint32_t baud = 1000000 / (info.shortPulseUs() + info.longPulseUs()) / 2;
88 _txProtocol.
begin(baud, &_codec, _txPin);
89 _signal.setFrequency(info.frequency());
90 _signal.setTxPin(_txPin);
92 _transceiver.setFramingMode(
93 FramingMode::FixedSize);
98 static void onChange(IRProtocolEnum proto, IRProtocol& info,
void* ref) {
100 transceiver->setIRProtocol(info);
104 setIRProtocol(*_irProtocol);
105 _transceiver.
begin();
109 IRProtocol* _irProtocol =
nullptr;
112 TxProtocolGeneric _txProtocol{&_signal};
115 Transceiver _transceiver;
virtual void init(Preamble &detector, uint32_t shortPulseUs=600, uint32_t longPulseUs=1200, uint32_t toleranceUs=200)
IRMultiProtocol: Handles detection and delegation for multiple IR protocols.
uint32_t toleranceUs() const
Tolerance in microseconds for pulse duration matching during detection.
void setCallback(void(*callback)(IRProtocolEnum, IRProtocol &, void *ref), void *ref)
uint32_t shortPulseUs() const
Returns the duration of the short pulse in microseconds.
uint32_t longPulseUs() const
Returns the duration of the long pulse in microseconds.
IRProtocol: Represents a specific IR protocol with all its parameters.
virtual uint32_t shortPulseUs() const
Returns the duration of the short pulse in microseconds.
virtual uint32_t toleranceUs() const
Tolerance in microseconds for pulse duration matching during detection.
virtual uint32_t longPulseUs() const
Returns the duration of the long pulse in microseconds.
Receiver class for IR communication.
IRTransceiver: High-level interface for sending and receiving IR signals.
IRTransceiver(IRProtocol &protocol, uint8_t rxPin, uint8_t txPin)
Constructor for defined Protocol.
IRTransceiver(IRMultiProtocol &protocol, uint8_t rxPin, uint8_t txPin)
Constructor for Multiple Protocols.
Transmitter class for IR communication.
void setFrameSize(uint16_t size)
Set the expected maximum frame size for RX/TX drivers and single-char buffer.
int available() override
Return the number of bytes available to read.
int peek() override
Peek at the next byte in the buffer without removing it.
size_t write(uint8_t byte) override
Write a single byte to the TX driver.
int read() override
Read a single byte from the buffer.
void flush() override
Not implemented.
virtual size_t readBytes(uint8_t *buffer, size_t length)
Read bytes into the provided buffer, up to the specified length.
bool begin(uint32_t bitFrequencyHz=DEFAULT_BIT_FREQ_HZ)
Initialize the transceiver and drivers.
bool begin(uint32_t bitFrequencyHz, Codec *p_codec, uint8_t pin)
Initializes the protocol with the specified codec and transmission pin.