Arduino PulseWire Transceiver Library
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes
pulsewire::RxDriverArduino Class Reference

Interrupt-driven Arduino RX driver for pulse-based protocols. More...

#include <RxDriverArduino.h>

Inheritance diagram for pulsewire::RxDriverArduino:
Inheritance graph
[legend]
Collaboration diagram for pulsewire::RxDriverArduino:
Collaboration graph
[legend]

Public Member Functions

 RxDriverArduino (Codec &codec, uint8_t pin, uint32_t freqHz=DEFAULT_BIT_FREQ_HZ, bool useChecksum=false, uint32_t timeoutUs=0)
 
void init (Codec &codec, uint8_t pin, uint32_t freqHz=DEFAULT_BIT_FREQ_HZ, bool useChecksum=false, uint32_t timeoutUs=0)
 
void setFrameSize (uint16_t size) override
 Set the expected frame size for dynamic data reception.
 
void setRxBufferSize (size_t size)
 Set the size of the internal RX buffer.
 
bool begin (uint16_t bitFrequencyHz=DEFAULT_BIT_FREQ_HZ) override
 Start the receiver.
 
size_t readBytes (uint8_t *buffer, size_t length) override
 
int available () override
 Get the number of bytes available in the internal buffer.
 
void end ()
 Stop the receiver.
 

Protected Member Functions

void IRAM_ATTR handleInterrupt () override
 
void processEdges ()
 
void checkTimeout ()
 
void reset ()
 

Protected Attributes

volatile uint32_t _lastEdge
 
volatile bool _lastLevel
 
uint8_t _pin
 
uint32_t _freqHz
 
uint16_t _frameSize = DEFAULT_FRAME_SIZE
 
Codec_codec
 
RingBuffer< uint8_t_rxBuffer
 
RingBuffer< OutputEdge_edgeBuffer
 
uint32_t _bitPeriodUs = 0
 
uint32_t _minUs = 0
 
uint32_t _maxUs = 0
 
bool _useChecksum = false
 
uint32_t _timeoutUs = 0
 
volatile bool _is_active = false
 
volatile bool _is_open = false
 

Detailed Description

Interrupt-driven Arduino RX driver for pulse-based protocols.

RxDriverArduino receives and decodes pulse-based signals (such as IR or single-wire protocols) using hardware interrupts for precise edge timing. It supports any Codec (Manchester, NRZ, etc.) and is compatible with both platforms that support attachInterruptArg (e.g., ESP32, RP2040) and those that do not (e.g., AVR, via ISRManager).

Features:

Limitations:

Definition at line 141 of file RxDriverArduino.h.

Constructor & Destructor Documentation

◆ RxDriverArduino()

pulsewire::RxDriverArduino::RxDriverArduino ( Codec codec,
uint8_t  pin,
uint32_t  freqHz = DEFAULT_BIT_FREQ_HZ,
bool  useChecksum = false,
uint32_t  timeoutUs = 0 
)
inline
Parameters
codecIR codec
pinRX pin
freqHzBit frequency
useChecksumIf true, validate checksum (default: false)

Definition at line 150 of file RxDriverArduino.h.

◆ ~RxDriverArduino()

pulsewire::RxDriverArduino::~RxDriverArduino ( )
inline

Definition at line 173 of file RxDriverArduino.h.

Member Function Documentation

◆ available()

int pulsewire::RxDriverArduino::available ( )
inlineoverridevirtual

Get the number of bytes available in the internal buffer.

Implements pulsewire::RxDriver.

Definition at line 242 of file RxDriverArduino.h.

◆ begin()

bool pulsewire::RxDriverArduino::begin ( uint16_t  bitFrequencyHz = DEFAULT_BIT_FREQ_HZ)
inlineoverridevirtual

Start the receiver.

Implements pulsewire::RxDriver.

Definition at line 186 of file RxDriverArduino.h.

◆ checkTimeout()

void pulsewire::RxDriverArduino::checkTimeout ( )
inlineprotected

Definition at line 315 of file RxDriverArduino.h.

◆ end()

void pulsewire::RxDriverArduino::end ( )
inlinevirtual

Stop the receiver.

Implements pulsewire::RxDriver.

Definition at line 250 of file RxDriverArduino.h.

