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

Abstract base class defining the unified CAN bus API. More...

#include <BaseCan.h>

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

Public Member Functions

virtual ~BaseCan () noexcept=default
 Virtual destructor ensures proper cleanup in derived classes.
 
 BaseCan (const BaseCan &)=delete
 
BaseCanoperator= (const BaseCan &)=delete
 
 BaseCan (BaseCan &&)=delete
 
BaseCanoperator= (BaseCan &&)=delete
 
bool EnsureInitialized () noexcept
 Ensures that the CAN bus is initialized (lazy initialization).
 
bool EnsureDeinitialized () noexcept
 Ensures that the CAN bus is deinitialized.
 
bool IsInitialized () const noexcept
 Checks if the class is initialized.
 
virtual hf_can_err_t Initialize () noexcept=0
 Initialize the CAN controller (must be implemented by derived classes).
 
virtual hf_can_err_t Deinitialize () noexcept=0
 Deinitialize the CAN controller (must be implemented by derived classes).
 
virtual hf_can_err_t SendMessage (const hf_can_message_t &message, hf_u32_t timeout_ms=1000) noexcept=0
 Send a CAN message.
 
virtual hf_can_err_t ReceiveMessage (hf_can_message_t &message, hf_u32_t timeout_ms=0) noexcept=0
 Receive a CAN message.
 
virtual hf_can_err_t SetReceiveCallback (hf_can_receive_callback_t callback) noexcept=0
 Set callback for received messages.
 
virtual hf_can_err_t SetAcceptanceFilter (hf_u32_t id, hf_u32_t mask, bool extended=false) noexcept=0
 Set acceptance filter for incoming messages.
 
virtual hf_can_err_t GetStatus (hf_can_status_t &status) noexcept=0
 Get current CAN bus status.
 
virtual hf_can_err_t Reset () noexcept=0
 Reset the CAN controller.
 
virtual void ClearReceiveCallback () noexcept
 Clear the receive callback.
 
virtual hf_can_err_t ClearAcceptanceFilter () noexcept
 Clear all acceptance filters (accept all messages).
 
virtual hf_can_err_t SetReceiveCallbackFD (hf_can_fd_receive_callback_t callback) noexcept
 Set CAN-FD receive callback with enhanced information.
 
virtual bool SupportsCanFD () const noexcept
 Check if CAN-FD is supported by this controller.
 
virtual bool SetCanFDMode (bool enable, hf_u32_t data_baudrate=2000000, hf_u32_t timeout_ms=1000) noexcept
 Enable or disable CAN-FD mode.
 
virtual bool ConfigureCanFDTiming (hf_u16_t nominal_prescaler, hf_u8_t nominal_tseg1, hf_u8_t nominal_tseg2, hf_u16_t data_prescaler, hf_u8_t data_tseg1, hf_u8_t data_tseg2, hf_u8_t sjw=1) noexcept
 Configure CAN-FD timing parameters.
 
virtual bool SetTransmitterDelayCompensation (hf_u8_t tdc_offset, hf_u8_t tdc_filter) noexcept
 Set transmitter delay compensation (CAN-FD feature).
 
virtual hf_u32_t SendMessageBatch (const hf_can_message_t *messages, hf_u32_t count, hf_u32_t timeout_ms=1000) noexcept
 Send multiple messages in a batch.
 
virtual hf_u32_t ReceiveMessageBatch (hf_can_message_t *messages, hf_u32_t max_count, hf_u32_t timeout_ms=100) noexcept
 Receive multiple messages in a batch.
 
virtual hf_can_err_t ResetStatistics () noexcept
 Reset CAN operation statistics.
 
virtual hf_can_err_t ResetDiagnostics () noexcept
 Reset CAN diagnostic information.
 
virtual hf_can_err_t GetStatistics (hf_can_statistics_t &statistics) noexcept
 Get CAN operation statistics.
 
virtual hf_can_err_t GetDiagnostics (hf_can_diagnostics_t &diagnostics) noexcept
 Get CAN diagnostic information.
 

Protected Member Functions

 BaseCan () noexcept
 Protected constructor.
 

Protected Attributes

bool initialized_
 Initialization status.
 
hf_can_statistics_t statistics_
 CAN operation statistics.
 
hf_can_diagnostics_t diagnostics_
 CAN diagnostic information.
 

Detailed Description

Abstract base class defining the unified CAN bus API.

This abstract class defines the interface that all CAN controller implementations must provide. It ensures a consistent API across different platforms and CAN controller types, making the system extensible and maintainable.

Concrete implementation examples:

  • Microcontrollers with integrated CAN peripherals
  • External CAN controllers via SPI (e.g. MCP2515)

Features:

  • Lazy initialization support (initialize on first use)
  • Comprehensive error handling with detailed error codes
  • Thread-safe operations (implementation dependent)
  • Consistent API across different CAN hardware
