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

Abstract base class for I2C device implementations. More...

#include <BaseI2c.h>

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

Public Member Functions

virtual ~BaseI2c () noexcept=default
 Virtual destructor ensures proper cleanup in derived classes.
 
 BaseI2c (const BaseI2c &)=delete
 
BaseI2coperator= (const BaseI2c &)=delete
 
 BaseI2c (BaseI2c &&)=delete
 
BaseI2coperator= (BaseI2c &&)=delete
 
bool EnsureInitialized () noexcept
 Ensures that the I2C bus is initialized (lazy initialization).
 
bool EnsureDeinitialized () noexcept
 Ensures that the I2C bus is deinitialized (lazy deinitialization).
 
bool IsInitialized () const noexcept
 Checks if the bus is initialized.
 
virtual bool Initialize () noexcept=0
 Initialize the I2C bus.
 
virtual bool Deinitialize () noexcept=0
 Deinitialize the I2C bus.
 
virtual hf_i2c_err_t Write (const hf_u8_t *data, hf_u16_t length, hf_u32_t timeout_ms=0) noexcept=0
 Write data to the I2C device.
 
virtual hf_i2c_err_t Read (hf_u8_t *data, hf_u16_t length, hf_u32_t timeout_ms=0) noexcept=0
 Read data from the I2C device.
 
virtual hf_i2c_err_t WriteRead (const hf_u8_t *tx_data, hf_u16_t tx_length, hf_u8_t *rx_data, hf_u16_t rx_length, hf_u32_t timeout_ms=0) noexcept=0
 Write then read data from the I2C device.
 
virtual hf_u16_t GetDeviceAddress () const noexcept=0
 Get the device address for this I2C device.
 
virtual bool Open () noexcept
 Open the I2C bus (alias for Initialize).
 
virtual bool Close () noexcept
 Close the I2C bus (alias for Deinitialize).
 
virtual bool IsDevicePresent () noexcept
 Check if this device is present on the bus.
 
virtual bool ProbeDevice () noexcept
 Probe if this device is present on the bus (alias for IsDevicePresent).
 
virtual bool WriteByte (hf_u8_t data) noexcept
 Write a single byte to the I2C device.
 
virtual bool ReadByte (hf_u8_t &data) noexcept
 Read a single byte from the I2C device.
 
virtual bool WriteRegister (hf_u8_t reg_addr, hf_u8_t data) noexcept
 Write to a register on the I2C device.
 
virtual bool ReadRegister (hf_u8_t reg_addr, hf_u8_t &data) noexcept
 Read from a register on the I2C device.
 
virtual bool ReadRegisters (hf_u8_t reg_addr, hf_u8_t *data, hf_u16_t length) noexcept
 Read multiple registers from the I2C device.
 
virtual hf_i2c_err_t ResetStatistics () noexcept
 Reset I2C operation statistics.
 
virtual hf_i2c_err_t ResetDiagnostics () noexcept
 Reset I2C diagnostic information.
 
virtual hf_i2c_err_t GetStatistics (hf_i2c_statistics_t &statistics) const noexcept
 Get I2C operation statistics.
 
virtual hf_i2c_err_t GetDiagnostics (hf_i2c_diagnostics_t &diagnostics) const noexcept
 Get I2C diagnostic information.
 

Protected Member Functions

 BaseI2c () noexcept
 Protected default constructor. Initializes base I2C state with default values.
 

Protected Attributes

bool initialized_
 Initialization status.
 
hf_i2c_statistics_t statistics_
 I2C operation statistics.
 
hf_i2c_diagnostics_t diagnostics_
 I2C diagnostic information.
 

Detailed Description

Abstract base class for I2C device implementations.

This class provides a comprehensive I2C device abstraction that serves as the base for all I2C device implementations in the HardFOC system. Each instance represents a single I2C device with a pre-configured address. It supports:

  • Master mode I2C communication
  • Standard (100kHz) and Fast (400kHz) modes
  • Read, write, and write-then-read operations
  • Configurable timeouts and error handling
  • Device presence detection
  • Register-based communication utilities
  • Lazy initialization pattern

