SpaIot Library
defines_p.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
16/*
17 * Frame constant / Serial frame on 16bits.
18 *
19 * POWER = P
20 * FILTER = F
21 * HEATER = H
22 * HEATER_RED = HR
23 * HEATER_GREEN = HG
24 * BUBBLE = B
25 * JET = J
26 * SANITIZER = S
27 * DOWN = D
28 * UP = U
29 * FC = C
30 * BUZZER = BZ (0 for buzz)
31 *
32 * |-------------------------------------------------------------------------------|
33 * | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
34 * BIT | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
35 *
36 * DISPLAY | DP | 0 | A | B | S3 | D | C | BZ | E | S1 | S2 | G | F | S4 | 0 | 0 |
37 *
38 * LED_SSP | X | 1 | X | F | X | B | HG | BZ | HR | X | X | X | X | X | X | P |
39 *
40 * LED_SJB | X | 1 | S | F | X | J | HG | BZ | HR | X | X | X | X | X | B | P |
41 *
42 * BUT_SSP | H | 0 | C | U | 0 | P | X | BZ | D | 0 | 0 | X | B | 0 | F | X |
43 *
44 * BUT_SJB | H | 0 | *C | U | 0 | P | D | BZ | F | 0 | 0 | X | *B | 0 | *J | S |
45 * * hypothesis that must be verified !
46 *
47 *
48 * S1 | S2 | S3 | S4 => 7-segment display
49 * A
50 * DP ° -----
51 * | |
52 * F | | B
53 * | |
54 * --G--
55 * | |
56 * E | | C
57 * | |
58 * -----
59 * D
60 *
61 *
62 *
63 */
64#define FRAME_BITS_SIZE 16
65
66#define FRAME_CUE 0x0100
67#define FRAME_BP 0xB58A
68
69#define FRAME_DISPLAY_1 0x0040
70#define FRAME_DISPLAY_2 0x0020
71#define FRAME_DISPLAY_3 0x0800
72#define FRAME_DISPLAY_4 0x0004
73#define FRAME_DISPLAY (FRAME_DISPLAY_1 | FRAME_DISPLAY_2 | FRAME_DISPLAY_3 | FRAME_DISPLAY_4)
74
75#define FRAME_DISPLAY_FRAGMENT_A 0x2000
76#define FRAME_DISPLAY_FRAGMENT_B 0x1000
77#define FRAME_DISPLAY_FRAGMENT_C 0x0200
78#define FRAME_DISPLAY_FRAGMENT_D 0x0400
79#define FRAME_DISPLAY_FRAGMENT_E 0x0080
80#define FRAME_DISPLAY_FRAGMENT_F 0x0008
81#define FRAME_DISPLAY_FRAGMENT_G 0x0010
82#define FRAME_DISPLAY_FRAGMENT_DP 0x8000
83
84#define FRAME_DISPLAY_DIGIT_MASK (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_C|FRAME_DISPLAY_FRAGMENT_D|FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_G)
85
86#define FRAME_DISPLAY_OFF 0x0000
87#define FRAME_DISPLAY_DIGIT0 (FRAME_DISPLAY_FRAGMENT_A | FRAME_DISPLAY_FRAGMENT_B | FRAME_DISPLAY_FRAGMENT_C | FRAME_DISPLAY_FRAGMENT_D | FRAME_DISPLAY_FRAGMENT_E | FRAME_DISPLAY_FRAGMENT_F)
88#define FRAME_DISPLAY_DIGIT1 (FRAME_DISPLAY_FRAGMENT_B | FRAME_DISPLAY_FRAGMENT_C)
89#define FRAME_DISPLAY_DIGIT2 (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_G|FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_D)
90#define FRAME_DISPLAY_DIGIT3 (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_C|FRAME_DISPLAY_FRAGMENT_D|FRAME_DISPLAY_FRAGMENT_G)
91#define FRAME_DISPLAY_DIGIT4 (FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_G|FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_C)
92#define FRAME_DISPLAY_DIGIT5 (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_G|FRAME_DISPLAY_FRAGMENT_C|FRAME_DISPLAY_FRAGMENT_D)
93#define FRAME_DISPLAY_DIGIT6 (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_D|FRAME_DISPLAY_FRAGMENT_C|FRAME_DISPLAY_FRAGMENT_G)
94#define FRAME_DISPLAY_DIGIT7 (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_C)
95#define FRAME_DISPLAY_DIGIT8 (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_C|FRAME_DISPLAY_FRAGMENT_D|FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_G)
96#define FRAME_DISPLAY_DIGIT9 (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_C|FRAME_DISPLAY_FRAGMENT_D|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_G)
97#define FRAME_DISPLAY_DIGITA (FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_C|FRAME_DISPLAY_FRAGMENT_G)
98#define FRAME_DISPLAY_DIGITC (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_D)
99#define FRAME_DISPLAY_DIGITE (FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_D|FRAME_DISPLAY_FRAGMENT_G)
100#define FRAME_DISPLAY_DIGITF (FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_A|FRAME_DISPLAY_FRAGMENT_G)
101#define FRAME_DISPLAY_DIGITH (FRAME_DISPLAY_FRAGMENT_B|FRAME_DISPLAY_FRAGMENT_C|FRAME_DISPLAY_FRAGMENT_E|FRAME_DISPLAY_FRAGMENT_F|FRAME_DISPLAY_FRAGMENT_G)
102
103#define DIGITOFF_VALUE 0xB
104#define DIGITH_VALUE 0xD
105
106#define FRAME_LED 0x4000
107
108#define FRAME_BEEP_BIT 0x0100
109
110#define DISPLAY_DIGIT1 0x0008
111#define DISPLAY_DIGIT2 0x0004
112#define DISPLAY_DIGIT3 0x0002
113#define DISPLAY_DIGIT4 0x0001
114#define DISPLAY_ALLDIGITS DISPLAY_DIGIT1 | DISPLAY_DIGIT2 | DISPLAY_DIGIT3 | DISPLAY_DIGIT4
115
116#define DISPLAY_OFF 0xBBBB
117#define DISPLAY_UNIT_F 0x000F
118#define DISPLAY_UNIT_C 0x000C
119
120#define DIGITS2UINT(v) ((((v >> 12) & 0x000F)*100) + (((v >> 8) & 0x000F)*10) + ((v >> 4) & 0x000F))
121#define DISPLAY_UNIT(v) (v & 0x000F)
122#define NO_ERROR_ON_DISPLAY(v) ((v & 0xF000) != 0xE000)
123#define DISPLAY2ERROR(v) ((v >> 4) & 0x0FFF)
124#define TEMP_ON_DISPLAY(v) ((DISPLAY_UNIT(v) == DISPLAY_UNIT_C) || (DISPLAY_UNIT(v) == DISPLAY_UNIT_F))
125#define TIMING_ON_DISPLAY(v) (DISPLAY_UNIT(v) == DIGITH_VALUE)
126
127#define INIT_STABLE_VALUE_COUNTER 10
128#define INIT_STABLE_WATER_COUNTER 500
129
130#define BLINK_DESIRED_FRAME_MAX 600
131#define BLINK_RESET_FRAME_MIN 1300
132
133#define UNITCHANGE_FRAME_COUNTER_MAX 2500
134
135#define ResetErrorFrameCounter 10000
136#define MIN_SANITIZER_FRAME_COUNTER 1500
137
138#define PUSH_COUNTER_MAX 25