Note
This is a header-only abstract base class - instantiate concrete implementations instead.

Constructor & Destructor Documentation

◆ ~BaseCan()

virtual BaseCan::~BaseCan ( )
virtualdefaultnoexcept

Virtual destructor ensures proper cleanup in derived classes.

◆ BaseCan() [1/3]

BaseCan::BaseCan ( const BaseCan & )
delete

◆ BaseCan() [2/3]

BaseCan::BaseCan ( BaseCan && )
delete

◆ BaseCan() [3/3]

BaseCan::BaseCan ( )
inlineprotectednoexcept

Protected constructor.

Member Function Documentation

◆ ClearAcceptanceFilter()

virtual hf_can_err_t BaseCan::ClearAcceptanceFilter ( )
inlinevirtualnoexcept

Clear all acceptance filters (accept all messages).

Returns
hf_can_err_t error code
Note
Default implementation sets filter to accept all (ID=0, Mask=0)

Reimplemented in EspCan.

◆ ClearReceiveCallback()

virtual void BaseCan::ClearReceiveCallback ( )
inlinevirtualnoexcept

Clear the receive callback.

Note
Default implementation does nothing

Reimplemented in EspCan.

◆ ConfigureCanFDTiming()

virtual bool BaseCan::ConfigureCanFDTiming ( hf_u16_t nominal_prescaler,
hf_u8_t nominal_tseg1,
hf_u8_t nominal_tseg2,
hf_u16_t data_prescaler,
hf_u8_t data_tseg1,
hf_u8_t data_tseg2,
hf_u8_t sjw = 1 )
inlinevirtualnoexcept

Configure CAN-FD timing parameters.

Parameters
nominal_prescalerNominal phase prescaler
nominal_tseg1Nominal phase TSEG1
nominal_tseg2Nominal phase TSEG2
data_prescalerData phase prescaler
data_tseg1Data phase TSEG1
data_tseg2Data phase TSEG2
sjwSynchronization jump width
Returns
true if successful, false otherwise
Note
Default implementation returns false (not supported)

◆ Deinitialize()

virtual hf_can_err_t BaseCan::Deinitialize ( )
pure virtualnoexcept

Deinitialize the CAN controller (must be implemented by derived classes).

Returns
hf_can_err_t error code

Implemented in EspCan, and StmCan.

◆ EnsureDeinitialized()

bool BaseCan::EnsureDeinitialized ( )
inlinenoexcept

Ensures that the CAN bus is deinitialized.

Returns
true if the CAN bus is deinitialized, false otherwise.

◆ EnsureInitialized()

bool BaseCan::EnsureInitialized ( )
inlinenoexcept

Ensures that the CAN bus is initialized (lazy initialization).

Returns
true if the CAN bus is initialized, false otherwise.

◆ GetDiagnostics()

virtual hf_can_err_t BaseCan::GetDiagnostics ( hf_can_diagnostics_t & diagnostics)
inlinevirtualnoexcept

Get CAN diagnostic information.

Parameters
diagnosticsReference to diagnostics structure to fill
Returns
hf_can_err_t::CAN_SUCCESS if successful, error code otherwise
Note
Override this method to provide platform-specific diagnostics

Reimplemented in EspCan.

◆ GetStatistics()

virtual hf_can_err_t BaseCan::GetStatistics ( hf_can_statistics_t & statistics)
inlinevirtualnoexcept

Get CAN operation statistics.

Parameters
statisticsReference to statistics structure to fill
Returns
hf_can_err_t::CAN_SUCCESS if successful, error code otherwise
Note
Override this method to provide platform-specific statistics

Reimplemented in EspCan.

◆ GetStatus()

virtual hf_can_err_t BaseCan::GetStatus ( hf_can_status_t & status)
pure virtualnoexcept

Get current CAN bus status.

Parameters
statusReference to store status information
Returns
hf_can_err_t error code

Implemented in EspCan, and StmCan.

◆ Initialize()

virtual hf_can_err_t BaseCan::Initialize ( )
pure virtualnoexcept

Initialize the CAN controller (must be implemented by derived classes).

Returns
hf_can_err_t error code

Implemented in EspCan, and StmCan.

◆ IsInitialized()

bool BaseCan::IsInitialized ( ) const
inlinenoexcept

Checks if the class is initialized.

Returns
true if initialized, false otherwise

◆ operator=() [1/2]

BaseCan & BaseCan::operator= ( BaseCan && )
delete

◆ operator=() [2/2]

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

◆ ReceiveMessage()

virtual hf_can_err_t BaseCan::ReceiveMessage ( hf_can_message_t & message,
hf_u32_t timeout_ms = 0 )
pure virtualnoexcept

Receive a CAN message.

Parameters
messageReference to store received message
timeout_msTimeout in milliseconds (0 = non-blocking)
Returns
hf_can_err_t error code