Device address is configured during device creation and is not passed as a parameter to read/write operations, ensuring type safety and preventing accidental communication with wrong devices.

Derived classes implement platform-specific details such as:

  • On-chip I2C controllers with device handles
  • I2C bridge or adapter hardware
  • Device-specific configurations
Note
This is a header-only abstract base class - instantiate concrete implementations instead.
This class is not inherently thread-safe. Use appropriate synchronization if accessed from multiple contexts.
Each BaseI2c instance represents a specific I2C device, not the I2C bus itself.

Constructor & Destructor Documentation

◆ ~BaseI2c()

virtual BaseI2c::~BaseI2c ( )
virtualdefaultnoexcept

Virtual destructor ensures proper cleanup in derived classes.

◆ BaseI2c() [1/3]

BaseI2c::BaseI2c ( const BaseI2c & )
delete

◆ BaseI2c() [2/3]

BaseI2c::BaseI2c ( BaseI2c && )
delete

◆ BaseI2c() [3/3]

BaseI2c::BaseI2c ( )
inlineexplicitprotectednoexcept

Protected default constructor. Initializes base I2C state with default values.

Member Function Documentation

◆ Close()

virtual bool BaseI2c::Close ( )
inlinevirtualnoexcept

Close the I2C bus (alias for Deinitialize).

Returns
true if successful, false otherwise

◆ Deinitialize()

virtual bool BaseI2c::Deinitialize ( )
pure virtualnoexcept

Deinitialize the I2C bus.

Returns
true if successful, false otherwise

Implemented in EspI2cDevice, and StmI2cDevice.

◆ EnsureDeinitialized()

bool BaseI2c::EnsureDeinitialized ( )
inlinenoexcept

Ensures that the I2C bus is deinitialized (lazy deinitialization).

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

◆ EnsureInitialized()

bool BaseI2c::EnsureInitialized ( )
inlinenoexcept

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

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

◆ GetDeviceAddress()

virtual hf_u16_t BaseI2c::GetDeviceAddress ( ) const
pure virtualnoexcept

Get the device address for this I2C device.

Returns
The 7-bit I2C device address

Implemented in EspI2cDevice, and StmI2cDevice.

◆ GetDiagnostics()

virtual hf_i2c_err_t BaseI2c::GetDiagnostics ( hf_i2c_diagnostics_t & diagnostics) const
inlinevirtualnoexcept

Get I2C diagnostic information.

Parameters
diagnosticsReference to store diagnostics data
Returns
hf_i2c_err_t::I2C_SUCCESS if successful, I2C_ERR_NOT_SUPPORTED if not implemented

Reimplemented in EspI2cDevice.

◆ GetStatistics()

virtual hf_i2c_err_t BaseI2c::GetStatistics ( hf_i2c_statistics_t & statistics) const
inlinevirtualnoexcept

Get I2C operation statistics.

Parameters
statisticsReference to store statistics data
Returns
hf_i2c_err_t::I2C_SUCCESS if successful, I2C_ERR_NOT_SUPPORTED if not implemented

Reimplemented in EspI2cDevice.

◆ Initialize()

virtual bool BaseI2c::Initialize ( )
pure virtualnoexcept

Initialize the I2C bus.

Returns
true if successful, false otherwise

Implemented in EspI2cDevice, and StmI2cDevice.

◆ IsDevicePresent()

virtual bool BaseI2c::IsDevicePresent ( )
inlinevirtualnoexcept

Check if this device is present on the bus.

Returns
true if device responds, false otherwise

◆ IsInitialized()

bool BaseI2c::IsInitialized ( ) const
inlinenoexcept

Checks if the bus is initialized.

Returns
true if initialized, false otherwise

◆ Open()

virtual bool BaseI2c::Open ( )
inlinevirtualnoexcept

Open the I2C bus (alias for Initialize).

Returns
true if successful, false otherwise

◆ operator=() [1/2]

BaseI2c & BaseI2c::operator= ( BaseI2c && )
delete

◆ operator=() [2/2]

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

◆ ProbeDevice()

virtual bool BaseI2c::ProbeDevice ( )
inlinevirtualnoexcept

