supla-device
Loading...
Searching...
No Matches
config.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_STORAGE_CONFIG_H_
5#define SRC_SUPLA_STORAGE_CONFIG_H_
6
7#include <supla/device/device_mode.h>
8#include <supla/device/auto_update_policy.h>
9#include <supla/network/netif_config.h>
10#include <stddef.h>
11#include <stdint.h>
12
13#define SUPLA_CONFIG_MAX_KEY_SIZE 16
14
15#define MAX_SSID_SIZE 33 // actual SSID should be at most 32 bytes
16 // but we add here extra byte for null
17 // termination
18#define MAX_WIFI_PASSWORD_SIZE 64
19#define MQTT_CLIENTID_MAX_SIZE 23
20#define MQTT_USERNAME_MAX_SIZE 256
21#define MQTT_PASSWORD_MAX_SIZE 256
22#define SUPLA_AES_KEY_SIZE 32
23#define SUPLA_CFG_MODE_SALT_SIZE 16
24#define SUPLA_CFG_MODE_PASSWORD_SIZE 32
25
26namespace Supla {
27
28class Storage;
29
30#pragma pack(push, 1)
32 uint8_t salt[SUPLA_CFG_MODE_SALT_SIZE] = {};
33 uint8_t passwordSha[SUPLA_CFG_MODE_PASSWORD_SIZE] = {};
34
35 void copySalt(const SaltPassword& other);
36 bool isSaltEmpty() const { return salt[0] == 0; }
37 bool operator==(const SaltPassword& other) const;
38 bool isPasswordStrong(const char *password) const;
39 void clear();
40};
41#pragma pack(pop)
42
43
44class Config {
45 public:
46 friend class Storage;
47
48 Config();
49 virtual ~Config();
50 virtual bool init() = 0;
51 virtual void removeAll() = 0;
52 virtual bool isMinimalConfigReady(bool showLogs = true);
53 virtual bool isConfigModeSupported();
54 virtual bool isEncryptionEnabled();
55 // Returns true when the device-data partition is present in the partition
56 // table, regardless of whether its contents are usable.
57 virtual bool isDeviceDataPartitionDeclared();
58 virtual bool isDeviceDataPartitionAvailable();
59
60 // Override this method and setup all default value if needed
61 virtual void initDefaultDeviceConfig();
62
63 // Generic getters and setters
64 virtual bool setString(const char* key, const char* value) = 0;
65 virtual bool getString(const char* key, char* value, size_t maxSize) = 0;
66 // Returns stored string size including the terminating NUL, or -1 when the
67 // key is missing, invalid, or stores a non-string value.
68 virtual int getStringSize(const char* key) = 0;
69
70 virtual bool setBlob(const char* key, const char* value, size_t blobSize) = 0;
71 virtual bool getBlob(const char* key, char* value, size_t blobSize) = 0;
72 // Returns exact blob payload size, or -1 when the key is missing, invalid, or
73 // stores a non-blob value.
74 virtual int getBlobSize(const char* key) = 0;
75
76 virtual bool getInt8(const char* key, int8_t* result) = 0;
77 virtual bool getUInt8(const char* key, uint8_t* result) = 0;
78 virtual bool getInt32(const char* key, int32_t* result) = 0;
79 virtual bool getUInt32(const char* key, uint32_t* result) = 0;
80
81 virtual bool setInt8(const char* key, const int8_t value) = 0;
82 virtual bool setUInt8(const char* key, const uint8_t value) = 0;
83 virtual bool setInt32(const char* key, const int32_t value) = 0;
84 virtual bool setUInt32(const char* key, const uint32_t value) = 0;
85 virtual bool eraseKey(const char* key) = 0;
86
87 static void generateKey(char *, int, const char *);
88
89 virtual void commit();
90 virtual void saveWithDelay(uint16_t delayMs);
91 virtual void saveIfNeeded();
92
93 // Device generic config
94 virtual bool generateGuidAndAuthkey();
95 virtual bool setDeviceName(const char* name);
96 virtual bool setDeviceMode(enum Supla::DeviceMode mode);
97 virtual bool setGUID(const char* guid);
98 virtual bool getDeviceName(char* result);
99 virtual enum Supla::DeviceMode getDeviceMode();
100 virtual bool getGUID(char* result);
101 virtual bool getSwUpdateServer(char* url);
102 virtual bool isSwUpdateSkipCert();
103 virtual bool isSwUpdateBeta();
104 virtual bool setSwUpdateSkipCert(bool skipCert);
105 virtual bool setSwUpdateServer(const char* url);
106 virtual bool setSwUpdateBeta(bool enabled);
107 virtual bool getCustomCA(char* result, int maxSize);
108 virtual int getCustomCASize();
109 virtual bool setCustomCA(const char* customCA);
110 virtual bool getAESKey(uint8_t* result);
111
112 virtual bool loadNetifConfig(const char* blobName, NetifConfigBlob* cfg);
113 virtual bool saveNetifConfig(const char* blobName,
114 const NetifConfigBlob& cfg);
115 virtual bool removeNetifConfig(const char* blobName);
116
117#ifndef ARDUINO_ARCH_AVR
118 static void generateSaltPassword(const char* password,
119 Supla::SaltPassword* result);
120#endif
121 virtual bool setCfgModeSaltPassword(const Supla::SaltPassword& saltPassword);
122 virtual bool getCfgModeSaltPassword(Supla::SaltPassword* result);
123
129 Supla::AutoUpdatePolicy getAutoUpdatePolicy();
130
136 void setAutoUpdatePolicy(Supla::AutoUpdatePolicy policy);
137
138 // Supla protocol config
139 virtual bool setSuplaCommProtocolEnabled(bool enabled);
140 virtual bool setSuplaServer(const char* server);
141 virtual bool setSuplaServerPort(int32_t port);
142 virtual bool setEmail(const char* email);
143 virtual bool setAuthKey(const char* authkey);
144 virtual bool isSuplaCommProtocolEnabled();
145 virtual bool getSuplaServer(char* result);
146 virtual int32_t getSuplaServerPort();
147 virtual bool getEmail(char* result);
148 virtual bool getAuthKey(char* result);
149
150 // MQTT protocol config
151 virtual bool setMqttCommProtocolEnabled(bool enabled);
152 virtual bool setMqttServer(const char* server);
153 virtual bool setMqttServerPort(int32_t port);
154 virtual bool setMqttUser(const char* user);
155 virtual bool setMqttPassword(const char* password);
156 virtual bool setMqttQos(int32_t qos);
157 virtual bool isMqttCommProtocolEnabled();
158 virtual bool setMqttTlsEnabled(bool enabled);
159 virtual bool isMqttTlsEnabled();
160 virtual bool setMqttBrokerVerificationEnabled(bool enabled);
161 virtual bool isMqttBrokerVerificationEnabled();
162 virtual bool setMqttAuthEnabled(bool enabled);
163 virtual bool isMqttAuthEnabled();
164 virtual bool setMqttRetainEnabled(bool enabled);
165 virtual bool isMqttRetainEnabled();
166 virtual bool getMqttServer(char* result);
167 virtual int32_t getMqttServerPort();
168 virtual bool getMqttUser(char* result);
169 virtual bool getMqttPassword(char* result);
170 virtual int32_t getMqttQos();
171 virtual bool setMqttPrefix(const char* prefix);
172 virtual bool getMqttPrefix(char* result);
173 virtual bool setMqttCA(const char* mqttCA);
174 virtual bool getMqttCA(char* result, int maxSize);
175 // Returns MQTT CA payload size without the terminating NUL.
176 virtual int getMqttCASize();
177
178 // WiFi config
179 virtual bool setWiFiSSID(const char* ssid);
180 virtual bool setWiFiPassword(const char* password);
181 virtual bool setAltWiFiSSID(const char* ssid);
182 virtual bool setAltWiFiPassword(const char* password);
183 virtual bool getWiFiSSID(char* result);
184 virtual bool getWiFiPassword(char* result);
185 virtual bool getAltWiFiSSID(char* result);
186 virtual bool getAltWiFiPassword(char* result);
187
188 virtual bool isDeviceConfigChangeFlagSet();
189 virtual bool isDeviceConfigChangeReadyToSend();
190 virtual bool setDeviceConfigChangeFlag();
191 virtual bool clearDeviceConfigChangeFlag();
192
193 virtual bool setChannelConfigChangeFlag(int channelNo, int configType = 0);
194 virtual bool clearChannelConfigChangeFlag(int channelNo, int configType = 0);
195 virtual bool isChannelConfigChangeFlagSet(int channelNo, int configType = 0);
196
204 int32_t getChannelFunction(int channelNo);
205
214 bool setChannelFunction(int channelNo, int32_t channelFunction);
215
221 bool getInitResult() const;
222
228 bool isConfigInitDone() const { return configInitDone; }
229
230 protected:
231 void setConfigInitDone(bool done) { configInitDone = done; }
232
233 uint32_t saveDelayTimestamp = 0;
234 uint32_t deviceConfigUpdateDelayTimestamp = 0;
235 uint16_t saveDelayMs = 0;
236 int8_t deviceConfigChangeFlag = -1;
237 bool initResult = false;
238 bool configInitDone = false;
239};
240}; // namespace Supla
241
242#endif // SRC_SUPLA_STORAGE_CONFIG_H_
Definition config.h:44
bool isConfigInitDone() const
Checks if config has been initialized.
Definition config.h:228
Supla::AutoUpdatePolicy getAutoUpdatePolicy()
Returns current automatic firmware update policy.
Definition config.cpp:766
void setAutoUpdatePolicy(Supla::AutoUpdatePolicy policy)
Sets automatic firmware update policy.
Definition config.cpp:776
bool setChannelFunction(int channelNo, int32_t channelFunction)
Stores channel function in config.
Definition config.cpp:824
int32_t getChannelFunction(int channelNo)
Returns channel function stored in config.
Definition config.cpp:813
bool getInitResult() const
Returns init result.
Definition config.cpp:833
Definition storage.h:23
Definition netif_config.h:22
Definition config.h:31