Implemented in StmCan, and EspCan.

◆ ReceiveMessageBatch()

virtual hf_u32_t BaseCan::ReceiveMessageBatch ( hf_can_message_t * messages,
hf_u32_t max_count,
hf_u32_t timeout_ms = 100 )
inlinevirtualnoexcept

Receive multiple messages in a batch.

Parameters
messagesArray to store received messages
max_countMaximum number of messages to receive
timeout_msTimeout in milliseconds
Returns
Number of messages actually received
Note
Default implementation receives messages one by one

◆ Reset()

virtual hf_can_err_t BaseCan::Reset ( )
pure virtualnoexcept

Reset the CAN controller.

Returns
hf_can_err_t error code

Implemented in EspCan, and StmCan.

◆ ResetDiagnostics()

virtual hf_can_err_t BaseCan::ResetDiagnostics ( )
inlinevirtualnoexcept

Reset CAN diagnostic information.

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

◆ ResetStatistics()

virtual hf_can_err_t BaseCan::ResetStatistics ( )
inlinevirtualnoexcept

Reset CAN operation statistics.

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

Reimplemented in EspCan.

◆ SendMessage()

virtual hf_can_err_t BaseCan::SendMessage ( const hf_can_message_t & message,
hf_u32_t timeout_ms = 1000 )
pure virtualnoexcept

Send a CAN message.

Parameters
messageCAN message to send
timeout_msTimeout in milliseconds (0 = non-blocking)
Returns
hf_can_err_t error code

Implemented in StmCan, and EspCan.

◆ SendMessageBatch()

virtual hf_u32_t BaseCan::SendMessageBatch ( const hf_can_message_t * messages,
hf_u32_t count,
hf_u32_t timeout_ms = 1000 )
inlinevirtualnoexcept

Send multiple messages in a batch.

Parameters
messagesArray of messages to send
countNumber of messages to send
timeout_msTimeout in milliseconds
Returns
Number of messages successfully sent
Note
Default implementation sends messages sequentially

Reimplemented in EspCan.

◆ SetAcceptanceFilter()

virtual hf_can_err_t BaseCan::SetAcceptanceFilter ( hf_u32_t id,
hf_u32_t mask,
bool extended = false )
pure virtualnoexcept

Set acceptance filter for incoming messages.

Parameters
idCAN ID to accept
maskAcceptance mask (0 = don't care bits)
extendedtrue for extended frames, false for standard
Returns
hf_can_err_t error code

Implemented in StmCan, and EspCan.

◆ SetCanFDMode()

virtual bool BaseCan::SetCanFDMode ( bool enable,
hf_u32_t data_baudrate = 2000000,
hf_u32_t timeout_ms = 1000 )
inlinevirtualnoexcept

Enable or disable CAN-FD mode.

Parameters
enabletrue to enable CAN-FD, false to disable
data_baudrateData phase baudrate for CAN-FD (default: 2Mbps)
timeout_msTimeout for mode change operation in milliseconds (default: 1000ms)
Returns
true if successful, false otherwise
Note
Default implementation returns false (not supported)

◆ SetReceiveCallback()

virtual hf_can_err_t BaseCan::SetReceiveCallback ( hf_can_receive_callback_t callback)
pure virtualnoexcept

Set callback for received messages.

Parameters
callbackCallback function to handle received messages
Returns
hf_can_err_t error code

Implemented in EspCan, and StmCan.

◆ SetReceiveCallbackFD()

virtual hf_can_err_t BaseCan::SetReceiveCallbackFD ( hf_can_fd_receive_callback_t callback)
inlinevirtualnoexcept

Set CAN-FD receive callback with enhanced information.

Parameters
callbackCAN-FD callback function
Returns
hf_can_err_t error code
Note
Default implementation returns CAN_ERR_UNSUPPORTED_OPERATION

◆ SetTransmitterDelayCompensation()

virtual bool BaseCan::SetTransmitterDelayCompensation ( hf_u8_t tdc_offset,
hf_u8_t tdc_filter )
inlinevirtualnoexcept

Set transmitter delay compensation (CAN-FD feature).

Parameters
tdc_offsetTDC offset value
tdc_filterTDC filter value
Returns
true if successful, false otherwise
Note
Default implementation returns false (not supported)

◆ SupportsCanFD()

virtual bool BaseCan::SupportsCanFD ( ) const
inlinevirtualnoexcept

Check if CAN-FD is supported by this controller.

Returns
true if CAN-FD is supported, false otherwise
Note
Default implementation returns false

Reimplemented in StmCan.

Member Data Documentation

◆ diagnostics_

hf_can_diagnostics_t BaseCan::diagnostics_
protected

CAN diagnostic information.

◆ initialized_

bool BaseCan::initialized_
protected

Initialization status.

◆ statistics_

hf_can_statistics_t BaseCan::statistics_
protected

CAN operation statistics.


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