CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
cdc::core::ServiceRegistry Class Reference

#include <ServiceRegistry.h>

Public Member Functions

bool registerService (const char *name, IService *service)
 Registers a named service instance.
IServicegetService (const char *name)
 Looks up a service by name.
template<typename T>
T * get (const char *name)
template<typename T>
bool provide (ServiceType type, T *service)
template<typename T>
T * request (ServiceType type)
bool isAvailable (ServiceType type) const
 Checks whether typed service exists.
bool initAll ()
 Initializes all registered services in registration order.
bool startAll ()
 Starts all initialized services.
void stopAll ()
 Stops started services in reverse registration order.
size_t count () const

Static Public Member Functions

static ServiceRegistry & instance ()
 Returns singleton service registry instance.

Static Public Attributes

static constexpr size_t MAX_SERVICES = 24

Detailed Description

Service Locator / Dependency Injection container

Manages service registration/discovery and provides typed access. Uses static allocation - no heap.

Two usage patterns:

  1. Named services: registerService("display", &display) / get<IDisplay>("display")
  2. Typed services: provide<IKeyboardProvider>(ServiceType::KEYBOARD, &kb) / request<IKeyboardProvider>(ServiceType::KEYBOARD)

Definition at line 29 of file ServiceRegistry.h.

Member Function Documentation

◆ count()

size_t cdc::core::ServiceRegistry::count ( ) const
inline

Get number of registered services

Definition at line 119 of file ServiceRegistry.h.

◆ get()

template<typename T>
T * cdc::core::ServiceRegistry::get ( const char * name)
inline

Get service by name (typed) Usage: auto* display = registry.get<IDisplay>("display");

Definition at line 61 of file ServiceRegistry.h.

References getService(), and name.

◆ getService()

IService * cdc::core::ServiceRegistry::getService ( const char * name)

Looks up a service by name.

Get service by name (untyped)

Returns
nullptr if not found
Parameters
nameService name key.
Returns
Matching service pointer or nullptr.

Definition at line 71 of file ServiceRegistry.cpp.

References name.

Referenced by get().

◆ initAll()

bool cdc::core::ServiceRegistry::initAll ( )

Initializes all registered services in registration order.

Initialize all registered services

Returns
true if all succeeded
true if all services initialized successfully.

Definition at line 135 of file ServiceRegistry.cpp.

References LOG_E, LOG_I, name, and TAG.

◆ instance()

ServiceRegistry & cdc::core::ServiceRegistry::instance ( )
static

Returns singleton service registry instance.

Get singleton instance

Returns
Reference to global ServiceRegistry.

Definition at line 28 of file ServiceRegistry.cpp.

References instance().

Referenced by cdc::core::getKeyboard(), cdc::mod_2fa::TwoFaModule::init(), initAttestationService(), initMessageTransfer(), initTropicStorage(), and instance().

◆ isAvailable()

bool cdc::core::ServiceRegistry::isAvailable ( ServiceType type) const

Checks whether typed service exists.

Check if a typed service is available

Parameters
typeTyped service slot.
Returns
true if available.

Definition at line 127 of file ServiceRegistry.cpp.

◆ provide()

template<typename T>
bool cdc::core::ServiceRegistry::provide ( ServiceType type,
T * service )
inline

Provide a typed service ("I offer service X")

Parameters
typeThe service type to register
servicePointer to service implementation
Returns
true on success

Definition at line 76 of file ServiceRegistry.h.

Referenced by cdc::mod_2fa::TwoFaModule::init().

◆ registerService()

bool cdc::core::ServiceRegistry::registerService ( const char * name,
IService * service )

Registers a named service instance.

Register a service by name

Parameters
nameUnique service name (e.g., "display", "keypad")
servicePointer to service instance (must outlive registry)
Returns
true on success, false if full or duplicate name
Parameters
nameService name key.
serviceService implementation pointer.
Returns
true if registration succeeded.

Definition at line 39 of file ServiceRegistry.cpp.

References LOG_E, LOG_I, MAX_SERVICES, name, and TAG.

Referenced by initAttestationService(), initMessageTransfer(), and initTropicStorage().

◆ request()

template<typename T>
T * cdc::core::ServiceRegistry::request ( ServiceType type)
inline

Request a typed service ("I need service X")

Parameters
typeThe service type to request
Returns
Pointer to service or nullptr if not available

Definition at line 86 of file ServiceRegistry.h.

Referenced by cdc::core::getKeyboard().

◆ startAll()

bool cdc::core::ServiceRegistry::startAll ( )

Starts all initialized services.

Start all registered services

Returns
true if all succeeded
true if all services started successfully.

Definition at line 155 of file ServiceRegistry.cpp.

References cdc::core::INITIALIZED, LOG_E, LOG_I, name, cdc::core::STOPPED, and TAG.

◆ stopAll()

void cdc::core::ServiceRegistry::stopAll ( )

Stops started services in reverse registration order.

Stop all registered services (reverse order)

Returns
void

Definition at line 177 of file ServiceRegistry.cpp.

References LOG_I, cdc::core::STARTED, and TAG.

Member Data Documentation

◆ MAX_SERVICES

size_t cdc::core::ServiceRegistry::MAX_SERVICES = 24
staticconstexpr

Definition at line 31 of file ServiceRegistry.h.

Referenced by initCoreServices(), and registerService().


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