supla-device
Loading...
Searching...
No Matches
element.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_ELEMENT_H_
20#define SRC_SUPLA_ELEMENT_H_
21
22#include <stdint.h>
23#include <supla-common/proto.h>
24
26
27namespace Supla {
28
29class Channel;
30namespace Protocol {
31class SuplaSrpc;
32} // namespace Protocol
33
34enum class ElementMode : uint8_t {
35 Registered,
36 Detached,
37};
38
42class Element {
43 public:
44 explicit Element(ElementMode mode = ElementMode::Registered);
45 virtual ~Element();
51 static Element *begin();
52
58 static Element *last();
59
67 static Element *getElementByChannelNumber(int channelNumber);
68
76 static Element *getOwnerOfSubDeviceId(int subDeviceId);
77
87 static bool IsAnyUpdatePending();
88
95 static void NotifyElementsAboutConfigChange(uint64_t fieldBit);
96
106 static bool IsInvalidPtrSet();
107
111 static void ClearInvalidPtr();
112
118 Element *next();
119
128 virtual void onLoadConfig(SuplaDeviceClass *sdc);
129
133 virtual void purgeConfig();
134
141 virtual void onLoadState();
142
149 virtual void onInit();
150
156 virtual void onSaveState();
157
168 virtual bool isStateStorageMigrationNeeded() const;
169
175 virtual void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc = nullptr);
176
183 virtual void iterateAlways();
184
193 virtual bool iterateConnected();
195 virtual bool iterateConnected(void *ptr);
196
204 virtual void onTimer();
205
213 virtual void onFastTimer();
214
218 virtual void onSoftReset();
219
225 virtual void onDeviceConfigChange(uint64_t fieldBit);
226
236 virtual int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue);
237
244
254 virtual bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const;
255
256 // Handles "get channel state" request from server
257 // channelState is prefilled with network and device status informations
264 virtual void handleGetChannelState(TDSC_ChannelState *channelState);
265
274
279 virtual uint32_t getCalcfgPendingTimeoutMs(
280 TSD_DeviceCalCfgRequest *request) const;
281
282 // Returns SUPLA_RESULTCODE_
292 virtual uint8_t handleChannelConfig(TSD_ChannelConfig *newChannelConfig,
293 bool local = false);
294
307 virtual uint8_t handleWeeklySchedule(TSD_ChannelConfig *newWeeklySchedule,
308 bool altSchedule = false,
309 bool local = false);
310
311 // handleSetChannelConfigResult should handle both standard channel config
312 // and weekly schedule config
321 virtual void handleSetChannelConfigResult(
323
330 virtual void handleChannelConfigFinished();
331
338 int getChannelNumber() const;
339
346 int getSecondaryChannelNumber() const;
347
355 virtual bool isOwnerOfSubDeviceId(int subDeviceId) const;
356
362 virtual const Channel *getChannel() const;
363 virtual Channel *getChannel();
364
371 virtual const Channel *getSecondaryChannel() const;
372 virtual Channel *getSecondaryChannel();
373
380 const Channel *getChannelByChannelNumber(int channelNumber) const;
381 Channel *getChannelByChannelNumber(int channelNumber);
382
392 virtual void generateKey(char *output, const char *key) const;
393
399 Element &disableChannelState();
400
406 bool isChannelStateEnabled() const;
407
413 virtual bool isAnyUpdatePending() const;
414
425 void setInitialCaption(const char *caption, bool secondaryChannel = false);
426
435 bool setDefaultFunction(uint32_t defaultFunction);
436
445 bool setFunction(uint32_t newFunction);
446
458 virtual bool setRuntimeFunction(uint32_t newFunction);
459
466 virtual void onFunctionChange(uint32_t currentFunction, uint32_t newFunction);
467
468 protected:
469 static Element *firstPtr;
470 static bool invalidatePtr;
471 bool registeredElement = true;
472 Element *nextPtr = nullptr;
473};
474
475}; // namespace Supla
476
477#endif // SRC_SUPLA_ELEMENT_H_
Definition SuplaDevice.h:177
Definition channel.h:33
virtual void onFunctionChange(uint32_t currentFunction, uint32_t newFunction)
Called when channel function changes.
Definition element.cpp:414
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:324
virtual uint32_t getCalcfgPendingTimeoutMs(TSD_DeviceCalCfgRequest *request) const
Returns timeout in milliseconds for CALCFG requests that become pending.
Definition element.cpp:303
static bool IsAnyUpdatePending()
Checks if any element has pending update for remote server.
Definition element.cpp:103
virtual void onDeviceConfigChange(uint64_t fieldBit)
Method called when device config is changed.
Definition element.cpp:355
virtual void onTimer()
Method called on timer interupt.
Definition element.cpp:172
static Element * getOwnerOfSubDeviceId(int subDeviceId)
Returns Element which owns given subDeviceId.
Definition element.cpp:90
virtual uint8_t handleChannelConfig(TSD_ChannelConfig *newChannelConfig, bool local=false)
Handles "set channel config" request from server.
Definition element.cpp:316
bool setFunction(uint32_t newFunction)
Sets channel's function.
Definition element.cpp:406
virtual void onLoadState()
Second method called on element in SuplaDevice.begin().
Definition element.cpp:124
virtual bool isOwnerOfSubDeviceId(int subDeviceId) const
Returns true if element is owner of subDeviceId.
Definition element.cpp:419
virtual int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request)
Handles CALCFG requests from server.
Definition element.cpp:298
void setInitialCaption(const char *caption, bool secondaryChannel=false)
Sets initial caption.
Definition element.cpp:380
const Channel * getChannelByChannelNumber(int channelNumber) const
Returns pointer to the channel matching channelNumber.
Definition element.cpp:226
static bool IsInvalidPtrSet()
When "invalid pointer" is set, previously obtained Element pointer may be invalid.
Definition element.cpp:368
virtual const Channel * getSecondaryChannel() const
Returns pointer to secondary channel.
Definition element.cpp:214
virtual bool iterateConnected()
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition element.cpp:156
static void ClearInvalidPtr()
Clears "invalid pointer" flag.
Definition element.cpp:372
int getChannelNumber() const
Returns channel number.
Definition element.cpp:192
virtual void onSoftReset()
Method called when device soft restart is triggered.
Definition element.cpp:352
int getSecondaryChannelNumber() const
Returns secondary channel number.
Definition element.cpp:201
virtual bool isStateStorageMigrationNeeded() const
Method called after onInit() to check if state storage migration is needed.
Definition element.cpp:423
virtual void generateKey(char *output, const char *key) const
Generates key used for Config.
Definition element.cpp:348
bool isChannelStateEnabled() const
Returns true if channel state (i) function is enabled.
Definition element.cpp:142
static Element * getElementByChannelNumber(int channelNumber)
Returns Element by channel number.
Definition element.cpp:76
virtual int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue)
Handles "new value" request from server.
Definition element.cpp:176
virtual void onLoadConfig(SuplaDeviceClass *sdc)
First method called on element in SuplaDevice.begin().
Definition element.cpp:120
Element & disableChannelState()
Disables channel state (i) function.
Definition element.cpp:309
static Element * begin()
Returns first Element (based on creation order).
Definition element.cpp:64
virtual void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc=nullptr)
Method called each time when device successfully registers to Supla server.
Definition element.cpp:128
virtual bool isAnyUpdatePending() const
Returns true if any update is pending.
Definition element.cpp:376
virtual void handleChannelConfigFinished()
Handles "channel config finished" message from server.
Definition element.cpp:342
static Element * last()
Returns last Element (based on creation order).
Definition element.cpp:68
virtual void onFastTimer()
Method called on fast timer interupt.
Definition element.cpp:174
Element * next()
Returns next Element from the list.
Definition element.cpp:114
virtual void onSaveState()
Method called periodically during SuplaDevice iteration.
Definition element.cpp:126
virtual void onInit()
Third method called on element in SuplaDevice.begin().
Definition element.cpp:118
virtual bool setRuntimeFunction(uint32_t newFunction)
Sets channel's function at runtime.
Definition element.cpp:410
virtual void handleSetChannelConfigResult(TSDS_SetChannelConfigResult *result)
Handles "set channel config" reply from server.
Definition element.cpp:335
virtual const Channel * getChannel() const
Returns pointer to main channel.
Definition element.cpp:210
static void NotifyElementsAboutConfigChange(uint64_t fieldBit)
Notifies all elements about device config change.
Definition element.cpp:359
virtual bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const
Returns active countdown timer remaining time in seconds.
Definition element.cpp:185
bool setDefaultFunction(uint32_t defaultFunction)
Sets default channel's function.
Definition element.cpp:393
virtual void handleGetChannelState(TDSC_ChannelState *channelState)
Handles "get channel state (i)" request from server.
Definition element.cpp:262
virtual void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value)
Fills TSD_SuplaChannelNewValue based on current state.
Definition element.cpp:181
virtual void purgeConfig()
Removes all configration data related to the element from Storage::Config.
Definition element.cpp:122
virtual void iterateAlways()
Method called on each SuplaDevice iteration.
Definition element.cpp:149
Definition supla_srpc.h:61
Definition proto.h:2981
Definition proto.h:3428
Definition proto.h:3412
Definition proto.h:2593
Definition proto.h:1227