◆ handleInterrupt()

void IRAM_ATTR pulsewire::RxDriverArduino::handleInterrupt ( )
inlineoverrideprotectedvirtual

Implements pulsewire::RxDriverInt.

Definition at line 286 of file RxDriverArduino.h.

◆ init()

void pulsewire::RxDriverArduino::init ( Codec codec,
uint8_t  pin,
uint32_t  freqHz = DEFAULT_BIT_FREQ_HZ,
bool  useChecksum = false,
uint32_t  timeoutUs = 0 
)
inline

Definition at line 161 of file RxDriverArduino.h.

◆ processEdges()

void pulsewire::RxDriverArduino::processEdges ( )
inlineprotected

Definition at line 299 of file RxDriverArduino.h.

◆ readBytes()

size_t pulsewire::RxDriverArduino::readBytes ( uint8_t data,
size_t  size 
)
inlineoverridevirtual

Read up to 'size' bytes from the internal buffer into 'data'. Returns number of bytes read.

Implements pulsewire::RxDriver.

Definition at line 231 of file RxDriverArduino.h.

◆ reset()

void pulsewire::RxDriverArduino::reset ( )
inlineprotected

Definition at line 340 of file RxDriverArduino.h.

◆ setFrameSize()

void pulsewire::RxDriverArduino::setFrameSize ( uint16_t  size)
inlineoverridevirtual

Set the expected frame size for dynamic data reception.

Implements pulsewire::RxDriver.

Definition at line 175 of file RxDriverArduino.h.

◆ setRxBufferSize()

void pulsewire::RxDriverArduino::setRxBufferSize ( size_t  size)
inlinevirtual

Set the size of the internal RX buffer.

Implements pulsewire::RxDriver.

Definition at line 184 of file RxDriverArduino.h.

Field Documentation

◆ _bitPeriodUs

uint32_t pulsewire::RxDriverArduino::_bitPeriodUs = 0
protected

Definition at line 272 of file RxDriverArduino.h.

◆ _codec

Codec& pulsewire::RxDriverArduino::_codec
protected

Definition at line 268 of file RxDriverArduino.h.

◆ _edgeBuffer

RingBuffer<OutputEdge> pulsewire::RxDriverArduino::_edgeBuffer
protected

Definition at line 270 of file RxDriverArduino.h.

◆ _frameSize

uint16_t pulsewire::RxDriverArduino::_frameSize = DEFAULT_FRAME_SIZE
protected

Definition at line 267 of file RxDriverArduino.h.

◆ _freqHz

uint32_t pulsewire::RxDriverArduino::_freqHz
protected

Definition at line 266 of file RxDriverArduino.h.

◆ _is_active

volatile bool pulsewire::RxDriverArduino::_is_active = false
protected

Definition at line 277 of file RxDriverArduino.h.

◆ _is_open

volatile bool pulsewire::RxDriverArduino::_is_open = false
protected

Definition at line 278 of file RxDriverArduino.h.

◆ _lastEdge

volatile uint32_t pulsewire::RxDriverArduino::_lastEdge
protected

Definition at line 263 of file RxDriverArduino.h.

◆ _lastLevel

volatile bool pulsewire::RxDriverArduino::_lastLevel
protected

Definition at line 264 of file RxDriverArduino.h.

◆ _maxUs

uint32_t pulsewire::RxDriverArduino::_maxUs = 0
protected

Definition at line 274 of file RxDriverArduino.h.

◆ _minUs

uint32_t pulsewire::RxDriverArduino::_minUs = 0
protected

Definition at line 273 of file RxDriverArduino.h.

◆ _pin

uint8_t pulsewire::RxDriverArduino::_pin
protected

Definition at line 265 of file RxDriverArduino.h.

◆ _rxBuffer

RingBuffer<uint8_t> pulsewire::RxDriverArduino::_rxBuffer
protected

Definition at line 269 of file RxDriverArduino.h.

◆ _timeoutUs

uint32_t pulsewire::RxDriverArduino::_timeoutUs = 0
protected

Definition at line 276 of file RxDriverArduino.h.

◆ _useChecksum

bool pulsewire::RxDriverArduino::_useChecksum = false
protected

Definition at line 275 of file RxDriverArduino.h.


The documentation for this class was generated from the following file: