HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
BasePio Class Referenceabstract

Abstract base class for Programmable IO Channel implementations. More...

#include <BasePio.h>

Inheritance diagram for BasePio:
[legend]
Collaboration diagram for BasePio:
[legend]

Public Member Functions

virtual ~BasePio () noexcept=default
 Virtual destructor.
 
 BasePio (const BasePio &)=delete
 
BasePiooperator= (const BasePio &)=delete
 
 BasePio (BasePio &&) noexcept=default
 
BasePiooperator= (BasePio &&) noexcept=default
 
virtual hf_pio_err_t Initialize () noexcept=0
 Initialize the PIO peripheral.
 
virtual hf_pio_err_t Deinitialize () noexcept=0
 Deinitialize the PIO peripheral.
 
bool IsInitialized () const noexcept
 Check if the PIO is initialized.
 
bool EnsureInitialized () noexcept
 Ensures that the PIO is initialized (lazy initialization).
 
bool EnsureDeinitialized () noexcept
 Ensures that the PIO is deinitialized (lazy deinitialization).
 
virtual hf_pio_err_t ConfigureChannel (hf_u8_t channel_id, const hf_pio_channel_config_t &config) noexcept=0
 Configure a PIO channel.
 
virtual hf_pio_err_t Transmit (hf_u8_t channel_id, const hf_pio_symbol_t *symbols, size_t symbol_count, bool wait_completion=false) noexcept=0
 Transmit a sequence of symbols.
 
virtual hf_pio_err_t StartReceive (hf_u8_t channel_id, hf_pio_symbol_t *buffer, size_t buffer_size, hf_u32_t timeout_us=0) noexcept=0
 Start receiving symbols.
 
virtual hf_pio_err_t StopReceive (hf_u8_t channel_id, size_t &symbols_received) noexcept=0
 Stop receiving and get the number of symbols received.
 
virtual bool IsChannelBusy (hf_u8_t channel_id) const noexcept=0
 Check if a channel is currently busy.
 
virtual hf_pio_err_t GetChannelStatus (hf_u8_t channel_id, hf_pio_channel_status_t &status) const noexcept=0
 Get channel status information.
 
virtual hf_pio_err_t GetCapabilities (hf_pio_capabilities_t &capabilities) const noexcept=0
 Get PIO capabilities.
 
virtual void SetTransmitCallback (hf_u8_t channel_id, hf_pio_transmit_callback_t callback, void *user_data=nullptr) noexcept=0
 Set callback for transmission complete events.
 
virtual void SetReceiveCallback (hf_u8_t channel_id, hf_pio_receive_callback_t callback, void *user_data=nullptr) noexcept=0
 Set callback for reception complete events.
 
virtual void SetErrorCallback (hf_u8_t channel_id, hf_pio_error_callback_t callback, void *user_data=nullptr) noexcept=0
 Set callback for error events.
 
virtual void ClearChannelCallbacks (hf_u8_t channel_id) noexcept=0
 Clear all callbacks for a specific channel.
 
virtual void ClearCallbacks () noexcept=0
 Clear all callbacks.
 
virtual hf_pio_err_t ResetStatistics () noexcept
 Reset PIO operation statistics.
 
virtual hf_pio_err_t ResetDiagnostics () noexcept
 Reset PIO diagnostic information.
 
virtual hf_pio_err_t GetStatistics (hf_u8_t channel_id, hf_pio_statistics_t &statistics) const noexcept
 Get PIO operation statistics.
 
virtual hf_pio_err_t GetDiagnostics (hf_u8_t channel_id, hf_pio_diagnostics_t &diagnostics) const noexcept
 Get PIO diagnostic information.
 

Protected Member Functions

 BasePio () noexcept
 Protected constructor.
 

Protected Attributes

bool initialized_
 Initialization state tracking.
 
hf_pio_statistics_t statistics_
 PIO operation statistics.
 
hf_pio_diagnostics_t diagnostics_
 PIO diagnostic information.
 

Detailed Description

Abstract base class for Programmable IO Channel implementations.

This class defines the interface for precise, buffered digital signal I/O that can handle timing-critical operations like WS2812 LED driving, IR communication, stepper motor control, and custom protocols.

