supla-device
Loading...
Searching...
No Matches
manager.h
1/*
2 Copyright (C) AC SOFTWARE SP. Z O.O
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19#ifndef SRC_SUPLA_SUPLET_MANAGER_H_
20#define SRC_SUPLA_SUPLET_MANAGER_H_
21
22#include <stdint.h>
23#include <supla/device/channel_conflict_resolver.h>
24#include <supla-common/proto.h>
25#include <supla/suplet/definition.h>
26#include <supla/suplet/registry.h>
27#include <supla/suplet/storage.h>
28
30
31namespace Supla {
32
33class Config;
34class Element;
35
36namespace Suplet {
37
42enum class ServerConfigResult : uint8_t;
43
45 public:
46 explicit Manager(Supla::Config *config);
47 ~Manager();
48
49 bool load();
50 bool loadInstance(uint8_t instanceId, InstanceRecord *record);
51 bool save();
52 bool erase();
53
54 InstanceTable *getInstanceTable();
55 const InstanceTable *getInstanceTable() const;
56
57 void setRegistry(Registry *registry);
58 Registry *getRegistry();
59 const Registry *getRegistry() const;
60 void setCapabilityRegistry(CapabilityRegistry *registry);
61 CapabilityRegistry *getCapabilityRegistry();
62 const CapabilityRegistry *getCapabilityRegistry() const;
63 void setServerConfigHandler(ServerConfigHandler *handler);
64 ServerConfigHandler *getServerConfigHandler();
65 const ServerConfigHandler *getServerConfigHandler() const;
66 bool isServerConfigReady() const;
67
68 bool addInstance(const InstanceRecord &record);
69 bool addInstanceFromDefinition(InstanceRecord record,
70 const Definition &definition);
71 bool canUpsertInstanceFromDefinition(InstanceRecord record,
72 const Definition &definition) const;
73 bool upsertInstanceFromDefinition(InstanceRecord record,
74 const Definition &definition);
75 bool createElementsFromRegistry(const Registry &registry,
76 Supla::Element **created,
77 uint16_t createdSize,
78 uint16_t *createdCount = nullptr);
79 bool loadRuntimeElements();
80 bool loadRuntimeElementsFromRegistry(const Registry &registry);
81 void deleteRuntimeElements();
82 bool initRuntimeElements(SuplaDeviceClass *device);
83 uint16_t getRuntimeElementCount() const;
84 ServerConfigResult applyCommandJson(const char *commandJson);
85 ServerConfigResult validateCommandJson(const char *commandJson) const;
86 int handleCalcfg(TSD_DeviceCalCfgRequest *request,
88 InstanceCalcfgSession *getInstanceCalcfgSession();
89 const InstanceCalcfgSession *getInstanceCalcfgSession() const;
90 InstanceCalcfgSession *beginInstanceCalcfgSession();
91 void clearInstanceCalcfgSession();
92 DefinitionCalcfgSession *getDefinitionCalcfgSession();
93 const DefinitionCalcfgSession *getDefinitionCalcfgSession() const;
94 DefinitionCalcfgSession *beginDefinitionCalcfgSession();
95 void clearDefinitionCalcfgSession();
96 void cleanupExpiredCalcfgSessions(uint32_t nowMs);
97 bool removeInstance(uint8_t instanceId);
98 uint8_t getFirstFreeSubDeviceId() const;
99
100 bool onChannelConflictReport(uint8_t *channelReport,
101 uint8_t channelReportSize,
102 bool hasConfilictInvalidType,
103 bool hasConfilictChannelMissingOnServer,
104 bool hasConflictChannelMissingOnDevice) override;
105
106 private:
107 bool isChannelMissingOnServer(uint8_t *channelReport,
108 uint8_t channelReportSize,
109 int channelNumber) const;
110 bool getRequiredRuntimeElementCount(const Registry &registry,
111 uint16_t *count) const;
112
114 InstanceTable table;
115 Registry *registry = nullptr;
116 CapabilityRegistry *capabilityRegistry = nullptr;
117 ServerConfigHandler *serverConfigHandler = nullptr;
118 Supla::Element **runtimeElements = nullptr;
119 uint16_t runtimeElementCount = 0;
120 InstanceCalcfgSession *instanceCalcfgSession = nullptr;
121 DefinitionCalcfgSession *definitionCalcfgSession = nullptr;
122};
123
124} // namespace Suplet
125} // namespace Supla
126
127#endif // SRC_SUPLA_SUPLET_MANAGER_H_
Definition SuplaDevice.h:177
Definition config.h:59
Definition channel_conflict_resolver.h:27
Base class for all elements of SuplaDevice.
Definition element.h:42
Definition capability_registry.h:28
Definition storage.h:51
Definition registry.h:28
Definition server_config.h:70
Definition storage.h:77
Definition calcfg_session.h:46
Definition definition.h:138
Definition calcfg_session.h:30
Definition storage.h:33
Definition proto.h:2603
Definition proto.h:2593