Embedded Artistry Framework
Embedded Systems C++ Framework
Public Member Functions | Static Public Member Functions | Protected Attributes | Private Types | Private Attributes | List of all members
BlinkyDemoPlatform< THWPlatform, TDriverRegistry > Class Template Reference

This Platform serves as a base class that the specific framework demo applications Can derive from. More...

#include <blinky_platform.hpp>

Inheritance diagram for BlinkyDemoPlatform< THWPlatform, TDriverRegistry >:
Inheritance graph

Public Member Functions

void init_ () noexcept
 
void initProcessor_ () noexcept
 
void initHWPlatform_ () noexcept
 
void startBlink () noexcept
 
 BlinkyDemoPlatform () noexcept
 Default constructor supplies a default name for the simulator platform. More...
 
 BlinkyDemoPlatform (const std::string_view &name) noexcept
 Child classes can override the simulator platform name using the std::string_view constructor. More...
 
 ~BlinkyDemoPlatform ()=default
 
void init () noexcept
 Initialize the platform. More...
 
void initProcessor () noexcept
 Initialize the processor. More...
 
void initHWPlatform () noexcept
 Initialize the hardware platform. More...
 
constexpr const std::string_view & name () const noexcept
 Access the platform's name. More...
 
constexpr const char * name_cstr () const noexcept
 Access the platform name as a cstring for C API compatibility. More...
 
auto findDriver (const std::string_view &name) noexcept
 Access a device driver in the registry by name. More...
 
auto findDriver (embvm::DriverType_t type) noexcept
 Access a device driver in the registry by type. More...
 
auto findDriver () noexcept
 Access a device driver in the registry by type, cast as the appropriate base class. More...
 
auto findDriver (const std::string_view &name) noexcept
 Access a device driver in the registry by name, cast as the appropriate base class. More...
 
auto findAllDrivers (embvm::DriverType_t type) noexcept
 Get a list of all device drivers in the registry by type. More...
 
auto findAllDrivers () noexcept
 Get a list of all device drivers in the registry by type, cast as the appropriate base class. More...
 
size_t driverCount () const noexcept
 Get the count of drivers registered with the platform. More...
 

Static Public Member Functions

static void earlyInitHook_ () noexcept
 
static void initOS_ () noexcept
 
static BlinkyDemoPlatform< THWPlatform, TDriverRegistry > & inst () noexcept
 Get the global platform instance. More...
 
static void earlyInitHook () noexcept
 Call early-initialization code. More...
 
static void initOS () noexcept
 Initialize the OS. More...
 
static void initOS (void(*main_thread)()) noexcept
 Initialize the with a function to use as the main thread. More...
 
static void registerDriver (const std::string_view &name, embvm::DriverBase *driver) noexcept
 Platform-level API for registering a new device driver. More...
 
static void unregisterDriver (const std::string_view &name, embvm::DriverBase *driver) noexcept
 Platform-level API for unregistering a new device driver. More...
 

Protected Attributes

const std::string_view name_
 

Private Types

using VirtualPlatform = embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry >, TDriverRegistry >
 

Private Attributes

THWPlatform hw_platform_
 

Detailed Description

template<class THWPlatform, class TDriverRegistry>
class BlinkyDemoPlatform< THWPlatform, TDriverRegistry >

This Platform serves as a base class that the specific framework demo applications Can derive from.

This class takes a hardware platform as a template. Clients should implement specific instances of this platform as follows:

Member Typedef Documentation

◆ VirtualPlatform

template<class THWPlatform , class TDriverRegistry >
using BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::VirtualPlatform = embvm::VirtualPlatformBase<BlinkyDemoPlatform<THWPlatform, TDriverRegistry>, TDriverRegistry>
private

Constructor & Destructor Documentation

◆ BlinkyDemoPlatform() [1/2]

template<class THWPlatform , class TDriverRegistry >
BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::BlinkyDemoPlatform ( )
inlinenoexcept

Default constructor supplies a default name for the simulator platform.

◆ BlinkyDemoPlatform() [2/2]

template<class THWPlatform , class TDriverRegistry >
BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::BlinkyDemoPlatform ( const std::string_view &  name)
inlineexplicitnoexcept

Child classes can override the simulator platform name using the std::string_view constructor.