Probe if this device is present on the bus (alias for IsDevicePresent).

Returns
true if device responds, false otherwise

Reimplemented in EspI2cDevice.

◆ Read()

virtual hf_i2c_err_t BaseI2c::Read ( hf_u8_t * data,
hf_u16_t length,
hf_u32_t timeout_ms = 0 )
pure virtualnoexcept

Read data from the I2C device.

Parameters
dataPointer to buffer to store received data
lengthNumber of bytes to read
timeout_msTimeout in milliseconds (0 = use default)
Returns
hf_i2c_err_t result code
Note
Device address is configured during device creation

Implemented in EspI2cDevice, and StmI2cDevice.

◆ ReadByte()

virtual bool BaseI2c::ReadByte ( hf_u8_t & data)
inlinevirtualnoexcept

Read a single byte from the I2C device.

Parameters
dataReference to store the read byte
Returns
true if successful, false otherwise

◆ ReadRegister()

virtual bool BaseI2c::ReadRegister ( hf_u8_t reg_addr,
hf_u8_t & data )
inlinevirtualnoexcept

Read from a register on the I2C device.

Parameters
reg_addrRegister address
dataReference to store the read data
Returns
true if successful, false otherwise

◆ ReadRegisters()

virtual bool BaseI2c::ReadRegisters ( hf_u8_t reg_addr,
hf_u8_t * data,
hf_u16_t length )
inlinevirtualnoexcept

Read multiple registers from the I2C device.

Parameters
reg_addrStarting register address
dataPointer to buffer to store read data
lengthNumber of registers to read
Returns
true if successful, false otherwise

◆ ResetDiagnostics()

virtual hf_i2c_err_t BaseI2c::ResetDiagnostics ( )
inlinevirtualnoexcept

Reset I2C diagnostic information.

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

◆ ResetStatistics()

virtual hf_i2c_err_t BaseI2c::ResetStatistics ( )
inlinevirtualnoexcept

Reset I2C operation statistics.

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

Reimplemented in EspI2cDevice.

◆ Write()

virtual hf_i2c_err_t BaseI2c::Write ( const hf_u8_t * data,
hf_u16_t length,
hf_u32_t timeout_ms = 0 )
pure virtualnoexcept

Write data to the I2C device.

Parameters
dataPointer to data buffer to write
lengthNumber of bytes to write
timeout_msTimeout in milliseconds (0 = use default)
Returns
hf_i2c_err_t result code
Note
Device address is configured during device creation

Implemented in EspI2cDevice, and StmI2cDevice.

◆ WriteByte()

virtual bool BaseI2c::WriteByte ( hf_u8_t data)
inlinevirtualnoexcept

Write a single byte to the I2C device.

Parameters
dataByte to write
Returns
true if successful, false otherwise

◆ WriteRead()

virtual hf_i2c_err_t BaseI2c::WriteRead ( const hf_u8_t * tx_data,
hf_u16_t tx_length,
hf_u8_t * rx_data,
hf_u16_t rx_length,
hf_u32_t timeout_ms = 0 )
pure virtualnoexcept

Write then read data from the I2C device.

Parameters
tx_dataPointer to data buffer to write
tx_lengthNumber of bytes to write
rx_dataPointer to buffer to store received data
rx_lengthNumber of bytes to read
timeout_msTimeout in milliseconds (0 = use default)
Returns
hf_i2c_err_t result code
Note
Device address is configured during device creation

Implemented in EspI2cDevice, and StmI2cDevice.

◆ WriteRegister()

virtual bool BaseI2c::WriteRegister ( hf_u8_t reg_addr,
hf_u8_t data )
inlinevirtualnoexcept

Write to a register on the I2C device.

Parameters
reg_addrRegister address
dataData to write to register
Returns
true if successful, false otherwise

Member Data Documentation

◆ diagnostics_

hf_i2c_diagnostics_t BaseI2c::diagnostics_
protected

I2C diagnostic information.

◆ initialized_

bool BaseI2c::initialized_
protected

Initialization status.

◆ statistics_

hf_i2c_statistics_t BaseI2c::statistics_
protected

I2C operation statistics.


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