The abstraction is designed to work with various hardware backends:

  • Dedicated peripherals (e.g. RMT or PIO engines)
  • Timer + DMA + GPIO combinations
  • Fully software-based implementations

Key features:

  • Precise timing control down to nanosecond resolution
  • Buffered symbol transmission and reception
  • Asynchronous operation with callbacks
  • Platform-agnostic interface
  • Support for complex waveform generation and decoding

Constructor & Destructor Documentation

◆ ~BasePio()

virtual BasePio::~BasePio ( )
virtualdefaultnoexcept

Virtual destructor.

◆ BasePio() [1/3]

BasePio::BasePio ( const BasePio & )
delete

◆ BasePio() [2/3]

BasePio::BasePio ( BasePio && )
defaultnoexcept

◆ BasePio() [3/3]

BasePio::BasePio ( )
inlineprotectednoexcept

Protected constructor.

Member Function Documentation

◆ ClearCallbacks()

virtual void BasePio::ClearCallbacks ( )
pure virtualnoexcept

Clear all callbacks.

Implemented in EspPio.

◆ ClearChannelCallbacks()

virtual void BasePio::ClearChannelCallbacks ( hf_u8_t channel_id)
pure virtualnoexcept

Clear all callbacks for a specific channel.

Parameters
channel_idChannel identifier

Implemented in EspPio.

◆ ConfigureChannel()

virtual hf_pio_err_t BasePio::ConfigureChannel ( hf_u8_t channel_id,
const hf_pio_channel_config_t & config )
pure virtualnoexcept

Configure a PIO channel.

Parameters
channel_idChannel identifier
configChannel configuration
Returns
Error code indicating success or failure

Implemented in EspPio.

◆ Deinitialize()

virtual hf_pio_err_t BasePio::Deinitialize ( )
pure virtualnoexcept

Deinitialize the PIO peripheral.

Returns
Error code indicating success or failure

Implemented in EspPio.

◆ EnsureDeinitialized()

bool BasePio::EnsureDeinitialized ( )
inlinenoexcept

Ensures that the PIO is deinitialized (lazy deinitialization).

Returns
true if the PIO is deinitialized, false otherwise.

◆ EnsureInitialized()

bool BasePio::EnsureInitialized ( )
inlinenoexcept

Ensures that the PIO is initialized (lazy initialization).

Returns
true if the PIO is initialized, false otherwise.

◆ GetCapabilities()

virtual hf_pio_err_t BasePio::GetCapabilities ( hf_pio_capabilities_t & capabilities) const
pure virtualnoexcept

Get PIO capabilities.

Parameters
capabilities[out] Capability information
Returns
Error code indicating success or failure

Implemented in EspPio.

◆ GetChannelStatus()

virtual hf_pio_err_t BasePio::GetChannelStatus ( hf_u8_t channel_id,
hf_pio_channel_status_t & status ) const
pure virtualnoexcept

Get channel status information.

Parameters
channel_idChannel identifier
status[out] Status information
Returns
Error code indicating success or failure

Implemented in EspPio.

◆ GetDiagnostics()

virtual hf_pio_err_t BasePio::GetDiagnostics ( hf_u8_t channel_id,
hf_pio_diagnostics_t & diagnostics ) const
inlinevirtualnoexcept

Get PIO diagnostic information.

Parameters
channel_idChannel identifier
diagnosticsReference to store diagnostics data
Returns
hf_pio_err_t::PIO_SUCCESS if successful, PIO_ERR_NOT_SUPPORTED if not implemented

Reimplemented in EspPio.

◆ GetStatistics()

virtual hf_pio_err_t BasePio::GetStatistics ( hf_u8_t channel_id,
hf_pio_statistics_t & statistics ) const
inlinevirtualnoexcept

Get PIO operation statistics.

Parameters
channel_idChannel identifier
statisticsReference to store statistics data
Returns
hf_pio_err_t::PIO_SUCCESS if successful, PIO_ERR_NOT_SUPPORTED if not implemented

Reimplemented in EspPio.

◆ Initialize()

virtual hf_pio_err_t BasePio::Initialize ( )
pure virtualnoexcept

Initialize the PIO peripheral.

Returns
Error code indicating success or failure