◆ ~BlinkyDemoPlatform()

template<class THWPlatform , class TDriverRegistry >
BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::~BlinkyDemoPlatform ( )
default

Member Function Documentation

◆ driverCount()

size_t embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::driverCount ( ) const
inlinenoexceptinherited

Get the count of drivers registered with the platform.

returns Number of drivers currently registered with the platform DriverRegistry.

◆ earlyInitHook()

static void embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::earlyInitHook ( )
inlinestaticnoexceptinherited

Call early-initialization code.

Call early initialization code, which is to be run before C runtime initialization, memory relocations, OS initialization, etc. This call is used to handle early setup code that the rest of the initialization process might depend on, such as DRAM initialization.

This function forwards the call to the derived class for the actual implementation.

◆ earlyInitHook_()

template<class THWPlatform , class TDriverRegistry >
static void BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::earlyInitHook_ ( )
inlinestaticnoexcept

◆ findAllDrivers() [1/2]

auto embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::findAllDrivers ( embvm::DriverType_t  type)
inlinenoexceptinherited

Get a list of all device drivers in the registry by type.

The type will be returned as the appropriate base class (instead of embvm::DriverBase).

This call forwards the information to the DriverRegistry instance.

Parameters
typeThe type of driver being requested (embvm::i2c::master, SystemClock).
Returns
A list of embvm::DriverBase instances. If no matching types are found, an empty list will be returned. The caller must cast to the appropriate type.

◆ findAllDrivers() [2/2]

auto embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::findAllDrivers ( )
inlinenoexceptinherited

Get a list of all device drivers in the registry by type, cast as the appropriate base class.

The type will be returned as the appropriate base class (instead of embvm::DriverBase).

This call forwards the information to the DriverRegistry instance.

Template Parameters
TDriverClassThe class of driver being requested (embvm::i2c::master, SystemClock).
Returns
A list of driver instances cast as TDriverClass types. If no matching types are found, an empty list will be returned.

◆ findDriver() [1/4]

auto embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::findDriver ( const std::string_view &  name)
inlinenoexceptinherited

Access a device driver in the registry by name.

Find a driver by name.

This call forwards the information to the DriverRegistry instance.

Returns
An optional_ref to the embvm::DriverBase instance. If no instance is found, the optional reference will be invalid. The caller must cast to the appropriate type.

◆ findDriver() [2/4]

auto embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::findDriver ( embvm::DriverType_t  type)
inlinenoexceptinherited

Access a device driver in the registry by type.

Find a driver by type. If multiple drivers are found for a type, the first one found will be returned.

This call forwards the information to the DriverRegistry instance.

Returns
An optional_ref to the embvm::DriverBase instance. If no instance is found, the optional reference will be invalid. The caller must cast to the appropriate type.

◆ findDriver() [3/4]

auto embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::findDriver ( )
inlinenoexceptinherited

Access a device driver in the registry by type, cast as the appropriate base class.

If multiple drivers are found for a type, the first one found will be returned. The type will be returned as the appropriate base class (instead of embvm::DriverBase).

This call forwards the information to the DriverRegistry instance.

Template Parameters
TDriverClassThe class of driver being requested (embvm::i2c::master, SystemClock).
Returns
an type_safe::optional_ref cast to the TDriverClass type. If the driver was not found, the optional_ref will be empty.

◆ findDriver() [4/4]

auto embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::findDriver ( const std::string_view &  name)
inlinenoexceptinherited

Access a device driver in the registry by name, cast as the appropriate base class.

The type will be returned as the appropriate base class (instead of embvm::DriverBase).

This call forwards the information to the DriverRegistry instance.

Template Parameters
TDriverClassThe class of driver being requested (embvm::i2c::master, SystemClock).
Returns
an type_safe::optional_ref cast to the TDriverClass type. If the driver was not found, the optional_ref will be empty.

◆ init()

void embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::init ( )
inlinenoexceptinherited

Initialize the platform.

This function is responsible for initializing the platform.

This function forwards the call to the derived class for the actual implementation.

◆ init_()

template<class THWPlatform , class TDriverRegistry >
void BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::init_ ( )
inlinenoexcept

◆ initHWPlatform()

void embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::initHWPlatform ( )
inlinenoexceptinherited

