Embedded Artistry Framework
Embedded Systems C++ Framework
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
embvm::i2c::activeMaster< TQueueSize, TLock, TCond > Class Template Referencefinal

#include <active_i2c.hpp>

Inheritance diagram for embvm::i2c::activeMaster< TQueueSize, TLock, TCond >:
Inheritance graph

Public Types

using cb_t = stdext::inplace_function< void(i2c::op_t, i2c::status)>
 Represents the type of the callback operation. More...
 
using sweep_list_t = etl::vector< uint8_t, 128 >
 
using sweep_cb_t = stdext::inplace_function< void(void)>
 

Public Member Functions

 activeMaster (embvm::i2c::master &m) noexcept
 
 ~activeMaster ()=default
 
void process_ (ao_storage pair) noexcept
 
virtual void configure (i2c::baud baud, i2c::pullups pull=i2c::pullups::external) noexcept
 Configure the I2C bus. More...
 
i2c::state state () const noexcept
 Check the I2C bus status. More...
 
i2c::pullups pullups (i2c::pullups pullups) noexcept
 Configure pull-ups. More...
 
i2c::pullups pullups () const noexcept
 Check the pull-up configuration. More...
 
void sweep (sweep_list_t &found_list, const sweep_cb_t &cb) noexcept
 Perform an I2C bus sweep to identify active devices. More...
 
void start () noexcept
 Start the driver. More...
 
void stop () noexcept
 Stop the driver. More...
 
void restart () noexcept
 Restart the driver. More...
 
type_safe::boolean started () const noexcept
 Check if the driver has been started. More...
 
constexpr embvm::DriverType_t DriverType () const noexcept
 Returns the registered type ID of the driver. More...
 
constexpr const std::string_view & name () const noexcept
 Provides a string_view reference of the driver name. More...
 
constexpr const char * name_cstr () const noexcept
 Provides a c-string version of the driver name. More...
 
virtual DriverBaseoperator++ () noexcept
 Increment operator is a no-op, but is used for iterator compatibility. More...
 
size_t queuedCount () const noexcept
 Get the number of operations in the queue. More...
 
bool enqueue (embvm::i2c::ao_storage t) noexcept
 Add an operation to the queue. More...
 
void shutdown () noexcept
 Shutdown the active object. More...
 

Static Public Member Functions

static constexpr embvm::DriverType type () noexcept
 I2C Driver Type ID. More...
 

Protected Attributes

i2c::pullups pullups_ = i2c::pullups::external
 Tracks the active pull-up configuration. More...
 
i2c::state state_ = i2c::state::idle
 Tracks the status of the I2C bus. More...
 
type_safe::boolean started_ = false
 Tracks the driver state. More...
 
const std::string_view name_
 Name of the driver instance. More...
 
const embvm::DriverType_t type_
 Type ID of the driver instance. More...
 

Private Types

using ao_base = embutil::activeObject< activeMaster, ao_storage, TQueueSize, TLock, TCond >
 

Private Member Functions

void start_ () noexcept final
 Derived classes override the start_ method to control driver-specific startup behavior. More...
 
void stop_ () noexcept final
 Derived classes override the start_ method to control driver-specific startup behavior. More...
 
void configure_ (embvm::i2c::pullups pullup) noexcept final
 Configure the I2C bus for operation. More...
 
embvm::i2c::status transfer_ (const embvm::i2c::op_t &op, const embvm::i2c::master::cb_t &cb) noexcept final
 
embvm::i2c::baud baudrate_ (embvm::i2c::baud baud) noexcept final
 
embvm::i2c::pullups setPullups_ (embvm::i2c::pullups pullups) noexcept final
 Configure pull-ups. More...
 

Private Attributes

embvm::i2c::masterm_
 

Member Typedef Documentation

◆ ao_base

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
using embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::ao_base = embutil::activeObject<activeMaster, ao_storage, TQueueSize, TLock, TCond>
private

◆ cb_t

using embvm::i2c::master::cb_t = stdext::inplace_function<void(i2c::op_t, i2c::status)>
inherited

Represents the type of the callback operation.

◆ sweep_cb_t

using embvm::i2c::master::sweep_cb_t = stdext::inplace_function<void(void)>
inherited

◆ sweep_list_t

using embvm::i2c::master::sweep_list_t = etl::vector<uint8_t, 128>
inherited

Constructor & Destructor Documentation

◆ activeMaster()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::activeMaster ( embvm::i2c::master m)
inlineexplicitnoexcept

◆ ~activeMaster()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::~activeMaster ( )
default

Member Function Documentation

