From 37d04daddd36bec85356da4816c5c73fe52921f7 Mon Sep 17 00:00:00 2001
From: Jochen Vothknecht <jochen3120@gmail.com>
Date: Fri, 17 Jun 2022 09:24:09 +0200
Subject: [PATCH] =?UTF-8?q?ST:=20Moar=20ServiceManager=20work=E2=80=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CLC-qthing/CMakeLists.txt                     |  2 +-
 CLC-qthing/SiliconTorch/Service/Service.cpp   | 13 ++++--
 CLC-qthing/SiliconTorch/Service/Service.hpp   |  4 +-
 .../SiliconTorch/Service/ServiceManager.cpp   | 36 +++++++++++++++
 .../SiliconTorch/Service/ServiceManager.hpp   | 46 +++++++++++++++++++
 .../SiliconTorch/Service/__services__.cpp     | 36 +++++++++++++++
 .../SiliconTorch/Service/__services__.hpp     | 30 ++++++++++++
 7 files changed, 159 insertions(+), 8 deletions(-)
 create mode 100644 CLC-qthing/SiliconTorch/Service/ServiceManager.cpp
 create mode 100644 CLC-qthing/SiliconTorch/Service/ServiceManager.hpp
 create mode 100644 CLC-qthing/SiliconTorch/Service/__services__.cpp
 create mode 100644 CLC-qthing/SiliconTorch/Service/__services__.hpp

diff --git a/CLC-qthing/CMakeLists.txt b/CLC-qthing/CMakeLists.txt
index 8449b2a..b0216f5 100644
--- a/CLC-qthing/CMakeLists.txt
+++ b/CLC-qthing/CMakeLists.txt
@@ -1,6 +1,6 @@
 idf_component_register(
   SRC_DIRS
-  "." "SiliconTorch" "SpiderLib"
+  "." "SiliconTorch" "SiliconTorch/Service" "SpiderLib"
 
   INCLUDE_DIRS
   "." "SpiderLib"
diff --git a/CLC-qthing/SiliconTorch/Service/Service.cpp b/CLC-qthing/SiliconTorch/Service/Service.cpp
index 1a6b213..6cc519d 100644
--- a/CLC-qthing/SiliconTorch/Service/Service.cpp
+++ b/CLC-qthing/SiliconTorch/Service/Service.cpp
@@ -35,6 +35,9 @@ namespace SiliconTorch {
     }
 
     void Service::postInit() {
+
+      attrsLocked = true;
+
       u8 state = 0;  // disabled -> 0   enabled -> 1
       state = NVSExplorer::NVSExplorer::instance().getUnsignedInt(getNameSpace(), NVSStateKey, state);
 
@@ -72,8 +75,7 @@ namespace SiliconTorch {
 
 
     void Service::setName(const str& name) {
-      if (!nameSet) {
-        nameSet = true;
+      if (!attrsLocked) {
         this->name = name;
       } else {
         // TODO: report error somehow?
@@ -81,8 +83,7 @@ namespace SiliconTorch {
     }
 
     void Service::setNameSpace(const str& nameSpace) {
-      if (!nameSpaceSet) {
-        nameSpaceSet = true;
+      if (!attrsLocked) {
         this->nameSpace = nameSpace;
       } else {
         // TODO: report error somehow?
@@ -90,7 +91,11 @@ namespace SiliconTorch {
     }
 
     void Service::setStartOrder(u16 startOrder) {
+      if (!attrsLocked) {
       this->startOrder = startOrder;
+      } else {
+        // TODO: report error somehow?
+      }
     }
 
 
diff --git a/CLC-qthing/SiliconTorch/Service/Service.hpp b/CLC-qthing/SiliconTorch/Service/Service.hpp
index 6639677..ac67758 100644
--- a/CLC-qthing/SiliconTorch/Service/Service.hpp
+++ b/CLC-qthing/SiliconTorch/Service/Service.hpp
@@ -65,10 +65,8 @@ namespace SiliconTorch {
 
         NVSState nvsState = Disabled;
 
-        bool nameSet = false;
+        bool attrsLocked = false;
         str name = "";
-
-        bool nameSpaceSet = false;
         str nameSpace = "";
 
         u16 startOrder = 1337;
diff --git a/CLC-qthing/SiliconTorch/Service/ServiceManager.cpp b/CLC-qthing/SiliconTorch/Service/ServiceManager.cpp
new file mode 100644
index 0000000..f039414
--- /dev/null
+++ b/CLC-qthing/SiliconTorch/Service/ServiceManager.cpp
@@ -0,0 +1,36 @@
+#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
+#include <Types.hpp>
+// #include "SiliconTorch/NVSExplorer.hpp"
+
+// qthing stuff
+// #include <qthing>
+
+
+const char* TAG = "ServiceManager";
+
+
+namespace SiliconTorch {
+
+  namespace ServiceManager {
+
+
+    ServiceManager::ServiceManager() {
+
+      // TODO: implement!
+
+    }
+
+
+
+  }
+}
diff --git a/CLC-qthing/SiliconTorch/Service/ServiceManager.hpp b/CLC-qthing/SiliconTorch/Service/ServiceManager.hpp
new file mode 100644
index 0000000..1675e76
--- /dev/null
+++ b/CLC-qthing/SiliconTorch/Service/ServiceManager.hpp
@@ -0,0 +1,46 @@
+#pragma once
+
+// C++ system level
+#include <map>
+// #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 "Service.hpp"
+
+// qthing stuff
+// #include <qthing>
+
+
+namespace SiliconTorch {
+
+  namespace ServiceManager {
+
+    extern const str NVSStateKey;
+
+
+    using ServiceMap = std::map<str, Service>;
+
+
+    class ServiceManager {
+      public:
+
+        ServiceManager();
+
+        void registerService(Service s);
+
+      private:
+
+        bool registrationLocked = false;
+        ServiceMap services;
+
+    };
+
+
+  }
+}
diff --git a/CLC-qthing/SiliconTorch/Service/__services__.cpp b/CLC-qthing/SiliconTorch/Service/__services__.cpp
new file mode 100644
index 0000000..b1ffc11
--- /dev/null
+++ b/CLC-qthing/SiliconTorch/Service/__services__.cpp
@@ -0,0 +1,36 @@
+#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
+#include <Types.hpp>
+// #include "SiliconTorch/NVSExplorer.hpp"
+
+// qthing stuff
+// #include <qthing>
+
+
+const char* TAG = "ServiceManager";
+
+
+namespace SiliconTorch {
+
+  namespace ServiceManager {
+
+
+    void registerSiliconTorchServices(ServiceManager& mgr) {
+
+      // TODO: implement!
+
+
+    }
+
+
+  }
+}
diff --git a/CLC-qthing/SiliconTorch/Service/__services__.hpp b/CLC-qthing/SiliconTorch/Service/__services__.hpp
new file mode 100644
index 0000000..85ff54b
--- /dev/null
+++ b/CLC-qthing/SiliconTorch/Service/__services__.hpp
@@ -0,0 +1,30 @@
+#pragma once
+
+// 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 "Service.hpp"
+
+// qthing stuff
+// #include <qthing>
+
+
+namespace SiliconTorch {
+
+  namespace ServiceManager {
+
+    extern const str NVSStateKey;
+
+
+
+
+
+  }
+}
-- 
GitLab