57 _protocol = &protocol;
62 bool begin(uint32_t bitFrequencyHz)
override {
65 _bitFrequencyHz = bitFrequencyHz;
67 _protocol->begin(bitFrequencyHz, _codec, _pin);
68 return _codec->
begin(bitFrequencyHz);
76 _byteBuffer.resize(size);
77 _protocol->setFrameSize(size);
84 int write(
uint8_t byte)
override {
85 if (_byteBuffer.size() == 0) {
88 _byteBuffer.write(
byte);
89 if (_byteBuffer.isFull()) {
91 uint8_t frameData[_frameSize];
92 for (
int j = 0; j < _frameSize; j++) {
93 frameData[j] = _byteBuffer.
read();
95 sendData(frameData, _frameSize);
103 switch (_framingMode) {
104 case FramingMode::FixedSize:
105 for (
size_t i = 0;
i <
len;
i++) {
106 _byteBuffer.write(data[
i]);
107 if (_byteBuffer.isFull()) {
110 for (
int j = 0;
j < _frameSize;
j++) {
118 case FramingMode::WriteBytes:
123 case FramingMode::Flush:
124 if (_protocol->isFrameClosed()) {
133 void flush()
override {
134 if (_byteBuffer.available() > 0) {
136 _byteBuffer.
readArray(frameData, _frameSize);
137 sendData(frameData, _frameSize);
143 Codec* _codec =
nullptr;
144 TxProtocol* _protocol =
nullptr;
145 RingBuffer<uint8_t> _byteBuffer;
146 uint16_t _frameSize = DEFAULT_FRAME_SIZE;
147 FramingMode _framingMode = FramingMode::WriteBytes;
148 uint16_t _bitFrequencyHz = DEFAULT_BIT_FREQ_HZ;
149 bool _useChecksum =
false;
150 uint8_t check_sum = 0;
153 void sendPreamble() {
154 assert(_protocol !=
nullptr);
155 _protocol->sendPreamble();
158 void sendData(
const uint8_t* data, uint8_t len) {
159 assert(_protocol !=
nullptr);
160 _protocol->sendData(data, len);
164 assert(_protocol !=
nullptr);
165 bool isDelayAfterFrame = (_framingMode != FramingMode::FixedSize);
166 _protocol->sendEnd(_useChecksum, isDelayAfterFrame);
virtual bool begin(uint32_t bitFrequencyHz)
initialization method for codecs that require setup before use (e.g., loading PIO programs,...