Initialize the hardware platform.

Performs steps necessary to initialize the hardware platform for use by the platform. In many cases, this call should just invoke the hardware platform's init() function. Control of this function is placed in the platform layer to allow for platform-specific customization & initialization of the hardware platform in situations where non-default values are used.

This function forwards the call to the derived class for the actual implementation.

◆ initHWPlatform_()

template<class THWPlatform , class TDriverRegistry >
void BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::initHWPlatform_ ( )
inlinenoexcept

◆ initOS() [1/2]

static void embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::initOS ( )
inlinestaticnoexceptinherited

Initialize the OS.

Performs steps necessary to initialize the OS for use by the platform. Control of this function is placed in the platform layer to allow for platform-specific customization & initialization of the OS, since each OS has different startup requirements

This function forwards the call to the derived class for the actual implementation.

◆ initOS() [2/2]

static void embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::initOS ( void(*)()  main_thread)
inlinestaticnoexceptinherited

Initialize the with a function to use as the main thread.

Performs steps necessary to initialize the OS for use by the platform. Control of this function is placed in the platform layer to allow for platform-specific customization & initialization of the OS, since each OS has different startup requirements

This function forwards the call to the derived class for the actual implementation.

Parameters
main_threada function pointer to use as the main thread routine. This version of initOS should be used for OSes such as FreeRTOS which kill execution of the current thread when the scheduler is started.

◆ initOS_()

template<class THWPlatform , class TDriverRegistry >
static void BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::initOS_ ( )
inlinestaticnoexcept

◆ initProcessor()

void embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::initProcessor ( )
inlinenoexceptinherited

Initialize the processor.

Performs steps necessary to initialize the processor for use by the platform. In many cases, this call should just invoke the processor's init() function. Control of this function is placed in the platform layer to allow for platform-specific customization & initialization of the processor in situations where non-default values are used.

This function forwards the call to the derived class for the actual implementation.

◆ initProcessor_()

template<class THWPlatform , class TDriverRegistry >
void BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::initProcessor_ ( )
inlinenoexcept

◆ inst()

static BlinkyDemoPlatform< THWPlatform, TDriverRegistry > & embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::inst ( )
inlinestaticnoexceptinherited

Get the global platform instance.

Static declaration of the VirtualPlatformBase instance. We use this function to avoid the static initializatio order 'fiasco'. See more: https://isocpp.org/wiki/faq/ctors#static-init-order

◆ name()

constexpr const std::string_view& embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::name ( ) const
inlinenoexceptinherited

Access the platform's name.

Returns
Platform name std::string_view reference.

◆ name_cstr()

constexpr const char* embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::name_cstr ( ) const
inlinenoexceptinherited

Access the platform name as a cstring for C API compatibility.

Returns
Platform name as a C-string.

◆ registerDriver()

static void embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::registerDriver ( const std::string_view &  name,
embvm::DriverBase driver 
)
inlinestaticnoexceptinherited

Platform-level API for registering a new device driver.

Register a device driver with the platform's driver registry.

This call forwards the information to the DriverRegistry instance.

Parameters
nameThe name (used as a key) the driver will be registered under.
driverPointer to the embvm::DriverBase object. A pointer is used because there are any number of potential derived classes which will be tracked. To prevent slicing, a pointer to the base class is stored.

◆ startBlink()

template<class THWPlatform , class TDriverRegistry >
void BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::startBlink ( )
inlinenoexcept

◆ unregisterDriver()

static void embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::unregisterDriver ( const std::string_view &  name,
embvm::DriverBase driver 
)
inlinestaticnoexceptinherited

Platform-level API for unregistering a new device driver.

Unregister a device driver with the platform's driver registry.

This call forwards the information to the DriverRegistry instance.

Parameters
nameThe name of the driver to remove.
driverPointer to the embvm::DriverBase object being removed.

Member Data Documentation

◆ hw_platform_

template<class THWPlatform , class TDriverRegistry >
THWPlatform BlinkyDemoPlatform< THWPlatform, TDriverRegistry >::hw_platform_
private

◆ name_

const std::string_view embvm::VirtualPlatformBase< BlinkyDemoPlatform< THWPlatform, TDriverRegistry > , TDriverRegistry >::name_
protectedinherited

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