supla-device
Loading...
Searching...
No Matches
element.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_ELEMENT_H_
5#define SRC_SUPLA_ELEMENT_H_
6
7#include <stdint.h>
8#include <supla-common/proto.h>
9
11
12namespace Supla {
13
14class Channel;
15namespace Control {
16class ActionTrigger;
17}
18namespace Protocol {
19class SuplaSrpc;
20} // namespace Protocol
21
22enum class ElementMode : uint8_t {
23 Registered,
24 Detached,
25};
26
30class Element {
31 public:
32 explicit Element(ElementMode mode = ElementMode::Registered);
33 virtual ~Element();
34 // Typed access without RTTI, including ATs whose button is not initialized.
35 virtual Control::ActionTrigger *getActionTrigger() { return nullptr; }
41 static Element *begin();
42
48 static Element *last();
49
57 static Element *getElementByChannelNumber(int channelNumber);
58
66 static Element *getOwnerOfSubDeviceId(int subDeviceId);
67
77 static bool IsAnyUpdatePending();
78
85 static void NotifyElementsAboutConfigChange(uint64_t fieldBit);
86
96 static bool IsInvalidPtrSet();
97
101 static void ClearInvalidPtr();
102
108 Element *next();
109
118 virtual void onLoadConfig(SuplaDeviceClass *sdc);
119
123 virtual void purgeConfig();
124
131 virtual void onLoadState();
132
139 virtual void onInit();
140
146 virtual void onSaveState();
147
158 virtual bool isStateStorageMigrationNeeded() const;
159
165 virtual void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc = nullptr);
166
173 virtual void iterateAlways();
174
183 virtual bool iterateConnected();
185 virtual bool iterateConnected(void *ptr);
186
194 virtual void onTimer();
195
203 virtual void onFastTimer();
204
208 virtual void onSoftReset();
209
215 virtual void onDeviceConfigChange(uint64_t fieldBit);
216
226 virtual int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue);
227
234
244 virtual bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const;
245
246 // Handles "get channel state" request from server
247 // channelState is prefilled with network and device status informations
254 virtual void handleGetChannelState(TDSC_ChannelState *channelState);
255
264
269 virtual uint32_t getCalcfgPendingTimeoutMs(
270 TSD_DeviceCalCfgRequest *request) const;
271
272 // Returns SUPLA_RESULTCODE_
282 virtual uint8_t handleChannelConfig(TSD_ChannelConfig *newChannelConfig,
283 bool local = false);
284
297 virtual uint8_t handleWeeklySchedule(TSD_ChannelConfig *newWeeklySchedule,
298 bool altSchedule = false,
299 bool local = false);
300
301 // handleSetChannelConfigResult should handle both standard channel config
302 // and weekly schedule config
311 virtual void handleSetChannelConfigResult(
313
320 virtual void handleChannelConfigFinished();
327 virtual void handleChannelConfigFinished(int channelNumber);
328
335 int getChannelNumber() const;
336
343 int getSecondaryChannelNumber() const;
344
352 virtual bool isOwnerOfSubDeviceId(int subDeviceId) const;
353
359 virtual const Channel *getChannel() const;
360 virtual Channel *getChannel();
361
368 virtual const Channel *getSecondaryChannel() const;
369 virtual Channel *getSecondaryChannel();
370
377 const Channel *getChannelByChannelNumber(int channelNumber) const;
378 Channel *getChannelByChannelNumber(int channelNumber);
379
389 virtual void generateKey(char *output, const char *key) const;
390
397
403 bool isChannelStateEnabled() const;
404
410 virtual bool isAnyUpdatePending() const;
411
422 void setInitialCaption(const char *caption, bool secondaryChannel = false);
423
432 bool setDefaultFunction(uint32_t defaultFunction);
433
442 bool setFunction(uint32_t newFunction);
443
455 virtual bool setRuntimeFunction(uint32_t newFunction);
456
463 virtual void onFunctionChange(uint32_t currentFunction, uint32_t newFunction);
464
465 protected:
466 static Element *firstPtr;
467 static bool invalidatePtr;
468 bool registeredElement = true;
469 Element *nextPtr = nullptr;
470};
471
472}; // namespace Supla
473
474#endif // SRC_SUPLA_ELEMENT_H_
Definition SuplaDevice.h:167
Definition channel.h:26
Definition action_trigger.h:32
Base class for all elements of SuplaDevice.
Definition element.h:30
virtual void onFunctionChange(uint32_t currentFunction, uint32_t newFunction)
Called when channel function changes.
Definition element.cpp:428
virtual uint8_t handleWeeklySchedule(TSD_ChannelConfig *newWeeklySchedule, bool altSchedule=false, bool local=false)
Handles "set channel config" with "weekly schedule" type request from server.
Definition element.cpp:330
virtual uint32_t getCalcfgPendingTimeoutMs(TSD_DeviceCalCfgRequest *request) const
Returns timeout in milliseconds for CALCFG requests that become pending.
Definition element.cpp:308
static bool IsAnyUpdatePending()
Checks if any element has pending update for remote server.
Definition element.cpp:90
virtual void onDeviceConfigChange(uint64_t fieldBit)
Method called when device config is changed.
Definition element.cpp:369
virtual void onTimer()
Method called on timer interupt.
Definition element.cpp:159
static Element * getOwnerOfSubDeviceId(int subDeviceId)
Returns Element which owns given subDeviceId.
Definition element.cpp:77
virtual uint8_t handleChannelConfig(TSD_ChannelConfig *newChannelConfig, bool local=false)
Handles "set channel config" request from server.
Definition element.cpp:321
bool setFunction(uint32_t newFunction)
Sets channel's function.
Definition element.cpp:420
virtual void onLoadState()
Second method called on element in SuplaDevice.begin().
Definition element.cpp:111
virtual bool isOwnerOfSubDeviceId(int subDeviceId) const
Returns true if element is owner of subDeviceId.
Definition element.cpp:433
virtual int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request)
Handles CALCFG requests from server.
Definition element.cpp:303
void setInitialCaption(const char *caption, bool secondaryChannel=false)
Sets initial caption.
Definition element.cpp:394
const Channel * getChannelByChannelNumber(int channelNumber) const
Returns pointer to the channel matching channelNumber.
Definition element.cpp:213
static bool IsInvalidPtrSet()
When "invalid pointer" is set, previously obtained Element pointer may be invalid.
Definition element.cpp:382
virtual const Channel * getSecondaryChannel() const
Returns pointer to secondary channel.
Definition element.cpp:201
virtual bool iterateConnected()
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition element.cpp:143
static void ClearInvalidPtr()
Clears "invalid pointer" flag.
Definition element.cpp:386
int getChannelNumber() const
Returns channel number.
Definition element.cpp:179
virtual void onSoftReset()
Method called when device soft restart is triggered.
Definition element.cpp:366
int getSecondaryChannelNumber() const
Returns secondary channel number.
Definition element.cpp:188
virtual bool isStateStorageMigrationNeeded() const
Method called after onInit() to check if state storage migration is needed.
Definition element.cpp:437
virtual void generateKey(char *output, const char *key) const
Generates key used for Config.
Definition element.cpp:362
bool isChannelStateEnabled() const
Returns true if channel state (i) function is enabled.
Definition element.cpp:129
static Element * getElementByChannelNumber(int channelNumber)
Returns Element by channel number.
Definition element.cpp:63
virtual int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue)
Handles "new value" request from server.
Definition element.cpp:163
virtual void onLoadConfig(SuplaDeviceClass *sdc)
First method called on element in SuplaDevice.begin().
Definition element.cpp:107
Element & disableChannelState()
Disables channel state (i) function.
Definition element.cpp:314
static Element * begin()
Returns first Element (based on creation order)
Definition element.cpp:51
virtual void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc=nullptr)
Method called each time when device successfully registers to Supla server.
Definition element.cpp:115
virtual bool isAnyUpdatePending() const
Returns true if any update is pending.
Definition element.cpp:390
virtual void handleChannelConfigFinished()
Handles "channel config finished" message from server.
Definition element.cpp:350
static Element * last()
Returns last Element (based on creation order)
Definition element.cpp:55
virtual void onFastTimer()
Method called on fast timer interupt.
Definition element.cpp:161
Element * next()
Returns next Element from the list.
Definition element.cpp:101
virtual void onSaveState()
Method called periodically during SuplaDevice iteration.
Definition element.cpp:113
virtual void onInit()
Third method called on element in SuplaDevice.begin()
Definition element.cpp:105
virtual bool setRuntimeFunction(uint32_t newFunction)
Sets channel's function at runtime.
Definition element.cpp:424
virtual void handleSetChannelConfigResult(TSDS_SetChannelConfigResult *result)
Handles "set channel config" reply from server.
Definition element.cpp:342
virtual const Channel * getChannel() const
Returns pointer to main channel.
Definition element.cpp:197
static void NotifyElementsAboutConfigChange(uint64_t fieldBit)
Notifies all elements about device config change.
Definition element.cpp:373
virtual bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const
Returns active countdown timer remaining time in seconds.
Definition element.cpp:172
bool setDefaultFunction(uint32_t defaultFunction)
Sets default channel's function.
Definition element.cpp:407
virtual void handleGetChannelState(TDSC_ChannelState *channelState)
Handles "get channel state (i)" request from server.
Definition element.cpp:249
virtual void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value)
Fills TSD_SuplaChannelNewValue based on current state.
Definition element.cpp:168
virtual void purgeConfig()
Removes all configration data related to the element from Storage::Config.
Definition element.cpp:109
virtual void iterateAlways()
Method called on each SuplaDevice iteration.
Definition element.cpp:136
Definition supla_srpc.h:47
Definition proto.h:2721
Definition proto.h:3192
Definition proto.h:3176
Definition proto.h:2330
Definition proto.h:1243