Internal Interface Wrap
API reference
Loading...
Searching...
No Matches
EspCan.h
Go to the documentation of this file.
1
32#pragma once
33
34#include "McuSelect.h"
35
36// ESP-IDF C headers must be wrapped in extern "C" for C++ compatibility
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41// ESP-IDF v5.5 TWAI node-based API
42#include "esp_twai.h"
43#include "esp_twai_onchip.h"
44#include "freertos/FreeRTOS.h"
45#include "freertos/semphr.h"
46
47#ifdef __cplusplus
48}
49#endif
50
51#include "BaseCan.h"
52#include "HfSpscRing.h"
53#include "PlatformMutex.h"
54#include "utils/EspTypes_CAN.h"
55
56#include <atomic>
57#include <memory>
58
59//==============================================================================
60// ESP32 TWAI NODE CONFIGURATION (ESP-IDF v5.5)
61//==============================================================================
62
68enum class hf_esp_can_rx_mode_t : uint8_t {
71 AUTO = 0,
73 QUEUE_ALWAYS = 1,
74};
75
81 // Core GPIO configuration
84
85 // Timing configuration
86 uint32_t baud_rate;
89
90 // Queue configuration
91 uint32_t tx_queue_depth;
92 uint32_t rx_queue_depth;
94
95 // Node behavior configuration
99 uint8_t intr_priority;
100
101 // Advanced features
107
108 // Clock source configuration
109 uint32_t clk_flags;
110
119};
120
125 uint32_t brp;
126 uint32_t prop_seg;
127 uint32_t tseg_1;
128 uint32_t tseg_2;
129 uint32_t sjw;
130 uint32_t ssp_offset;
131
133 : brp(8), prop_seg(10), tseg_1(4), tseg_2(5), sjw(3), ssp_offset(0) {}
134};
135
140 uint32_t id;
141 uint32_t mask;
144
145 // Dual filter configuration (when is_dual_filter = true)
146 uint32_t id2;
147 uint32_t mask2;
148
150 : id(0), mask(0), is_extended(false), is_dual_filter(false), id2(0), mask2(0) {}
151};
152
153//==============================================================================
154// ENHANCED USER CALLBACK SYSTEM
155//==============================================================================
156
169
178
187
191using hf_esp_can_receive_callback_t = void (*)(const hf_can_message_t& message, void* user_data);
192using hf_esp_can_error_callback_t = void (*)(const hf_esp_can_error_info_t& error_info,
193 void* user_data);
194using hf_esp_can_state_callback_t = void (*)(const hf_esp_can_state_info_t& state_info,
195 void* user_data);
196using hf_esp_can_tx_callback_t = void (*)(const hf_esp_can_tx_info_t& tx_info, void* user_data);
197
220class EspCan : public BaseCan {
221public:
222 //==============================================//
223 // CONSTRUCTOR AND DESTRUCTOR
224 //==============================================//
225
232 explicit EspCan(const hf_esp_can_config_t& config) noexcept;
233
237 ~EspCan() noexcept override;
238
239 //==============================================//
240 // CORE CAN OPERATIONS (From BaseCan interface)
241 //==============================================//
242
248 hf_can_err_t Initialize() noexcept override;
249
255 hf_can_err_t Deinitialize() noexcept override;
256
269 uint32_t timeout_ms = 1000) noexcept override;
270
281 hf_can_err_t ReceiveMessage(hf_can_message_t& message, uint32_t timeout_ms = 0) noexcept override;
282
289
293 void ClearReceiveCallback() noexcept override;
294
295 //==============================================//
296 // SINGLE-CALLBACK PER EVENT MANAGEMENT
297 //==============================================//
298
299 // Receive (runs in ISR context: copy the frame, no blocking, no logging)
301 void* user_data = nullptr) noexcept;
302 void ClearReceiveCallbackEx() noexcept;
303
304 // Error
305 hf_can_err_t SetErrorCallback(hf_esp_can_error_callback_t cb, void* user_data = nullptr) noexcept;
306 void ClearErrorCallback() noexcept;
307
308 // State change
310 void* user_data = nullptr) noexcept;
311 void ClearStateChangeCallback() noexcept;
312
313 // TX complete
315 void* user_data = nullptr) noexcept;
316 void ClearTxCompleteCallback() noexcept;
317
323 hf_can_err_t GetStatus(hf_can_status_t& status) noexcept override;
324
329 hf_can_err_t Reset() noexcept override;
330
338 hf_can_err_t SetAcceptanceFilter(uint32_t id, uint32_t mask,
339 bool extended = false) noexcept override;
340
345 hf_can_err_t ClearAcceptanceFilter() noexcept override;
346
347 //==============================================//
348 // STATISTICS AND DIAGNOSTICS (From BaseCan)
349 //==============================================//
350
356 hf_can_err_t GetStatistics(hf_can_statistics_t& stats) noexcept override;
357
362 hf_can_err_t ResetStatistics() noexcept override;
363
369 hf_can_err_t GetDiagnostics(hf_can_diagnostics_t& diagnostics) noexcept override;
370
371 //==============================================//
372 // ESP-IDF v5.5 SPECIFIC ADVANCED FEATURES
373 //==============================================//
374
381
388
394
400 hf_can_err_t GetBusStatus(hf_can_bus_status_t& status) noexcept override;
401
406 hf_can_err_t RequestBusRecovery() noexcept override;
407
413 hf_can_err_t GetNodeInfo(twai_node_record_t& node_info) noexcept;
414
422 uint32_t SendMessageBatch(const hf_can_message_t* messages, uint32_t count,
423 uint32_t timeout_ms = 1000) noexcept;
424
425private:
426 //==============================================//
427 // INTERNAL EVENT CALLBACKS (ESP-IDF v5.5)
428 //==============================================//
429
437 static bool InternalReceiveCallback(twai_node_handle_t handle,
438 const twai_rx_done_event_data_t* event_data,
439 void* user_ctx) noexcept;
440
448 static bool InternalErrorCallback(twai_node_handle_t handle,
449 const twai_error_event_data_t* event_data,
450 void* user_ctx) noexcept;
451
459 static bool InternalStateChangeCallback(twai_node_handle_t handle,
460 const twai_state_change_event_data_t* event_data,
461 void* user_ctx) noexcept;
462
466 static bool InternalTxDoneCallback(twai_node_handle_t handle,
467 const twai_tx_done_event_data_t* event_data,
468 void* user_ctx) noexcept;
469
470 //==============================================//
471 // INTERNAL HELPER METHODS
472 //==============================================//
473
480 static hf_can_err_t ConvertToTwaiFrame(const hf_can_message_t& hf_message,
481 twai_frame_t& twai_frame) noexcept;
482
489 static hf_can_err_t ConvertFromTwaiFrame(const twai_frame_t& twai_frame,
490 hf_can_message_t& hf_message) noexcept;
491
497 hf_can_err_t ConvertEspError(esp_err_t esp_err) noexcept;
498
504 void UpdateStatistics(hf_can_operation_type_t operation_type, bool success) noexcept;
505
511 bool DeliverReceivedFromIsr(const hf_can_message_t& message) noexcept;
512
514 hf_can_err_t AllocateQueues() noexcept;
515
517 void ReleaseQueues() noexcept;
518
520 void RefreshBusState() noexcept;
521
526 void UpdateErrorStatistics(uint32_t error_type) noexcept;
527
528 //==============================================//
529 // CALLBACK DISPATCH HELPERS
530 //==============================================//
531
536 void DispatchErrorCallbacks(const hf_esp_can_error_info_t& error_info) noexcept;
537
542 void DispatchStateChangeCallbacks(const hf_esp_can_state_info_t& state_info) noexcept;
543
548 void DispatchTxCompleteCallbacks(const hf_esp_can_tx_info_t& tx_info) noexcept;
549
550 // (no registry helpers in single-callback design)
551
552 //==============================================//
553 // MEMBER VARIABLES (ESP-IDF v5.5 Compatible)
554 //==============================================//
555
556 // Configuration (centralized)
558
559 // State flags (atomic)
560 std::atomic<bool> is_enabled_;
561 std::atomic<bool> is_recovering_;
562
563 // Thread safety (PlatformMutex)
567
568 // ESP-IDF v5.5 TWAI node handle
569 twai_node_handle_t twai_node_handle_;
570
571 // Single callbacks + user data per event type. The receive callbacks are read
572 // from the RX ISR, so they are atomics (user data is stored before the callback).
573 std::atomic<hf_esp_can_receive_callback_t> receive_cb_{nullptr};
574 std::atomic<void*> receive_ud_{nullptr};
575 std::atomic<hf_can_receive_callback_t> base_receive_cb_{nullptr};
576
578 void* error_ud_ = nullptr;
579
581 void* state_ud_ = nullptr;
582
584 void* tx_ud_ = nullptr;
585
586 // Statistics and diagnostics
589
590 // Advanced features
594
595 // RX path: ISR -> lock-free ring -> ReceiveMessage()
597 SemaphoreHandle_t rx_sem_{nullptr};
599
600 // TX path: each queued frame lives in a slot until the TX-done ISR frees it.
601 // The TWAI driver queues a pointer to the frame, not a copy, so the frame and
602 // its buffer must stay valid until transmission completes.
603 struct TxSlot {
604 twai_frame_t frame;
606 std::atomic<bool> in_use;
607 };
608 std::unique_ptr<TxSlot[]> tx_slots_;
609 uint32_t tx_slot_count_{0};
610 SemaphoreHandle_t tx_slot_sem_{nullptr};
611
612 // Error-state counters (written from ISRs)
613 std::atomic<uint32_t> tx_queue_full_{0};
614 std::atomic<uint32_t> bus_off_count_{0};
615 std::atomic<uint8_t> bus_state_{0};
616};
617
618//==============================================//
Abstract base class for CAN bus implementations in the HardFOC system.
void(*)(const hf_can_message_t &message) hf_can_receive_callback_t
CAN message receive callback function type.
Definition BaseCan.h:636
hf_can_err_t
Definition BaseCan.h:117
constexpr hf_u8_t HF_CAN_CLASSIC_MAX_LEN
Largest classic CAN payload in bytes.
Definition BaseCan.h:164
void(*)(const hf_can_message_t &message, void *user_data) hf_esp_can_receive_callback_t
User callback function types with user data support.
Definition EspCan.h:191
void(*)(const hf_esp_can_tx_info_t &tx_info, void *user_data) hf_esp_can_tx_callback_t
Definition EspCan.h:196
void(*)(const hf_esp_can_state_info_t &state_info, void *user_data) hf_esp_can_state_callback_t
Definition EspCan.h:195
hf_esp_can_rx_mode_t
Where EspCan delivers received frames.
Definition EspCan.h:68
@ QUEUE_ALWAYS
Every frame goes into the RX ring; a registered callback is also called.
void(*)(const hf_esp_can_error_info_t &error_info, void *user_data) hf_esp_can_error_callback_t
Definition EspCan.h:193
ESP32 CAN type definitions for hardware abstraction.
hf_can_operation_type_t
CAN operation types for statistics tracking.
Definition EspTypes_CAN.h:50
hf_can_controller_id_t
CAN controller ID for ESP32 family.
Definition EspTypes_CAN.h:33
@ HF_CAN_CONTROLLER_0
Primary CAN controller.
hf_can_mode_t
CAN operating mode mapping from ESP-IDF TWAI modes.
Definition EspTypes_CAN.h:41
@ HF_CAN_MODE_NORMAL
Normal operating mode.
hf_i32_t hf_pin_num_t
Platform-agnostic GPIO pin number type.
Definition HardwareTypes.h:99
Lock-free single-producer / single-consumer ring for ISR-to-task hand-off.
Centralized MCU platform selection and configuration header.
Cross-platform mutex and synchronization primitives with pluggable backend.
Abstract base class defining the unified CAN bus API.
Definition BaseCan.h:731
ESP32 CAN (TWAI) implementation using ESP-IDF v5.5+ node-based API.
Definition EspCan.h:220
hf_esp_can_state_callback_t state_cb_
Definition EspCan.h:580
void ClearErrorCallback() noexcept
Definition EspCan.cpp:429
uint32_t tx_slot_count_
number of slots
Definition EspCan.h:609
hf_can_err_t GetStatistics(hf_can_statistics_t &stats) noexcept override
Get detailed statistics.
Definition EspCan.cpp:578
SemaphoreHandle_t tx_slot_sem_
counts free slots
Definition EspCan.h:610
static bool InternalReceiveCallback(twai_node_handle_t handle, const twai_rx_done_event_data_t *event_data, void *user_ctx) noexcept
Internal receive event callback for ESP-IDF v5.5 event system.
Definition EspCan.cpp:874
hf_can_err_t SetAcceptanceFilter(uint32_t id, uint32_t mask, bool extended=false) noexcept override
Set acceptance filter for incoming messages.
Definition EspCan.cpp:551
hf_can_err_t SetReceiveCallback(hf_can_receive_callback_t callback) noexcept override
Set the BaseCan receive callback.
Definition EspCan.cpp:388
HfSpscRing< hf_can_message_t > rx_ring_
RX frames (producer: RX ISR)
Definition EspCan.h:596
std::atomic< uint8_t > bus_state_
last hf_can_bus_state_t from the ISR
Definition EspCan.h:615
static hf_can_err_t ConvertFromTwaiFrame(const twai_frame_t &twai_frame, hf_can_message_t &hf_message) noexcept
Convert ESP-IDF v5.5 TWAI frame to HF CAN message.
Definition EspCan.cpp:1012
hf_can_err_t Initialize() noexcept override
Initialize the TWAI node and allocate resources.
Definition EspCan.cpp:126
uint32_t SendMessageBatch(const hf_can_message_t *messages, uint32_t count, uint32_t timeout_ms=1000) noexcept
Send multiple messages in a batch for improved performance.
Definition EspCan.cpp:850
std::atomic< uint32_t > bus_off_count_
bus-off events
Definition EspCan.h:614
PlatformMutex rx_mutex_
Serialises ReceiveMessage() callers.
Definition EspCan.h:598
hf_can_statistics_t statistics_
Performance statistics.
Definition EspCan.h:587
hf_can_err_t ConfigureAdvancedTiming(const hf_esp_can_timing_config_t &timing_config) noexcept
Configure advanced bit timing parameters.
Definition EspCan.cpp:652
hf_can_err_t ConfigureAdvancedFilter(const hf_esp_can_filter_config_t &filter_config) noexcept
Configure hardware acceptance filter with advanced options.
Definition EspCan.cpp:711
void ClearTxCompleteCallback() noexcept
Definition EspCan.cpp:458
hf_can_err_t Reset() noexcept override
Reset the CAN controller.
Definition EspCan.cpp:515
hf_can_err_t SendMessage(const hf_can_message_t &message, uint32_t timeout_ms=1000) noexcept override
Queue a CAN message for transmission.
Definition EspCan.cpp:271
hf_esp_can_timing_config_t advanced_timing_
Advanced timing configuration.
Definition EspCan.h:591
static bool InternalErrorCallback(twai_node_handle_t handle, const twai_error_event_data_t *event_data, void *user_ctx) noexcept
Internal error event callback for comprehensive error handling.
Definition EspCan.cpp:932
hf_can_err_t SetStateChangeCallback(hf_esp_can_state_callback_t cb, void *user_data=nullptr) noexcept
Definition EspCan.cpp:435
hf_can_err_t GetBusStatus(hf_can_bus_status_t &status) noexcept override
Error state, TEC/REC, RX overruns, TX-queue-full and bus-off counters.
Definition EspCan.cpp:810
void * error_ud_
Definition EspCan.h:578
hf_can_err_t GetDiagnostics(hf_can_diagnostics_t &diagnostics) noexcept override
Get diagnostic information.
Definition EspCan.cpp:627
PlatformMutex config_mutex_
Configuration mutex.
Definition EspCan.h:564
void * state_ud_
Definition EspCan.h:581
hf_can_err_t InitiateBusRecovery() noexcept
Initiate bus recovery from bus-off state (same as RequestBusRecovery()).
Definition EspCan.cpp:772
hf_can_err_t RequestBusRecovery() noexcept override
Start bus-off recovery; returns without waiting (see BaseCan).
Definition EspCan.cpp:831
void DispatchErrorCallbacks(const hf_esp_can_error_info_t &error_info) noexcept
Dispatch error event to all registered error callbacks.
Definition EspCan.cpp:1164
void ClearReceiveCallback() noexcept override
Clear the BaseCan receive callback.
Definition EspCan.cpp:396
const hf_esp_can_config_t config_
TWAI node configuration.
Definition EspCan.h:557
hf_can_diagnostics_t diagnostics_
Diagnostic information.
Definition EspCan.h:588
static bool InternalTxDoneCallback(twai_node_handle_t handle, const twai_tx_done_event_data_t *event_data, void *user_ctx) noexcept
TX-done event (ISR): returns the frame's TX slot to the pool.
Definition EspCan.cpp:905
hf_can_err_t AllocateQueues() noexcept
Allocate the RX ring, TX slot pool and semaphores.
Definition EspCan.cpp:1123
hf_can_err_t SetTxCompleteCallback(hf_esp_can_tx_callback_t cb, void *user_data=nullptr) noexcept
Definition EspCan.cpp:450
SemaphoreHandle_t rx_sem_
Given by the RX ISR after a push.
Definition EspCan.h:597
twai_node_handle_t twai_node_handle_
Native TWAI node handle.
Definition EspCan.h:569
void ClearStateChangeCallback() noexcept
Definition EspCan.cpp:444
std::atomic< void * > receive_ud_
Definition EspCan.h:574
std::atomic< hf_esp_can_receive_callback_t > receive_cb_
Definition EspCan.h:573
hf_can_err_t ClearAcceptanceFilter() noexcept override
Clear all acceptance filters (accept all messages).
Definition EspCan.cpp:565
std::atomic< bool > is_enabled_
Node enabled state.
Definition EspCan.h:560
void UpdateErrorStatistics(uint32_t error_type) noexcept
Update error statistics from error event.
Definition EspCan.cpp:1184
std::atomic< bool > is_recovering_
Bus recovery state.
Definition EspCan.h:561
void ReleaseQueues() noexcept
Free what AllocateQueues() allocated.
Definition EspCan.cpp:1150
hf_can_err_t ResetStatistics() noexcept override
Reset statistics counters.
Definition EspCan.cpp:601
hf_can_err_t Deinitialize() noexcept override
Deinitialize the TWAI node and free resources.
Definition EspCan.cpp:224
std::unique_ptr< TxSlot[]> tx_slots_
slot pool (tx_queue_depth + 1)
Definition EspCan.h:608
hf_esp_can_tx_callback_t tx_cb_
Definition EspCan.h:583
hf_esp_can_filter_config_t current_filter_
Current filter configuration.
Definition EspCan.h:592
static bool InternalStateChangeCallback(twai_node_handle_t handle, const twai_state_change_event_data_t *event_data, void *user_ctx) noexcept
Internal state change callback for bus recovery monitoring.
Definition EspCan.cpp:948
~EspCan() noexcept override
Destructor - ensures proper cleanup and resource deallocation.
Definition EspCan.cpp:106
void RefreshBusState() noexcept
Read the controller error state into bus_state_ (task context).
Definition EspCan.cpp:1115
void UpdateStatistics(hf_can_operation_type_t operation_type, bool success) noexcept
Update statistics after an operation.
Definition EspCan.cpp:1050
hf_can_err_t SetReceiveCallbackEx(hf_esp_can_receive_callback_t cb, void *user_data=nullptr) noexcept
Definition EspCan.cpp:404
hf_can_err_t GetNodeInfo(twai_node_record_t &node_info) noexcept
Get detailed node information including error states.
Definition EspCan.cpp:835
void * tx_ud_
Definition EspCan.h:584
hf_can_err_t GetStatus(hf_can_status_t &status) noexcept override
Get current CAN bus status.
Definition EspCan.cpp:464
std::atomic< hf_can_receive_callback_t > base_receive_cb_
Definition EspCan.h:575
void DispatchStateChangeCallbacks(const hf_esp_can_state_info_t &state_info) noexcept
Dispatch state change to all registered state callbacks.
Definition EspCan.cpp:1170
bool filter_configured_
Filter configuration state.
Definition EspCan.h:593
hf_esp_can_error_callback_t error_cb_
Definition EspCan.h:577
hf_can_err_t ReceiveMessage(hf_can_message_t &message, uint32_t timeout_ms=0) noexcept override
Take the oldest frame from the RX ring.
Definition EspCan.cpp:362
hf_can_err_t ConvertEspError(esp_err_t esp_err) noexcept
Convert ESP-IDF error to HF error code.
Definition EspCan.cpp:1029
std::atomic< uint32_t > tx_queue_full_
sends refused for lack of a slot
Definition EspCan.h:613
bool DeliverReceivedFromIsr(const hf_can_message_t &message) noexcept
Deliver a received frame to the callbacks and/or the RX ring (ISR context).
Definition EspCan.cpp:1078
static hf_can_err_t ConvertToTwaiFrame(const hf_can_message_t &hf_message, twai_frame_t &twai_frame) noexcept
Convert HF CAN message to ESP-IDF v5.5 TWAI frame.
Definition EspCan.cpp:986
hf_can_err_t SetErrorCallback(hf_esp_can_error_callback_t cb, void *user_data=nullptr) noexcept
Definition EspCan.cpp:421
PlatformMutex stats_mutex_
Statistics mutex.
Definition EspCan.h:565
void ClearReceiveCallbackEx() noexcept
Definition EspCan.cpp:415
PlatformMutex callback_mutex_
Callback registry mutex.
Definition EspCan.h:566
void DispatchTxCompleteCallbacks(const hf_esp_can_tx_info_t &tx_info) noexcept
Dispatch transmission complete to all registered TX callbacks.
Definition EspCan.cpp:1176
Definition HfSpscRing.h:30
Definition EspCan.h:603
uint8_t buffer[HF_CAN_CLASSIC_MAX_LEN]
payload storage for that frame
Definition EspCan.h:605
twai_frame_t frame
frame handed to twai_node_transmit()
Definition EspCan.h:604
std::atomic< bool > in_use
slot owned by a queued frame
Definition EspCan.h:606
Error counters and queue statistics of one controller (BaseCan::GetBusStatus()).
Definition BaseCan.h:587
CAN diagnostics structure for detailed error analysis.
Definition BaseCan.h:694
Platform-agnostic CAN / CAN FD message (BaseCan v2).
Definition BaseCan.h:280
CAN bus statistics structure for performance monitoring.
Definition BaseCan.h:658
CAN bus status information structure.
Definition BaseCan.h:600
ESP32 TWAI node configuration structure for ESP-IDF v5.5.
Definition EspCan.h:80
bool enable_alerts
Enable alert monitoring.
Definition EspCan.h:106
uint32_t baud_rate
Target baud rate in bps.
Definition EspCan.h:86
uint32_t rx_queue_depth
RX ring depth for ReceiveMessage() (rounded up to a power of 2)
Definition EspCan.h:92
bool enable_listen_only
Enable listen-only mode.
Definition EspCan.h:104
bool no_receive_rtr
Filter out remote frames when using filters.
Definition EspCan.h:105
uint32_t sample_point_permill
Sample point in permille (750 = 75%)
Definition EspCan.h:87
hf_can_controller_id_t controller_id
Controller ID (0 for ESP32)
Definition EspCan.h:96
bool enable_self_test
Enable self-test mode (no ACK required)
Definition EspCan.h:102
int8_t fail_retry_cnt
Retry count (-1 = infinite, 0 = single shot)
Definition EspCan.h:98
hf_pin_num_t rx_pin
RX GPIO pin number.
Definition EspCan.h:83
uint8_t intr_priority
Interrupt priority (0-3)
Definition EspCan.h:99
bool enable_loopback
Enable loopback mode.
Definition EspCan.h:103
uint32_t secondary_sample_point
Secondary sample point for enhanced timing.
Definition EspCan.h:88
hf_esp_can_rx_mode_t rx_mode
Callback and/or RX ring delivery (see hf_esp_can_rx_mode_t)
Definition EspCan.h:93
uint32_t tx_queue_depth
Driver TX queue depth (frames waiting for the controller)
Definition EspCan.h:91
uint32_t clk_flags
Clock source flags for specific requirements.
Definition EspCan.h:109
hf_can_mode_t mode
Operating mode.
Definition EspCan.h:97
hf_esp_can_config_t() noexcept
Definition EspCan.h:111
hf_pin_num_t tx_pin
TX GPIO pin number.
Definition EspCan.h:82
Comprehensive error information structure for error callbacks.
Definition EspCan.h:160
bool bus_off_state
Bus-off state.
Definition EspCan.h:164
uint32_t rx_error_count
Receive error counter.
Definition EspCan.h:163
bool error_warning
Error warning state.
Definition EspCan.h:165
uint32_t error_type
ESP-IDF error type.
Definition EspCan.h:161
uint64_t timestamp_us
Error timestamp in microseconds.
Definition EspCan.h:167
bool error_passive
Error passive state.
Definition EspCan.h:166
uint32_t tx_error_count
Transmit error counter.
Definition EspCan.h:162
CAN message filter configuration for hardware filtering.
Definition EspCan.h:139
uint32_t id2
Second filter ID (for dual mode)
Definition EspCan.h:146
uint32_t mask
Filter mask (0 = don't care, 1 = must match)
Definition EspCan.h:141
hf_esp_can_filter_config_t() noexcept
Definition EspCan.h:149
uint32_t id
Filter ID.
Definition EspCan.h:140
uint32_t mask2
Second filter mask (for dual mode)
Definition EspCan.h:147
bool is_extended
true for 29-bit extended ID, false for 11-bit standard
Definition EspCan.h:142
bool is_dual_filter
Enable dual filter mode.
Definition EspCan.h:143
Bus state information for state change callbacks.
Definition EspCan.h:173
uint32_t previous_state
Previous bus state.
Definition EspCan.h:174
uint32_t current_state
Current bus state.
Definition EspCan.h:175
uint64_t timestamp_us
State change timestamp in microseconds.
Definition EspCan.h:176
Advanced bit timing configuration for fine-tuning.
Definition EspCan.h:124
uint32_t ssp_offset
Secondary sample point offset.
Definition EspCan.h:130
uint32_t sjw
Synchronization jump width.
Definition EspCan.h:129
uint32_t brp
Baud rate prescaler.
Definition EspCan.h:125
uint32_t tseg_2
Time segment 2 (after sample point)
Definition EspCan.h:128
uint32_t prop_seg
Propagation segment.
Definition EspCan.h:126
uint32_t tseg_1
Time segment 1 (before sample point)
Definition EspCan.h:127
hf_esp_can_timing_config_t() noexcept
Definition EspCan.h:132
Transmission completion information.
Definition EspCan.h:182
uint64_t timestamp_us
Transmission timestamp in microseconds.
Definition EspCan.h:185
bool success
Transmission success status.
Definition EspCan.h:184
hf_can_message_t message
Message that was transmitted.
Definition EspCan.h:183