Implemented in EspPio.

◆ IsChannelBusy()

virtual bool BasePio::IsChannelBusy ( hf_u8_t channel_id) const
pure virtualnoexcept

Check if a channel is currently busy.

Parameters
channel_idChannel identifier
Returns
true if channel is busy, false otherwise

Implemented in EspPio.

◆ IsInitialized()

bool BasePio::IsInitialized ( ) const
inlinenoexcept

Check if the PIO is initialized.

Returns
true if initialized, false otherwise

◆ operator=() [1/2]

BasePio & BasePio::operator= ( BasePio && )
defaultnoexcept

◆ operator=() [2/2]

BasePio & BasePio::operator= ( const BasePio & )
delete

◆ ResetDiagnostics()

virtual hf_pio_err_t BasePio::ResetDiagnostics ( )
inlinevirtualnoexcept

Reset PIO diagnostic information.

Returns
hf_pio_err_t::PIO_SUCCESS if successful, error code otherwise
Note
Override this method to provide platform-specific diagnostics reset

◆ ResetStatistics()

virtual hf_pio_err_t BasePio::ResetStatistics ( )
inlinevirtualnoexcept

Reset PIO operation statistics.

Returns
hf_pio_err_t::PIO_SUCCESS if successful, error code otherwise
Note
Override this method to provide platform-specific statistics reset

◆ SetErrorCallback()

virtual void BasePio::SetErrorCallback ( hf_u8_t channel_id,
hf_pio_error_callback_t callback,
void * user_data = nullptr )
pure virtualnoexcept

Set callback for error events.

Parameters
channel_idChannel identifier
callbackCallback function
user_dataUser data to pass to callback

Implemented in EspPio.

◆ SetReceiveCallback()

virtual void BasePio::SetReceiveCallback ( hf_u8_t channel_id,
hf_pio_receive_callback_t callback,
void * user_data = nullptr )
pure virtualnoexcept

Set callback for reception complete events.

Parameters
channel_idChannel identifier
callbackCallback function
user_dataUser data to pass to callback

Implemented in EspPio.

◆ SetTransmitCallback()

virtual void BasePio::SetTransmitCallback ( hf_u8_t channel_id,
hf_pio_transmit_callback_t callback,
void * user_data = nullptr )
pure virtualnoexcept

Set callback for transmission complete events.

Parameters
channel_idChannel identifier
callbackCallback function
user_dataUser data to pass to callback

Implemented in EspPio.

◆ StartReceive()

virtual hf_pio_err_t BasePio::StartReceive ( hf_u8_t channel_id,
hf_pio_symbol_t * buffer,
size_t buffer_size,
hf_u32_t timeout_us = 0 )
pure virtualnoexcept

Start receiving symbols.

Parameters
channel_idChannel identifier
bufferBuffer to store received symbols
buffer_sizeSize of the buffer
timeout_usTimeout in microseconds (0 = no timeout)
Returns
Error code indicating success or failure

Implemented in EspPio.

◆ StopReceive()

virtual hf_pio_err_t BasePio::StopReceive ( hf_u8_t channel_id,
size_t & symbols_received )
pure virtualnoexcept

Stop receiving and get the number of symbols received.

Parameters
channel_idChannel identifier
symbols_received[out] Number of symbols actually received
Returns
Error code indicating success or failure

Implemented in EspPio.

◆ Transmit()

virtual hf_pio_err_t BasePio::Transmit ( hf_u8_t channel_id,
const hf_pio_symbol_t * symbols,
size_t symbol_count,
bool wait_completion = false )
pure virtualnoexcept

Transmit a sequence of symbols.

Parameters
channel_idChannel identifier
symbolsArray of symbols to transmit
symbol_countNumber of symbols in the array
wait_completionIf true, block until transmission is complete
Returns
Error code indicating success or failure

Implemented in EspPio.

Member Data Documentation

◆ diagnostics_

hf_pio_diagnostics_t BasePio::diagnostics_
protected

PIO diagnostic information.

◆ initialized_

bool BasePio::initialized_
protected

Initialization state tracking.

◆ statistics_

hf_pio_statistics_t BasePio::statistics_
protected

PIO operation statistics.


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