Arduino PulseWire Transceiver Library
Loading...
Searching...
No Matches
RecorderCodec.h
1#pragma once
2#include "Codec.h"
3
4namespace pulsewire {
5
11class RecorderCodec : public Codec {
12 public:
13 RecorderCodec(Codec& ref) : _ref(ref) {}
14
15 void init(Preamble& detector, uint32_t shortPulseUs = 600,
16 uint32_t longPulseUs = 1200, uint32_t toleranceUs = 200) override {
17 _ref.init(detector, shortPulseUs, longPulseUs, toleranceUs);
18 }
19 void setFrameSize(uint16_t size) {
20 _ref.setFrameSize(size);
21 _recordedEdges.reserve(size * getEdgeCount());
22 }
23
25 //_recordedEdges.clear();
26 return _ref.begin(bitFrequencyHz);
27 }
28
29 CodecEnum getCodecType() const override { return _ref.getCodecType(); }
30
31 size_t getEdgeCount() const { return _ref.getEdgeCount(); }
32
33 int getEndOfFrameDelayUs() override { return _ref.getEndOfFrameDelayUs(); }
34
35 Vector<OutputEdge>& getRecordedEdges() { return _recordedEdges; }
36
37 void clear() { _recordedEdges.clear(); }
38
39 size_t encode(uint8_t byte, Vector<OutputEdge>& output) override {
40 return _ref.encode(byte, output);
41 }
42
43 bool decodeEdge(uint32_t durationUs, bool level, uint8_t& result) override {
44 _recordedEdges.push_back({level, durationUs});
45 return _ref.decodeEdge(durationUs, level, result);
46 }
47
48 protected:
49 Codec& _ref;
50 Vector<OutputEdge> _recordedEdges;
51};
52
53} // namespace pulsewire
Abstract base class for IR protocol encoding and decoding.
Definition Codec.h:53
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 decodeEdge(uint32_t durationUs, bool level, uint8_t &result)=0
Edge-based decoding for protocol-agnostic RX drivers.
virtual void init(Preamble &detector, uint32_t shortPulseUs=600, uint32_t longPulseUs=1200, uint32_t toleranceUs=200)
Definition Codec.h:63
virtual CodecEnum getCodecType() const =0
virtual size_t getEdgeCount() const =0
Get the number of protocol symbols (bits, pulses, etc.) per encoded byte.
virtual bool begin(uint32_t bitFrequencyHz)
initialization method for codecs that require setup before use (e.g., loading PIO programs,...
Definition Codec.h:70
void setFrameSize(uint16_t size)
Set the Frame Size.
Definition Codec.h:114
Abstract base class for preamble detection and generation.
Definition Preamble.h:40
Codec Wrapper that records all edges passed to decodeEdge() for later analysis or testing.
int getEndOfFrameDelayUs() override
bool decodeEdge(uint32_t durationUs, bool level, uint8_t &result) override
Edge-based decoding for protocol-agnostic RX drivers.
void init(Preamble &detector, uint32_t shortPulseUs=600, uint32_t longPulseUs=1200, uint32_t toleranceUs=200) override
size_t getEdgeCount() const
Get the number of protocol symbols (bits, pulses, etc.) per encoded byte.
CodecEnum getCodecType() const override
bool begin(uint32_t bitFrequencyHz)
initialization method for codecs that require setup before use (e.g., loading PIO programs,...
size_t encode(uint8_t byte, Vector< OutputEdge > &output) override
Fill output vector with protocol-specific OutputSpec(s) for a byte.
Small, header-only vector replacement for non-STL environments.
Definition Vector.h:29
void clear()
Remove all elements.
Definition Vector.h:120
void push_back(const T &value)
Add element to end of vector.
Definition Vector.h:92
void reserve(size_t cap)
Reserve space for at least cap elements.
Definition Vector.h:157