◆ baudrate_()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
embvm::i2c::baud embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::baudrate_ ( embvm::i2c::baud  baud)
inlinefinalprivatevirtualnoexcept

Implements embvm::i2c::master.

◆ configure()

virtual void embvm::i2c::master::configure ( i2c::baud  baud,
i2c::pullups  pull = i2c::pullups::external 
)
inlinevirtualnoexceptinherited

Configure the I2C bus.

Configures the I2C bus for operation and sets the target baud rate and pull-ups.

Derived classes must implement the configure_() function to set up the target hardware.

Parameters
baudThe target baudrate (as an i2c::baud enumeration rather than integral Hz). TODO: Tolerance - allowed relative tolerance for the resulting baudrate
pullThe pullup setting, which defaults to external pull-ups (in hardware).

References embvm::i2c::master::configure_(), and embvm::i2c::master::pullups().

Referenced by embvm::i2c::activeMaster< 128 >::configure_(), and FWDemoSimulatorHWPlatform::init_().

◆ configure_()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
void embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::configure_ ( embvm::i2c::pullups  pullups)
inlinefinalprivatevirtualnoexcept

Configure the I2C bus for operation.

This function is implemented by the derived class. It is responsible for configuring the target hardware for operation.

Parameters
pullupsThe target pull-up configuration.

Implements embvm::i2c::master.

◆ DriverType()

constexpr embvm::DriverType_t embvm::DriverBase::DriverType ( ) const
inlinenoexceptinherited

Returns the registered type ID of the driver.

When using DriverBase interfaces, clients can retrieve the registered driver type in order to up-cast to the correct interface.

The type is returned as a embvm::DriverType_t rather than a embvm::DriverType enum to work with custom user-defined types. Enforcing a embvm::DriverType return value would prevent clients from defining and using their own custom types.

Returns
the registered driver type as a embvm::DriverType_t value

References embvm::DriverBase::type_.

◆ enqueue()

bool embutil::activeObject< embvm::i2c::activeMaster< TQueueSize, TLock, TCond > , embvm::i2c::ao_storage , TQueueSize, TLock, TCond >::enqueue ( embvm::i2c::ao_storage  t)
inlinenoexceptinherited

Add an operation to the queue.

This function can be called directly, or by functions internal to the activeObject. For example, the "transfer" API enqueues transfer operations.

This function is marked noexcept because we want the program to terminate if an exception results from this call. For example, the underlying queue may throw on push.

Parameters
tThe operation data object to enqueue for later processing.

◆ name()

constexpr const std::string_view& embvm::DriverBase::name ( ) const
inlinenoexceptinherited

Provides a string_view reference of the driver name.

Returns
std::string_view ref containing the driver name.

References embvm::DriverBase::name_.

◆ name_cstr()

constexpr const char* embvm::DriverBase::name_cstr ( ) const
inlinenoexceptinherited

Provides a c-string version of the driver name.

Returns
c-string containing the driver name

References embvm::DriverBase::name_.

◆ operator++()

virtual DriverBase& embvm::DriverBase::operator++ ( )
inlinevirtualnoexceptinherited

Increment operator is a no-op, but is used for iterator compatibility.

◆ process_()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
void embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::process_ ( ao_storage  pair)
inlinenoexcept

◆ pullups() [1/2]

i2c::pullups embvm::i2c::master::pullups ( i2c::pullups  pullups)
inlinenoexceptinherited

Configure pull-ups.

Parameters
pullupsThe target pull-up setting.
Returns
The configured pull-up setting.

References embvm::i2c::master::pullups_, and embvm::i2c::master::setPullups_().

Referenced by embvm::i2c::activeMaster< 128 >::setPullups_().

◆ pullups() [2/2]

i2c::pullups embvm::i2c::master::pullups ( ) const
inlinenoexceptinherited

◆ queuedCount()

size_t embutil::activeObject< embvm::i2c::activeMaster< TQueueSize, TLock, TCond > , embvm::i2c::ao_storage , TQueueSize, TLock, TCond >::queuedCount ( ) const
inlinenoexceptinherited

Get the number of operations in the queue.

Returns
the number of queued operations.

◆ restart()

void embvm::DriverBase::restart ( )
inlinenoexceptinherited

Restart the driver.

Calls stop() and then start() on the driver. If the driver is not started, then it will be started after the start() function is invoked.

References embvm::DriverBase::start(), and embvm::DriverBase::stop().

◆ setPullups_()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
embvm::i2c::pullups embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::setPullups_ ( embvm::i2c::pullups  pullups)
inlinefinalprivatevirtualnoexcept

Configure pull-ups.

