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 CalcfgSession;
25class ServerConfigHandler;
26enum class ServerConfigResult : uint8_t;
27
29 public:
30 explicit Manager(Supla::Config *config);
31 ~Manager();
32
33 bool load();
34 bool loadInstance(uint8_t instanceId, InstanceRecord *record);
35 bool save(const ArtifactStorageHandle *stagedArtifact = nullptr);
36 bool erase();
37
38 InstanceTable *getInstanceTable();
39 const InstanceTable *getInstanceTable() const;
40
41 void setRegistry(Registry *registry);
42 Registry *getRegistry();
43 const Registry *getRegistry() const;
44 void setCapabilityRegistry(CapabilityRegistry *registry);
45 CapabilityRegistry *getCapabilityRegistry();
46 const CapabilityRegistry *getCapabilityRegistry() const;
47 void setServerConfigHandler(ServerConfigHandler *handler);
48 ServerConfigHandler *getServerConfigHandler();
49 const ServerConfigHandler *getServerConfigHandler() const;
50 bool isServerConfigReady() const;
51
52 bool addInstance(const InstanceRecord &record);
53 bool addInstanceFromDefinition(InstanceRecord record,
54 const Definition &definition);
55 bool canUpsertInstanceFromDefinition(InstanceRecord record,
56 const Definition &definition) const;
57 bool upsertInstanceFromDefinition(
58 InstanceRecord record,
59 const Definition &definition,
60 const ArtifactStorageHandle *stagedArtifact = nullptr);
61 bool createElementsFromRegistry(const Registry &registry,
62 Supla::Element **created,
63 uint16_t createdSize,
64 uint16_t *createdCount = nullptr);
65 bool loadRuntimeElements();
66 bool loadRuntimeElementsFromRegistry(const Registry &registry);
67 void deleteRuntimeElements();
68 bool initRuntimeElements(SuplaDeviceClass *device);
69 uint16_t getRuntimeElementCount() const;
70
71 bool beginStagedArtifact(uint8_t instanceId,
72 uint32_t artifactSize,
73 ArtifactStorageHandle *handle);
74 bool writeStagedArtifactChunk(ArtifactStorageHandle *handle,
75 const uint8_t *data,
76 uint16_t size);
77 bool abortStagedArtifact(ArtifactStorageHandle *handle);
78 bool readArtifact(uint8_t instanceId,
79 uint32_t offset,
80 uint8_t *data,
81 uint16_t size) const;
82 ServerConfigResult applyCommandJson(const char *commandJson);
83 ServerConfigResult validateCommandJson(const char *commandJson) const;
84 int handleCalcfg(TSD_DeviceCalCfgRequest *request,
86 CalcfgSession *getCalcfgSession();
87 const CalcfgSession *getCalcfgSession() const;
88 CalcfgSession *beginCalcfgSession();
89 void clearCalcfgSession();
90 void cleanupExpiredCalcfgSessions(uint32_t nowMs);
91 bool removeInstance(uint8_t instanceId);
92 uint8_t getFirstFreeSubDeviceId() const;
93
94 bool onChannelConflictReport(uint8_t *channelReport,
95 uint8_t channelReportSize,
96 bool hasConfilictInvalidType,
97 bool hasConfilictChannelMissingOnServer,
98 bool hasConflictChannelMissingOnDevice) override;
99
100 private:
101 bool isChannelMissingOnServer(uint8_t *channelReport,
102 uint8_t channelReportSize,
103 int channelNumber) const;
104 bool getRequiredRuntimeElementCount(const Registry &registry,
105 uint16_t *count);
106
108 InstanceTable table;
109 Registry *registry = nullptr;
110 CapabilityRegistry *capabilityRegistry = nullptr;
111 ServerConfigHandler *serverConfigHandler = nullptr;
112 Supla::Element **runtimeElements = nullptr;
113 uint16_t runtimeElementCount = 0;
114 CalcfgSession *calcfgSession = nullptr;
115};
116
117} // namespace Suplet
118} // namespace Supla
119
120#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:30
Definition capability_registry.h:13
Definition storage.h:59
Definition manager.h:28
Definition registry.h:13
Definition server_config.h:57
Definition storage.h:85
Definition calcfg_session.h:37
Definition definition.h:129
Definition storage.h:37
Definition proto.h:2340
Definition proto.h:2330