5static const char*
TAG =
"ServiceRegistry";
20 default:
return "unknown";
40 if (!
name || !service) {
51 for (
size_t i = 0; i < count_; i++) {
52 if (strcmp(services_[i].
name,
name) == 0) {
58 services_[count_].name =
name;
59 services_[count_].service = service;
72 if (!
name)
return nullptr;
74 for (
size_t i = 0; i < count_; i++) {
75 if (strcmp(services_[i].
name,
name) == 0) {
76 return services_[i].service;
93bool ServiceRegistry::registerTypedService(
ServiceType type,
void* service) {
94 size_t idx =
static_cast<size_t>(type);
95 if (idx >= MAX_TYPED_SERVICES) {
96 LOG_E(
TAG,
"Invalid service type %d",
static_cast<int>(type));
100 if (typedServices_[idx] !=
nullptr) {
104 typedServices_[idx] = service;
114void* ServiceRegistry::getTypedService(
ServiceType type)
const {
115 size_t idx =
static_cast<size_t>(type);
116 if (idx >= MAX_TYPED_SERVICES) {
119 return typedServices_[idx];
128 return getTypedService(type) !=
nullptr;
136 LOG_I(
TAG,
"Initializing %u services...", count_);
138 for (
size_t i = 0; i < count_; i++) {
139 LOG_I(
TAG,
" [%u/%u] %s", i + 1, count_, services_[i].
name);
141 if (!services_[i].service->init()) {
142 LOG_E(
TAG,
"Failed to initialize '%s'", services_[i].
name);
147 LOG_I(
TAG,
"All services initialized");
156 LOG_I(
TAG,
"Starting %u services...", count_);
158 for (
size_t i = 0; i < count_; i++) {
162 if (!services_[i].service->start()) {
178 LOG_I(
TAG,
"Stopping %u services...", count_);
181 for (
size_t i = count_; i > 0; i--) {
183 services_[i - 1].service->stop();
char name[cdc::hal::ISecureElement::RMEM_NAME_LEN]
CDC Log: logging over TinyUSB CDC and UART.
#define LOG_W(tag, fmt,...)
#define LOG_I(tag, fmt,...)
#define LOG_E(tag, fmt,...)
bool startAll()
Starts all initialized services.
void stopAll()
Stops started services in reverse registration order.
static ServiceRegistry & instance()
Returns singleton service registry instance.
bool registerService(const char *name, IService *service)
Registers a named service instance.
bool isAvailable(ServiceType type) const
Checks whether typed service exists.
IService * getService(const char *name)
Looks up a service by name.
bool initAll()
Initializes all registered services in registration order.
static constexpr size_t MAX_SERVICES
static const char * serviceTypeName(ServiceType type)
Converts a service type enum to a log-friendly string.