7#include "TransceiverConfig.h"
8#include "pulse/tools/Logger.h"
9#include "pulse/tools/RingBuffer.h"
10#include "pulse/RxDriver.h"
11#include "pulse/TxDriver.h"
49 : _rxDriver(&
rx), _txDriver(&
tx) {
89 _singleCharRxBuffer.resize(size);
94 _txDriver->setFrameSize(size);
98 bool setFramingMode(FramingMode
mode) {
100 _txDriver->setFramingMode(
mode);
106 void setTimeout(uint32_t timeoutUs) {
141 if (_txDriver) _txDriver->end();
142 if (_rxDriver) _rxDriver->
end();
156 return _txDriver->write(
buffer, size);
178 return _singleCharRxBuffer.available() + _rxDriver->
available();
185 refillSingleCharBuffer();
186 return _singleCharRxBuffer.
read();
212 refillSingleCharBuffer();
213 return _singleCharRxBuffer.
peek();
222 void refillSingleCharBuffer() {
223 if (_singleCharRxBuffer.isEmpty() && _rxDriver) {
224 int len = _singleCharRxBuffer.size();
227 _singleCharRxBuffer.writeArray(tmp,
read);
static void debug(const char *format,...)
Log a debug message with formatting.
static void error(const char *format,...)
Log an error message with formatting.
Receiver class for communication.
bool read(T &out)
Read and remove the next element. Returns true if successful.
int readArray(T *dest, size_t len)
Read up to len elements into dest, returns number of elements read.
bool peek(T &out) const
Peek at the next element without removing it. Returns true if successful.
Abstract base class for IR receivers.
virtual void end()=0
Stop the receiver.
virtual int available()=0
Get the number of bytes available in the internal buffer.
virtual bool begin(uint32_t bitFrequencyHz)=0
Start the receiver.
void setTimeout(uint32_t timeoutMs)
Defines the read timeout for readBytes() in milliseconds.
virtual void setFrameSize(uint16_t size)=0
Set the expected frame size for dynamic data reception.
virtual size_t readBytes(uint8_t *data, size_t size)=0
Bi-directional IR transceiver class with Stream interface and driver abstraction.
void setFrameSize(uint16_t size)
Set the expected maximum frame size for RX/TX drivers and single-char buffer.
Transceiver(RxDriver &rx, TxDriver &tx, FramingMode mode, size_t frameSize)
Constructor with RX and TX drivers.
size_t write(const uint8_t *buffer, size_t size) override
Write a buffer to the TX driver.
int available() override
Return the number of bytes available to read.
void end()
End/stop the RX driver.
void setTxDriver(TxDriver *driver)
Set the TX driver.
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.
Transceiver(RxDriver &rx, FramingMode mode, size_t frameSize)
Constructor with RX driver.
Transceiver()=default
Default constructor.
void setRxDriver(RxDriver *driver)
Set the RX driver.
Transceiver(TxDriver &tx)
Constructor with TX driver.
Transceiver(RxDriver &rx, TxDriver &tx)
Constructor with RX and TX drivers.
bool begin(uint32_t bitFrequencyHz=DEFAULT_BIT_FREQ_HZ)
Initialize the transceiver and drivers.
Transceiver(RxDriver &rx)
Constructor with RX driver.
void flush() override
Not implemented.
Transceiver(TxDriver &tx, FramingMode mode, size_t frameSize)
Constructor with TX driver.
virtual size_t readBytes(uint8_t *buffer, size_t length)
Read bytes into the provided buffer, up to the specified length.
int availableForWrite() override
Return the number of bytes available for writing (always 1024)
Transmitter class for communication.
Abstract base class for IR transmitters.
Small, header-only vector replacement for non-STL environments.