41#define HF_PIO_ERR_LIST(X) \
43 X(PIO_SUCCESS, 0, "Success") \
45 X(PIO_ERR_FAILURE, 1, "General failure") \
46 X(PIO_ERR_NOT_INITIALIZED, 2, "Not initialized") \
47 X(PIO_ERR_ALREADY_INITIALIZED, 3, "Already initialized") \
48 X(PIO_ERR_INVALID_PARAMETER, 4, "Invalid parameter") \
49 X(PIO_ERR_NULL_POINTER, 5, "Null pointer") \
50 X(PIO_ERR_OUT_OF_MEMORY, 6, "Out of memory") \
52 X(PIO_ERR_INVALID_CHANNEL, 7, "Invalid PIO channel") \
53 X(PIO_ERR_CHANNEL_BUSY, 8, "Channel already in use") \
54 X(PIO_ERR_CHANNEL_NOT_AVAILABLE, 9, "Channel not available") \
55 X(PIO_ERR_INSUFFICIENT_CHANNELS, 10, "Insufficient channels available") \
57 X(PIO_ERR_INVALID_RESOLUTION, 11, "Invalid time resolution") \
58 X(PIO_ERR_RESOLUTION_TOO_HIGH, 12, "Time resolution too high") \
59 X(PIO_ERR_RESOLUTION_TOO_LOW, 13, "Time resolution too low") \
60 X(PIO_ERR_DURATION_TOO_LONG, 14, "Duration too long") \
61 X(PIO_ERR_DURATION_TOO_SHORT, 15, "Duration too short") \
63 X(PIO_ERR_BUFFER_OVERFLOW, 16, "Buffer overflow") \
64 X(PIO_ERR_BUFFER_UNDERFLOW, 17, "Buffer underflow") \
65 X(PIO_ERR_BUFFER_TOO_SMALL, 18, "Buffer too small") \
66 X(PIO_ERR_BUFFER_TOO_LARGE, 19, "Buffer too large") \
68 X(PIO_ERR_HARDWARE_FAULT, 20, "Hardware fault") \
69 X(PIO_ERR_COMMUNICATION_TIMEOUT, 21, "Communication timeout") \
70 X(PIO_ERR_COMMUNICATION_FAILURE, 22, "Communication failure") \
71 X(PIO_ERR_DEVICE_NOT_RESPONDING, 23, "Device not responding") \
73 X(PIO_ERR_INVALID_CONFIGURATION, 24, "Invalid configuration") \
74 X(PIO_ERR_UNSUPPORTED_OPERATION, 25, "Unsupported operation") \
75 X(PIO_ERR_PIN_CONFLICT, 26, "Pin already in use") \
76 X(PIO_ERR_RESOURCE_BUSY, 27, "Resource busy") \
78 X(PIO_ERR_SYSTEM_ERROR, 28, "System error") \
79 X(PIO_ERR_PERMISSION_DENIED, 29, "Permission denied") \
80 X(PIO_ERR_OPERATION_ABORTED, 30, "Operation aborted") \
81 X(PIO_ERR_UNKNOWN, 31, "Unknown error")
84#define X(NAME, VALUE, DESC) NAME = VALUE,
96#define X(NAME, VALUE, DESC) \
97 case hf_pio_err_t::NAME: \
247 void(*)(
hf_u8_t channel_id,
size_t symbols_sent,
void* user_data);
372 size_t symbol_count,
bool wait_completion =
false) noexcept = 0;
383 hf_u32_t timeout_us = 0) noexcept = 0;
423 void* user_data =
nullptr) noexcept = 0;
432 void* user_data =
nullptr) noexcept = 0;
441 void* user_data =
nullptr) noexcept = 0;
hf_pio_idle_state_t
PIO idle state.
Definition BasePio.h:130
@ High
Idle state is high.
hf_pio_polarity_t
PIO signal polarity.
Definition BasePio.h:122
@ Normal
Normal polarity (idle low, active high)
@ Inverted
Inverted polarity (idle high, active low)
hf_pio_direction_t
PIO channel direction.
Definition BasePio.h:113
@ Receive
Receive mode (input)
@ Transmit
Transmit mode (output)
@ Bidirectional
Bidirectional mode (if supported)
#define X(NAME, VALUE, DESC)
Definition BasePio.h:84
void(*)( hf_u8_t channel_id, const hf_pio_symbol_t *symbols, size_t symbol_count, void *user_data) hf_pio_receive_callback_t
Callback for PIO reception complete events.
Definition BasePio.h:256
hf_pio_err_t
Definition BasePio.h:83
@ PIO_ERR_UNSUPPORTED_OPERATION
void(*)(hf_u8_t channel_id, hf_pio_err_t error, void *user_data) hf_pio_error_callback_t
Callback for PIO error events.
Definition BasePio.h:264
constexpr std::string_view HfPioErrToString(hf_pio_err_t err) noexcept
Convert hf_pio_err_t to human-readable string.
Definition BasePio.h:94
void(*)(hf_u8_t channel_id, size_t symbols_sent, void *user_data) hf_pio_transmit_callback_t
Callback for PIO transmission complete events.
Definition BasePio.h:246
Platform-agnostic hardware type definitions for the HardFOC system.
uint32_t hf_u32_t
Platform-agnostic 32-bit unsigned integer type.
Definition HardwareTypes.h:52
uint8_t hf_u8_t
Platform-agnostic 8-bit unsigned integer type.
Definition HardwareTypes.h:40
hf_i32_t hf_pin_num_t
Platform-agnostic GPIO pin number type.
Definition HardwareTypes.h:99
Abstract base class for Programmable IO Channel implementations.
Definition BasePio.h:292
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 ConfigureChannel(hf_u8_t channel_id, const hf_pio_channel_config_t &config) noexcept=0
Configure a PIO channel.
bool EnsureInitialized() noexcept
Ensures that the PIO is initialized (lazy initialization).
Definition BasePio.h:335
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 void ClearCallbacks() noexcept=0
Clear all callbacks.
virtual hf_pio_err_t GetDiagnostics(hf_u8_t channel_id, hf_pio_diagnostics_t &diagnostics) const noexcept
Get PIO diagnostic information.
Definition BasePio.h:496
hf_pio_diagnostics_t diagnostics_
PIO diagnostic information.
Definition BasePio.h:513
hf_pio_statistics_t statistics_
PIO operation statistics.
Definition BasePio.h:512
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.
bool EnsureDeinitialized() noexcept
Ensures that the PIO is deinitialized (lazy deinitialization).
Definition BasePio.h:346
virtual bool IsChannelBusy(hf_u8_t channel_id) const noexcept=0
Check if a channel is currently busy.
virtual ~BasePio() noexcept=default
Virtual destructor.
virtual hf_pio_err_t ResetDiagnostics() noexcept
Reset PIO diagnostic information.
Definition BasePio.h:473
virtual hf_pio_err_t GetChannelStatus(hf_u8_t channel_id, hf_pio_channel_status_t &status) const noexcept=0
Get channel status information.
bool initialized_
Initialization state tracking.
Definition BasePio.h:511
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 hf_pio_err_t Deinitialize() noexcept=0
Deinitialize the PIO peripheral.
bool IsInitialized() const noexcept
Check if the PIO is initialized.
Definition BasePio.h:327
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 hf_pio_err_t ResetStatistics() noexcept
Reset PIO operation statistics.
Definition BasePio.h:463
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 hf_pio_err_t GetCapabilities(hf_pio_capabilities_t &capabilities) const noexcept=0
Get PIO capabilities.
virtual hf_pio_err_t GetStatistics(hf_u8_t channel_id, hf_pio_statistics_t &statistics) const noexcept
Get PIO operation statistics.
Definition BasePio.h:484
virtual void ClearChannelCallbacks(hf_u8_t channel_id) noexcept=0
Clear all callbacks for a specific channel.
virtual hf_pio_err_t Initialize() noexcept=0
Initialize the PIO peripheral.
BasePio() noexcept
Protected constructor.
Definition BasePio.h:506
#define HF_PIO_ERR_LIST(X)
HardFOC PIO error codes.
Definition BasePio.h:41
PIO capability information.
Definition BasePio.h:181
bool supports_carrier
Supports carrier modulation.
Definition BasePio.h:189
size_t max_buffer_size
Maximum buffer size.
Definition BasePio.h:186
bool supports_bidirectional
Supports bidirectional mode.
Definition BasePio.h:187
hf_u8_t max_channels
Maximum number of channels.
Definition BasePio.h:182
hf_u32_t max_duration
Maximum single duration.
Definition BasePio.h:185
bool supports_loopback
Supports loopback mode.
Definition BasePio.h:188
hf_u32_t max_resolution_ns
Maximum time resolution.
Definition BasePio.h:184
hf_u32_t min_resolution_ns
Minimum time resolution.
Definition BasePio.h:183
PIO channel configuration structure.
Definition BasePio.h:138
hf_pio_idle_state_t idle_state
Idle state.
Definition BasePio.h:143
hf_pin_num_t gpio_pin
GPIO pin for PIO signal.
Definition BasePio.h:139
hf_pio_direction_t direction
Channel direction.
Definition BasePio.h:140
size_t buffer_size
Buffer size for symbols/durations.
Definition BasePio.h:145
hf_pio_channel_config_t() noexcept
Definition BasePio.h:147
hf_pio_polarity_t polarity
Signal polarity.
Definition BasePio.h:142
hf_u32_t resolution_ns
Time resolution in nanoseconds (user-friendly interface)
Definition BasePio.h:141
hf_u32_t timeout_us
Operation timeout in microseconds.
Definition BasePio.h:144
PIO channel status information.
Definition BasePio.h:167
bool is_receiving
Channel is receiving.
Definition BasePio.h:171
hf_u32_t timestamp_us
Timestamp of last operation.
Definition BasePio.h:175
bool is_busy
Channel is currently busy.
Definition BasePio.h:169
size_t symbols_queued
Number of symbols in queue.
Definition BasePio.h:172
bool is_transmitting
Channel is transmitting.
Definition BasePio.h:170
bool is_initialized
Channel is initialized.
Definition BasePio.h:168
size_t symbols_processed
Number of symbols processed.
Definition BasePio.h:173
hf_pio_err_t last_error
Last error that occurred.
Definition BasePio.h:174
PIO diagnostic information.
Definition BasePio.h:220
bool pioInitialized
PIO initialization status.
Definition BasePio.h:225
hf_u32_t lastErrorTimestamp
Last error timestamp.
Definition BasePio.h:223
bool pioHealthy
Overall PIO health status.
Definition BasePio.h:221
bool bidirectionalSupported
Bidirectional mode support.
Definition BasePio.h:228
hf_u8_t activeChannels
Number of active channels.
Definition BasePio.h:226
hf_pio_err_t lastErrorCode
Last error code.
Definition BasePio.h:222
hf_u32_t consecutiveErrors
Consecutive error count.
Definition BasePio.h:224
hf_pio_diagnostics_t()
Definition BasePio.h:230
hf_u32_t currentResolutionNs
Current time resolution.
Definition BasePio.h:227
PIO operation statistics.
Definition BasePio.h:195
hf_u32_t totalReceptions
Total receptions performed.
Definition BasePio.h:199
hf_u32_t symbolsTransmitted
Total symbols transmitted.
Definition BasePio.h:202
hf_u32_t bufferOverflows
Number of buffer overflows.
Definition BasePio.h:208
hf_u32_t averageTransmissionTimeUs
Average transmission time (microseconds)
Definition BasePio.h:204
hf_u32_t successfulTransmissions
Successful transmissions.
Definition BasePio.h:197
hf_u32_t minTransmissionTimeUs
Minimum transmission time.
Definition BasePio.h:206
hf_u32_t failedReceptions
Failed receptions.
Definition BasePio.h:201
hf_u32_t failedTransmissions
Failed transmissions.
Definition BasePio.h:198
hf_u32_t successfulReceptions
Successful receptions.
Definition BasePio.h:200
hf_u32_t timingErrors
Number of timing errors.
Definition BasePio.h:207
hf_u32_t symbolsReceived
Total symbols received.
Definition BasePio.h:203
hf_u32_t totalTransmissions
Total transmissions performed.
Definition BasePio.h:196
hf_u32_t maxTransmissionTimeUs
Maximum transmission time.
Definition BasePio.h:205
hf_pio_statistics_t()
Definition BasePio.h:210
PIO symbol structure for precise timing.
Definition BasePio.h:156
hf_pio_symbol_t() noexcept
Definition BasePio.h:160
bool level
Signal level (true = high, false = low)
Definition BasePio.h:158
hf_pio_symbol_t(hf_u32_t dur, bool lvl) noexcept
Definition BasePio.h:161
hf_u32_t duration
Duration in resolution units.
Definition BasePio.h:157