From 0893f314edda7b63ff62e5bc5f5bcd12ac438b87 Mon Sep 17 00:00:00 2001 From: Jochen Vothknecht <jochen3120@gmail.com> Date: Sat, 18 Jun 2022 21:19:45 +0200 Subject: [PATCH] Adding a few services --- .../SiliconTorch/Service/CyanStripe.cpp | 42 +++++++++++++++ .../SiliconTorch/Service/CyanStripe.hpp | 35 ++++++++++++- CLC-qthing/SiliconTorch/Service/FxPublish.cpp | 37 +++++++++++++ CLC-qthing/SiliconTorch/Service/FxPublish.hpp | 35 ++++++++++++- CLC-qthing/SiliconTorch/Service/Service.cpp | 8 +-- CLC-qthing/SiliconTorch/Service/Service.hpp | 8 +-- .../SiliconTorch/Service/ServiceManager.cpp | 52 ++++++++++++++++--- .../SiliconTorch/Service/ServiceManager.hpp | 8 ++- .../SiliconTorch/Service/__services__.cpp | 22 ++------ 9 files changed, 213 insertions(+), 34 deletions(-) diff --git a/CLC-qthing/SiliconTorch/Service/CyanStripe.cpp b/CLC-qthing/SiliconTorch/Service/CyanStripe.cpp index faa482e..05077d0 100644 --- a/CLC-qthing/SiliconTorch/Service/CyanStripe.cpp +++ b/CLC-qthing/SiliconTorch/Service/CyanStripe.cpp @@ -1,5 +1,20 @@ #include "CyanStripe.hpp" +// C++ system level +// #include <cstring> // memset, strncmp +// #include <cstdlib> // TODO: is this for memcpy? +// #include <functional> + +// ESP32 specific +#include "esp_log.h" + +// project specific +#include <Types.hpp> +#include "SiliconTorch/NVSExplorer.hpp" + +// qthing stuff +// #include <qthing> + @@ -25,3 +40,30 @@ + + + + +namespace SiliconTorch { + + namespace Service { + + void CyanStripe::init() { + setName("CyanStripe"); + setNameSpace("CyanStripe"); // TODO: "FxCyanF" + } + + void CyanStripe::start() { + ESP_LOGW(getName().c_str(), "Starting service[ %s ] with order[ %d ] *WHOOP* *WHOOP*", getName().c_str(), getStartOrder()); + } + + void CyanStripe::stop() { + ESP_LOGW(getName().c_str(), "Stopping service[ %s ] *sad service noises*", getName().c_str()); + } + + + + } +} + + diff --git a/CLC-qthing/SiliconTorch/Service/CyanStripe.hpp b/CLC-qthing/SiliconTorch/Service/CyanStripe.hpp index 1437ddc..b2969ac 100644 --- a/CLC-qthing/SiliconTorch/Service/CyanStripe.hpp +++ b/CLC-qthing/SiliconTorch/Service/CyanStripe.hpp @@ -1,9 +1,42 @@ #pragma once +// C++ system level +// #include <cstring> // memset, strncmp +// #include <cstdlib> // TODO: is this for memcpy? +// #include <functional> +// ESP32 specific +#include "esp_log.h" -// TODO: implement! +// project specific +#include <Types.hpp> +#include "Service.hpp" +// qthing stuff +// #include <qthing> +namespace SiliconTorch { + namespace Service { + + class CyanStripe : public ServiceManager::Service { + + public: + + + void init(); + + void start(); + void stop(); + + + + + private: + + + }; + + } +} diff --git a/CLC-qthing/SiliconTorch/Service/FxPublish.cpp b/CLC-qthing/SiliconTorch/Service/FxPublish.cpp index dfcf126..1cb1107 100644 --- a/CLC-qthing/SiliconTorch/Service/FxPublish.cpp +++ b/CLC-qthing/SiliconTorch/Service/FxPublish.cpp @@ -1,5 +1,20 @@ #include "FxPublish.hpp" +// C++ system level +// #include <cstring> // memset, strncmp +// #include <cstdlib> // TODO: is this for memcpy? +// #include <functional> + +// ESP32 specific +#include "esp_log.h" + +// project specific +#include <Types.hpp> +#include "SiliconTorch/NVSExplorer.hpp" + +// qthing stuff +// #include <qthing> + @@ -15,3 +30,25 @@ + +namespace SiliconTorch { + + namespace Service { + + void FxPublish::init() { + setName("FxPublish"); + setNameSpace("FxPublish"); + } + + void FxPublish::start() { + ESP_LOGW(getName().c_str(), "Starting service[ %s ] with order[ %d ] *WHOOP* *WHOOP*", getName().c_str(), getStartOrder()); + } + + void FxPublish::stop() { + ESP_LOGW(getName().c_str(), "Stopping service[ %s ] *sad service noises*", getName().c_str()); + } + + + + } +} diff --git a/CLC-qthing/SiliconTorch/Service/FxPublish.hpp b/CLC-qthing/SiliconTorch/Service/FxPublish.hpp index 1437ddc..d89286c 100644 --- a/CLC-qthing/SiliconTorch/Service/FxPublish.hpp +++ b/CLC-qthing/SiliconTorch/Service/FxPublish.hpp @@ -1,9 +1,42 @@ #pragma once +// C++ system level +// #include <cstring> // memset, strncmp +// #include <cstdlib> // TODO: is this for memcpy? +// #include <functional> +// ESP32 specific +#include "esp_log.h" -// TODO: implement! +// project specific +#include <Types.hpp> +#include "Service.hpp" +// qthing stuff +// #include <qthing> +namespace SiliconTorch { + namespace Service { + + class FxPublish : public ServiceManager::Service { + + public: + + + void init(); + + void start(); + void stop(); + + + + + private: + + + }; + + } +} diff --git a/CLC-qthing/SiliconTorch/Service/Service.cpp b/CLC-qthing/SiliconTorch/Service/Service.cpp index 6cc519d..ea39bed 100644 --- a/CLC-qthing/SiliconTorch/Service/Service.cpp +++ b/CLC-qthing/SiliconTorch/Service/Service.cpp @@ -45,7 +45,7 @@ namespace SiliconTorch { nvsState = (NVSState)state; } - bool Service::isEnabled() { + bool Service::isEnabled() const { return nvsState == Enabled; } @@ -99,15 +99,15 @@ namespace SiliconTorch { } - const str& Service::getName() { + const str& Service::getName() const { return name; } - const str& Service::getNameSpace() { + const str& Service::getNameSpace() const { return nameSpace; } - u16 Service::getStartOrder() { + u16 Service::getStartOrder() const { return startOrder; } diff --git a/CLC-qthing/SiliconTorch/Service/Service.hpp b/CLC-qthing/SiliconTorch/Service/Service.hpp index ac67758..668c194 100644 --- a/CLC-qthing/SiliconTorch/Service/Service.hpp +++ b/CLC-qthing/SiliconTorch/Service/Service.hpp @@ -41,18 +41,18 @@ namespace SiliconTorch { virtual void start() = 0; virtual void stop() = 0; - const str& getName(); - const str& getNameSpace(); + const str& getName() const; + const str& getNameSpace() const; // virtual str name() = 0; // virtual str nameSpace() = 0; - u16 getStartOrder(); + u16 getStartOrder() const; // enabled services will be started in this order. higher = later // virtual u16 startOrder(); // defaults to 1337 - bool isEnabled(); + bool isEnabled() const; void setEnabled(bool enabled); protected: diff --git a/CLC-qthing/SiliconTorch/Service/ServiceManager.cpp b/CLC-qthing/SiliconTorch/Service/ServiceManager.cpp index a956ff2..dc47dc3 100644 --- a/CLC-qthing/SiliconTorch/Service/ServiceManager.cpp +++ b/CLC-qthing/SiliconTorch/Service/ServiceManager.cpp @@ -1,6 +1,8 @@ #include "ServiceManager.hpp" // C++ system level +#include <vector> +#include <algorithm> // #include <cstring> // memset, strncmp // #include <cstdlib> // TODO: is this for memcpy? // #include <functional> @@ -31,19 +33,57 @@ namespace SiliconTorch { registerSiliconTorchServices(this); - // TODO: implement! + registrationLocked = true; + } + void ServiceManager::startEnabledServices() { + std::vector<Service*> services; + + for (const auto& [key, value] : serviceMap) + services.push_back(value); + + std::sort(services.begin(), services.end(), [](const Service* x, const Service* y) { + return x->getStartOrder() < y->getStartOrder(); + }); + + for (const auto& service : services) + if (service->isEnabled()) service->start(); + } - void ServiceManager::registerService(Service* s) { - s->init(); - s->postInit(); - services[s->getName()] = s; + void ServiceManager::setServiceEnabled(const str& name, bool enabled) { + if (serviceMap.count(name) > 0) { + serviceMap.at(name)->setEnabled(enabled); + } else { + // Service not found + // TODO: logging…? + } + } + + bool ServiceManager::getServiceEnabled(const str& name) { + if (serviceMap.count(name) > 0) { + return serviceMap.at(name)->isEnabled(); + } else { + // Service not found + // TODO: logging…? + return false; + } + } + + + void ServiceManager::registerService(Service* s) { + if (!registrationLocked) { + s->init(); + s->postInit(); - ESP_LOGI(TAG, "Registered service[ %s ]", s->getName().c_str()); + serviceMap[s->getName()] = s; + ESP_LOGI(TAG, "Registered service[ %s ]", s->getName().c_str()); + } else { + ESP_LOGW(TAG, "Service registration is locked"); + } } diff --git a/CLC-qthing/SiliconTorch/Service/ServiceManager.hpp b/CLC-qthing/SiliconTorch/Service/ServiceManager.hpp index 7407949..54cdeeb 100644 --- a/CLC-qthing/SiliconTorch/Service/ServiceManager.hpp +++ b/CLC-qthing/SiliconTorch/Service/ServiceManager.hpp @@ -32,12 +32,18 @@ namespace SiliconTorch { ServiceManager(); + void startEnabledServices(); + + void setServiceEnabled(const str& name, bool enabled); + bool getServiceEnabled(const str& name); + + void registerService(Service* s); private: bool registrationLocked = false; - ServiceMap services; + ServiceMap serviceMap; }; diff --git a/CLC-qthing/SiliconTorch/Service/__services__.cpp b/CLC-qthing/SiliconTorch/Service/__services__.cpp index 3141a1f..f11bdcf 100644 --- a/CLC-qthing/SiliconTorch/Service/__services__.cpp +++ b/CLC-qthing/SiliconTorch/Service/__services__.cpp @@ -1,23 +1,9 @@ #include "ServiceManager.hpp" -// C++ system level -// #include <cstring> // memset, strncmp -// #include <cstdlib> // TODO: is this for memcpy? -// #include <functional> - -// ESP32 specific -// #include "esp_log.h" - -// project specific +// our services #include "FxCyanF.hpp" -// #include <Types.hpp> -// #include "SiliconTorch/NVSExplorer.hpp" - -// qthing stuff -// #include <qthing> - - -// const char* TAG = "ServiceManager"; +#include "FxPublish.hpp" +#include "CyanStripe.hpp" namespace SiliconTorch { @@ -28,6 +14,8 @@ namespace SiliconTorch { void registerSiliconTorchServices(ServiceManager* mgr) { mgr->registerService(new SiliconTorch::Service::FxCyanF()); + mgr->registerService(new SiliconTorch::Service::FxPublish()); + mgr->registerService(new SiliconTorch::Service::CyanStripe()); } -- GitLab