SpaIot Library
framedecoder.h
1/*
2 * SpaIot Library (c) by epsilonrt - epsilonrt@gmail.com
3 * This file is part of SpaIot library <https://github.com/epsilonrt/spaiot-lib>
4 * This file is based on DIYSCIP (c) by Geoffroy HUBERT
5 *
6 * SpaIot library is licensed under a
7 * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
8 *
9 * You should have received a copy of the license along with this
10 * work. If not, see <http://creativecommons.org/licenses/by-nc-sa/4.0/>.
11 *
12 * SpaIot library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY;
14 */
15#pragma once
16
17#include <map>
18#include "bussettings.h"
19
20namespace SpaIot {
21
36 public:
47 void begin (unsigned long waitingTimeMs = BeginWaitingTimeMs);
53 void begin (const BusSettings & settings,
54 const std::map <int, LedSettings> & leds,
55 unsigned long waitingTimeMs = BeginWaitingTimeMs);
62 bool isOpened() const;
68 bool hasLed (int key) const;
73 const BusSettings & busSettings() const;
79 const std::map <int, LedSettings> ledSettings() const;
88 uint16_t rawStatus() const;
95 uint8_t isLedOn (int key) const;
101 inline uint8_t isPowerOn() const;
109 inline uint8_t isFilterOn() const;
117 inline uint8_t isBubbleOn() const;
126 inline uint8_t isHeatReached() const;
134 inline uint8_t isJetOn() const;
142 inline uint8_t isSanitizerOn() const;
152 uint8_t isHeaterOn() const;
162 uint16_t waterTemp() const;
174 uint16_t desiredTemp() const;
180 uint16_t sanitizerTime() const;
186 uint32_t frameCounter() const;
198 uint32_t frameDropped() const;
209 uint16_t error();
225 uint8_t isDisplayBlink() const;
232 uint8_t waitUntilDisplayBlink (unsigned long MaxWaitingTimeMs = 5000) const;
243 uint16_t waitForWaterTemp (unsigned long MaxWaitingTimeMs = 25000) const;
247 void end();
253 virtual ~FrameDecoder();
254
255 protected:
256 FrameDecoder (const BusSettings & bus,
257 const std::map <int, LedSettings> & leds);
258 FrameDecoder ();
259 static uint16_t convertDisplayToCelsius (uint16_t m_displayValue);
260
261 protected:
262 BusSettings m_busSettings;
263 std::map <int, LedSettings> m_ledSettings;
264
265 // Parameters set by the constructor
266 static int m_dataPin;
267 static uint16_t m_frameLedPower;
268 static uint16_t m_frameLedFilter;
269 static uint16_t m_frameLedHeater;
270 static uint16_t m_frameLedHeaterReached;
271 static uint16_t m_frameLedBubble;
272 static uint16_t m_frameLedJet;
273 static uint16_t m_frameLedSanitizer;
274
275 // Data members of Decoder, updated by interrupt service routines
276 static volatile uint32_t m_frameCounter;
277 static volatile uint32_t m_frameDropped;
278 static volatile uint16_t m_rawStatus;
279 static volatile uint16_t m_errorValue;
280 static volatile uint16_t m_waterTemp;
281 static volatile uint16_t m_desiredTemp;
282 static volatile uint16_t m_sanitizerTime;
283
284 // Working status variables, updated by interrupt service routines
285 static volatile uint16_t m_frameValue;
286 static volatile uint16_t m_frameShift;
287 static volatile uint16_t m_displayValue;
288 static volatile uint32_t m_lastSanitizerFrameCounter;
289 static volatile uint32_t m_lastBlackDisplayFrameCounter;
290 static volatile bool m_isDisplayBlink;
291 static volatile uint32_t m_lastErrorChangeFrameCounter;
292 static volatile uint16_t m_latestLedStatus;
293 static volatile uint16_t m_stableLedStatusCounter;
294 static volatile uint16_t m_latestDisplayValue;
295 static volatile uint16_t m_stableDisplayValueCounter;
296 static volatile uint16_t m_latestDesiredTemp;
297 static volatile uint16_t m_latestWaterTemp;
298 static volatile uint16_t m_stableWaterTempCounter;
299 static volatile uint16_t m_unsetDigits;
300 static volatile uint8_t m_lastTempUnit;
301 static volatile uint32_t m_lastTempUnitChangeFrameCounter;
302 static volatile uint16_t m_counterTempUnitChanged;
303
304 static const unsigned long FramePeriodUs = 320;
305 static const uint32_t SetupTrigUnitChangeFrameCounterMax =
306 (SetupTrigUnitChangeStepMaxMs * 1000) / FramePeriodUs;
307 static const uint32_t ResetErrorFrameCounter =
308 (ResetErrorTimeMs * 1000) / FramePeriodUs;
309 private:
310 bool m_isopened;
311 static IRAM_ATTR void clkRisingInterrupt();
312 static IRAM_ATTR void holdRisingInterrupt();
313 };
314
315
316 //----------------------------------------------------------------------------
317 inline uint8_t FrameDecoder::isPowerOn() const {
318
319 return isLedOn (Power);
320 }
321
322 //----------------------------------------------------------------------------
323 inline uint8_t FrameDecoder::isFilterOn() const {
324
325 return isLedOn (Filter);
326 }
327
328 //----------------------------------------------------------------------------
329 inline uint8_t FrameDecoder::isBubbleOn() const {
330
331 return isLedOn (Bubble);
332 }
333
334 //----------------------------------------------------------------------------
335 inline uint8_t FrameDecoder::isHeatReached() const {
336
337 return isLedOn (HeatReached);
338 }
339
340 //----------------------------------------------------------------------------
341 inline uint8_t FrameDecoder::isJetOn() const {
342
343 return isLedOn (Jet);
344 }
345
346 //----------------------------------------------------------------------------
347 inline uint8_t FrameDecoder::isSanitizerOn() const {
348
349 return isLedOn (Sanitizer);
350 }
351
352}
SPI 2840X Bus settings.
Definition: bussettings.h:27
This class decodes information from the technical block of the spa.
Definition: framedecoder.h:35
void begin(unsigned long waitingTimeMs=BeginWaitingTimeMs)
Initializes and connect with the spa.
uint32_t frameDropped() const
Number of dropped frames.
bool isOpened() const
Indicates whether the connection with the spa is established.
uint16_t waterTemp() const
Water temperature in °C.
uint8_t isPowerOn() const
Last state of the Power LED.
Definition: framedecoder.h:317
uint8_t isBubbleOn() const
Last state of the Bubble LED.
Definition: framedecoder.h:329
uint8_t isHeaterOn() const
State of water heating.
uint16_t error()
Error code displayed by the control panel.
uint8_t isDisplayBlink() const
Check if the display blink.
const BusSettings & busSettings() const
Bus settings provides at the instantiation.
uint8_t isJetOn() const
Last state of the Jet LED.
Definition: framedecoder.h:341
bool isSetupModeTriggered() const
Reset request triggered.
void begin(const BusSettings &settings, const std::map< int, LedSettings > &leds, unsigned long waitingTimeMs=BeginWaitingTimeMs)
virtual ~FrameDecoder()
Destructor.
void end()
Close the FrameDecoder.
uint8_t isLedOn(int key) const
Last state received from an LED.
uint16_t rawStatus() const
Last state of the LEDs received.
uint32_t frameCounter() const
Number of frames received from startup.
uint8_t isFilterOn() const
Last state of the Filter LED.
Definition: framedecoder.h:323
const std::map< int, LedSettings > ledSettings() const
Leds settings provides at the instantiation.
uint8_t isHeatReached() const
Last state of the HeatReached LED.
Definition: framedecoder.h:335
uint8_t isSanitizerOn() const
Last state of the Sanitizer LED.
Definition: framedecoder.h:347
uint16_t desiredTemp() const
Water temperature desired in °C.
uint8_t waitUntilDisplayBlink(unsigned long MaxWaitingTimeMs=5000) const
Wait until the display blink.
uint16_t sanitizerTime() const
Remaining sanitation time.
bool hasLed(int key) const
Check if the hardware configuration has the LED.
uint16_t waitForWaterTemp(unsigned long MaxWaitingTimeMs=25000) const
Wait until the water temperature could be read.
SpaIot name space.
Definition: bussettings.h:21
@ Jet
Jet Led or Button.
Definition: global.h:30
@ Filter
Filter Led or Button.
Definition: global.h:28
@ Sanitizer
Sanitizer Led or Button.
Definition: global.h:31
@ HeatReached
Heat Reached Led (Green)
Definition: global.h:33
@ Bubble
Bubble Led or Button.
Definition: global.h:29
@ Power
Power Led or Button.
Definition: global.h:27
const unsigned long BeginWaitingTimeMs
begin() waiting time in milliseconds
Definition: global.h:63
const unsigned long SetupTrigUnitChangeStepMaxMs
Maximum time separating successive actions on the unit change button to trigger reset request.
Definition: global.h:61
const unsigned long ResetErrorTimeMs
Time after which an error can be erased.
Definition: global.h:64