4#include "TransceiverConfig.h"
5#include "pulse/SignalBase.h"
6#include "pulse/TxDriver.h"
7#include "pulse/codecs/Codec.h"
8#include "pulse/tools/Logger.h"
9#include "pulse/tools/RingBuffer.h"
10#include "pulse/tools/Vector.h"
23 void setTxPin(
uint8_t pin)
override {
29 void sendBit(
bool bit) {
49 uint16_t getFrequency()
const {
return _freq; }
57 void sendBit(
bool bit) {
69#if defined(HAS_SET_PMW_FREQUENCY1) || defined(HAS_SET_PMW_FREQUENCY2)
84#if defined(HAS_SET_PMW_FREQUENCY1)
87#if defined(HAS_SET_PMW_FREQUENCY2)
92 void sendBit(
bool bit)
override {
128 virtual void setFrameSize(
uint16_t size) = 0;
129 virtual void sendPreamble() = 0;
131 virtual void sendEnd(
bool& _useChecksum) = 0;
132 virtual bool isFrameClosed()
const = 0;
239 delayUs(
spec.pulseUs);
271 delayUs(
spec.pulseUs);
Abstract base class for IR protocol encoding and decoding.
virtual size_t encode(uint8_t byte, Vector< OutputEdge > &output)=0
Fill output vector with protocol-specific OutputSpec(s) for a byte.
virtual int getEndOfFrameDelayUs()=0
virtual bool getIdleLevel() const
Provides the initial ldle state (low or hith)
virtual size_t flushEncoder(Vector< OutputEdge > &output)
Flush any pending encoder state at end of frame.
virtual bool begin(uint32_t bitFrequencyHz)
initialization method for codecs that require setup before use (e.g., loading PIO programs,...
Digital output signal implementation using digitalWrite.
static void debug(const char *format,...)
Log a debug message with formatting.
static void error(const char *format,...)
Log an error message with formatting.
PWM-modulated output signal implementation using analogWrite and analogWriteFrequency.
Abstract base class for signal output.
Tone-modulated output signal implementation using tone().
Generic implementation that is supported by all Arduino cores.
Codec * _codec
Pointer to the codec used for encoding data.
void sendPreamble()
Sends the preamble for the transmission.
TxProtocolGeneric(SignalBase *p_signal)
Constructs a TxProtocolGeneric instance with the specified signal implementation.
uint8_t check_sum
Checksum for data integrity.
bool is_frame_closed
Indicates whether the frame is closed.
void sendData(const uint8_t *data, uint8_t len)
Encodes and transmits the data.
SignalBase * p_signal
Pointer to the signal implementation.
bool isFrameClosed() const
Checks whether the transmission frame is closed.
bool begin(uint32_t bitFrequencyHz, Codec *p_codec, uint8_t pin)
Initializes the protocol with the specified codec and transmission pin.
void setFrameSize(uint16_t size)
Configures the size of the data to be transmitted.
void sendEnd(bool &_useChecksum)
Sends the end signal for the transmission.
Vector< OutputEdge > _output_buffer
Buffer for storing encoded signal edges.
Abstract base class for defining transmission protocols.
Small, header-only vector replacement for non-STL environments.
void clear()
Remove all elements.
void reserve(size_t cap)
Reserve space for at least cap elements.