supla-device
Loading...
Searching...
No Matches
definition_cache.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_DEFINITION_CACHE_H_
5#define SRC_SUPLA_SUPLET_DEFINITION_CACHE_H_
6
7#include <stddef.h>
8#include <stdint.h>
9#include <supla/suplet/config.h>
10
11namespace Supla {
12
13class Config;
14
15namespace Suplet {
16
18 uint32_t definitionId = 0;
19 uint16_t definitionVersion = 0;
20 uint16_t jsonSize = 0;
21 uint32_t crc32 = 0;
22};
23
25 uint8_t slot = 255;
26 uint8_t variant = 0;
27};
28
30 public:
31 explicit DefinitionCache(Supla::Config *config);
32
33 bool save(uint32_t definitionId,
34 uint16_t definitionVersion,
35 const char *json);
36 bool load(uint32_t definitionId,
37 uint16_t definitionVersion,
38 char *json,
39 size_t jsonSize,
40 CachedDefinitionInfo *info = nullptr) const;
41 bool contains(uint32_t definitionId, uint16_t definitionVersion) const;
42 bool contentEquals(uint32_t definitionId,
43 uint16_t definitionVersion,
44 const uint8_t *data,
45 size_t size) const;
46 bool erase(uint32_t definitionId, uint16_t definitionVersion);
47 bool getInfo(uint8_t index, CachedDefinitionInfo *info) const;
48 bool getInfoAndRepair(uint8_t index, CachedDefinitionInfo *info) const;
49 bool beginStagedSave(uint32_t definitionId,
50 uint16_t definitionVersion,
51 uint16_t jsonSize,
52 DefinitionCacheHandle *handle);
53 bool writeStagedChunk(DefinitionCacheHandle handle,
54 uint16_t chunkIndex,
55 const uint8_t *data,
56 uint16_t size);
57 bool loadStaged(DefinitionCacheHandle handle,
58 uint32_t definitionId,
59 uint16_t definitionVersion,
60 char *json,
61 size_t jsonSize,
62 CachedDefinitionInfo *info = nullptr) const;
63 bool commitStaged(DefinitionCacheHandle handle,
64 uint32_t definitionId,
65 uint16_t definitionVersion,
66 uint16_t jsonSize);
67 bool abortStaged(DefinitionCacheHandle handle);
68
69 private:
70 bool verifyCrc32(const char *json,
71 uint16_t jsonSize,
72 uint32_t expectedCrc32) const;
73 bool readActiveHeader(uint8_t index,
75 uint8_t *activeVariant = nullptr,
76 uint16_t *chunkCount = nullptr,
77 uint16_t *chunkSize = nullptr) const;
78 bool loadAndRepairActiveHeader(uint8_t index,
80 uint8_t *activeVariant = nullptr,
81 uint16_t *chunkCount = nullptr,
82 uint16_t *chunkSize = nullptr) const;
83 bool loadHeader(uint8_t index,
84 uint8_t variant,
86 uint16_t *chunkCount = nullptr,
87 uint16_t *chunkSize = nullptr) const;
88 bool saveSlot(uint8_t index,
89 uint32_t definitionId,
90 uint16_t definitionVersion,
91 const char *json,
92 uint16_t jsonSize,
93 uint32_t crc32);
94 bool saveHeader(uint8_t index,
95 uint8_t variant,
96 const CachedDefinitionInfo &info,
97 uint16_t chunkCount,
98 uint16_t chunkSize);
99 bool loadPayload(uint8_t slot,
100 uint8_t variant,
101 const CachedDefinitionInfo &info,
102 uint16_t chunkCount,
103 uint16_t chunkSize,
104 char *json,
105 size_t jsonSize) const;
106 bool eraseChunks(uint8_t index, uint8_t variant);
107 bool eraseVariant(uint8_t index, uint8_t variant);
108 bool eraseLegacySlot(uint8_t index);
109 bool eraseSlot(uint8_t index);
110 bool setActiveVariant(uint8_t index, uint8_t variant);
111 bool variantExists(uint8_t index, uint8_t variant) const;
112 bool slotExists(uint8_t index) const;
113 int findSlot(uint32_t definitionId,
114 uint16_t definitionVersion,
115 bool repair) const;
116 int findFreeSlot() const;
117 static uint8_t otherVariant(uint8_t variant);
118 static bool isValidVariant(uint8_t variant);
119 static bool isValidHandle(DefinitionCacheHandle handle);
120 static bool makeActKey(uint8_t index, char *output, size_t outputSize);
121 static bool makeHeaderKey(uint8_t index,
122 uint8_t variant,
123 char *output,
124 size_t outputSize);
125 static bool makeChunkKey(uint8_t index,
126 uint8_t variant,
127 uint16_t chunkIndex,
128 char *output,
129 size_t outputSize);
130 static bool makeLegacyHeaderKey(uint8_t index,
131 char *output,
132 size_t outputSize);
133 static bool makeLegacyChunkKey(uint8_t index,
134 uint16_t chunkIndex,
135 char *output,
136 size_t outputSize);
137
138 Supla::Config *config = nullptr;
139};
140
141} // namespace Suplet
142} // namespace Supla
143
144#endif // SRC_SUPLA_SUPLET_DEFINITION_CACHE_H_
Definition config.h:44
Definition definition_cache.h:29
Definition definition_cache.h:17
Definition definition_cache.h:24