This function is implemented by the derived class. It is responsible for configuring the target hardware to use the requested pullup setting.

Parameters
pullupsThe target pull-up setting.
Returns
The configured pull-up setting.

Implements embvm::i2c::master.

◆ shutdown()

void embutil::activeObject< embvm::i2c::activeMaster< TQueueSize, TLock, TCond > , embvm::i2c::ao_storage , TQueueSize, TLock, TCond >::shutdown ( )
inlinenoexceptinherited

Shutdown the active object.

Call this function in the parent class destructor to stop the AO thread operation before destroying the parent class. This will prevent memory access problems due to race conidtions during destruction.

This function is marked noexcept because we want the program to terminate if an exception results from this call.

The shutdown process is permanent and cannot be reversed without recreating the object.

◆ start()

void embvm::DriverBase::start ( )
inlinenoexceptinherited

◆ start_()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
void embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::start_ ( )
inlinefinalprivatevirtualnoexcept

Derived classes override the start_ method to control driver-specific startup behavior.

(Template Method Pattern)

Implements embvm::i2c::master.

◆ started()

type_safe::boolean embvm::DriverBase::started ( ) const
inlinenoexceptinherited

Check if the driver has been started.

Returns
true if the driver is running (started), false if not running (stopped).

References embvm::DriverBase::started_.

Referenced by embdrv::aardvarkSPIMaster::configure_(), embdrv::aardvarkGPIOInput< 4 >::get(), embdrv::aardvarkGPIOOutput< 5 >::set(), embdrv::vl53l1x::start_(), embdrv::aardvarkAdapter::start_(), and embdrv::aardvarkAdapter::stop_().

◆ state()

i2c::state embvm::i2c::master::state ( ) const
inlinenoexceptinherited

Check the I2C bus status.

Returns
the status of the I2C bus as an i2c::state enumeration.

References embvm::i2c::master::state_.

◆ stop()

void embvm::DriverBase::stop ( )
inlinenoexceptinherited

◆ stop_()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
void embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::stop_ ( )
inlinefinalprivatevirtualnoexcept

Derived classes override the start_ method to control driver-specific startup behavior.

(Template Method Pattern)

Implements embvm::i2c::master.

◆ sweep()

void embvm::i2c::master::sweep ( sweep_list_t found_list,
const sweep_cb_t cb 
)
noexceptinherited

Perform an I2C bus sweep to identify active devices.

The sweep function pings all I2C addresses. Devices which ACK are stored in a list and returned via callback.

Parameters
[in,out]found_listCaller's memory which will contain the successfully found ping addresses
[in]cbThe callback which will be called to indicate that the sweep is complete. After the cb is called, found_list is valid and can be used by the caller.

References embvm::i2c::op_t::address, embvm::i2c::busy, I2C_ADDR_MAX, and embvm::i2c::op_t::op.

◆ transfer_()

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
embvm::i2c::status embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::transfer_ ( const embvm::i2c::op_t op,
const embvm::i2c::master::cb_t cb 
)
inlinefinalprivatevirtualnoexcept

Implements embvm::i2c::master.

◆ type()

static constexpr embvm::DriverType embvm::i2c::master::type ( )
inlinestaticnoexceptinherited

I2C Driver Type ID.

Returns
I2C type ID.

References embvm::I2C.

Member Data Documentation

◆ m_

template<size_t TQueueSize = 0, typename TLock = std::mutex, typename TCond = std::condition_variable>
embvm::i2c::master& embvm::i2c::activeMaster< TQueueSize, TLock, TCond >::m_
private

◆ name_

const std::string_view embvm::DriverBase::name_
protectedinherited

Name of the driver instance.

Referenced by embvm::DriverBase::name(), and embvm::DriverBase::name_cstr().

◆ pullups_

i2c::pullups embvm::i2c::master::pullups_ = i2c::pullups::external
protectedinherited

Tracks the active pull-up configuration.

Referenced by embvm::i2c::master::pullups().

◆ started_

type_safe::boolean embvm::DriverBase::started_ = false
protectedinherited

Tracks the driver state.

True if the driver has been started, false if it has been stopped or not yet started.

Referenced by embvm::DriverBase::start(), embvm::DriverBase::started(), and embvm::DriverBase::stop().

◆ state_

i2c::state embvm::i2c::master::state_ = i2c::state::idle
protectedinherited

Tracks the status of the I2C bus.

Referenced by embvm::i2c::master::state().

◆ type_

const embvm::DriverType_t embvm::DriverBase::type_
protectedinherited

Type ID of the driver instance.

Referenced by embvm::DriverBase::DriverType().


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