supla-device
Loading...
Searching...
No Matches
manager.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SUPLET_MANAGER_H_
5#define SRC_SUPLA_SUPLET_MANAGER_H_
6
7#include <stdint.h>
8#include <supla/device/channel_conflict_resolver.h>
9#include <supla-common/proto.h>
10#include <supla/suplet/definition.h>
11#include <supla/suplet/registry.h>
12#include <supla/suplet/storage.h>
13
15
16namespace Supla {
17
18class Config;
19class Element;
20
21namespace Suplet {
22
23class CapabilityRegistry;
24struct DefinitionCalcfgSession;
25struct InstanceCalcfgSession;
26class ServerConfigHandler;
27enum class ServerConfigResult : uint8_t;
28
30 public:
31 explicit Manager(Supla::Config *config);
32 ~Manager();
33
34 bool load();
35 bool loadInstance(uint8_t instanceId, InstanceRecord *record);
36 bool save();
37 bool erase();
38
39 InstanceTable *getInstanceTable();
40 const InstanceTable *getInstanceTable() const;
41
42 void setRegistry(Registry *registry);
43 Registry *getRegistry();
44 const Registry *getRegistry() const;
45 void setCapabilityRegistry(CapabilityRegistry *registry);
46 CapabilityRegistry *getCapabilityRegistry();
47 const CapabilityRegistry *getCapabilityRegistry() const;
48 void setServerConfigHandler(ServerConfigHandler *handler);
49 ServerConfigHandler *getServerConfigHandler();
50 const ServerConfigHandler *getServerConfigHandler() const;
51 bool isServerConfigReady() const;
52
53 bool addInstance(const InstanceRecord &record);
54 bool addInstanceFromDefinition(InstanceRecord record,
55 const Definition &definition);
56 bool canUpsertInstanceFromDefinition(InstanceRecord record,
57 const Definition &definition) const;
58 bool upsertInstanceFromDefinition(InstanceRecord record,
59 const Definition &definition);
60 bool createElementsFromRegistry(const Registry &registry,
61 Supla::Element **created,
62 uint16_t createdSize,
63 uint16_t *createdCount = nullptr);
64 bool loadRuntimeElements();
65 bool loadRuntimeElementsFromRegistry(const Registry &registry);
66 void deleteRuntimeElements();
67 bool initRuntimeElements(SuplaDeviceClass *device);
68 uint16_t getRuntimeElementCount() const;
69 ServerConfigResult applyCommandJson(const char *commandJson);
70 ServerConfigResult validateCommandJson(const char *commandJson) const;
71 int handleCalcfg(TSD_DeviceCalCfgRequest *request,
73 InstanceCalcfgSession *getInstanceCalcfgSession();
74 const InstanceCalcfgSession *getInstanceCalcfgSession() const;
75 InstanceCalcfgSession *beginInstanceCalcfgSession();
76 void clearInstanceCalcfgSession();
77 DefinitionCalcfgSession *getDefinitionCalcfgSession();
78 const DefinitionCalcfgSession *getDefinitionCalcfgSession() const;
79 DefinitionCalcfgSession *beginDefinitionCalcfgSession();
80 void clearDefinitionCalcfgSession();
81 void cleanupExpiredCalcfgSessions(uint32_t nowMs);
82 bool removeInstance(uint8_t instanceId);
83 uint8_t getFirstFreeSubDeviceId() const;
84
85 bool onChannelConflictReport(uint8_t *channelReport,
86 uint8_t channelReportSize,
87 bool hasConfilictInvalidType,
88 bool hasConfilictChannelMissingOnServer,
89 bool hasConflictChannelMissingOnDevice) override;
90
91 private:
92 bool isChannelMissingOnServer(uint8_t *channelReport,
93 uint8_t channelReportSize,
94 int channelNumber) const;
95 bool getRequiredRuntimeElementCount(const Registry &registry,
96 uint16_t *count) const;
97
99 InstanceTable table;
100 Registry *registry = nullptr;
101 CapabilityRegistry *capabilityRegistry = nullptr;
102 ServerConfigHandler *serverConfigHandler = nullptr;
103 Supla::Element **runtimeElements = nullptr;
104 uint16_t runtimeElementCount = 0;
105 InstanceCalcfgSession *instanceCalcfgSession = nullptr;
106 DefinitionCalcfgSession *definitionCalcfgSession = nullptr;
107};
108
109} // namespace Suplet
110} // namespace Supla
111
112#endif // SRC_SUPLA_SUPLET_MANAGER_H_
Definition SuplaDevice.h:167
Definition config.h:44
Definition channel_conflict_resolver.h:18
Base class for all elements of SuplaDevice.
Definition element.h:27
Definition capability_registry.h:13
Definition storage.h:36
Definition manager.h:29
Definition registry.h:13
Definition server_config.h:55
Definition storage.h:62
Definition calcfg_session.h:33
Definition definition.h:123
Definition calcfg_session.h:17
Definition storage.h:18
Definition proto.h:2325
Definition proto.h:2315