LightHub
itemCmd.h
Go to the documentation of this file.
1 /* Copyright © 2017-2020 Andrey Klimov. All rights reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7  http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 
15 Homepage: http://lazyhome.ru
16 GIT: https://github.com/anklimov/lighthub
17 e-mail anklimov@gmail.com
18 
19 */
20 #pragma once
21 #include "Arduino.h"
22 
23 typedef char cmdstr[9];
24 
25 const cmdstr commands_P[] PROGMEM =
26 {
27 "","ON","OFF","REST","TOGGLE","HALT","XON","XOFF","INCREASE","DECREASE",
28 "HEAT","COOL","AUTO","FAN_ONLY","DRY","STOP","HIGH","MEDIUM","LOW",
29 "TRUE","FALSE","ENABLED","DISABLED","RGB","HSV"
30 };
31 #define commandsNum sizeof(commands_P)/sizeof(cmdstr)
32 
34 #define CMD_ON 1
35 #define CMD_OFF 2
36 #define CMD_RESTORE 3
37 #define CMD_TOGGLE 4
38 #define CMD_HALT 5
39 #define CMD_XON 6
40 #define CMD_XOFF 7
41 #define CMD_UP 8
42 #define CMD_DN 9
43 #define CMD_HEAT 0xa
44 #define CMD_COOL 0xb
45 #define CMD_AUTO 0xc
46 #define CMD_FAN 0xd
47 #define CMD_DRY 0xe
48 #define CMD_STOP 0xf
49 #define CMD_HIGH 0x10
50 #define CMD_MED 0x11
51 #define CMD_LOW 0x12
52 #define CMD_ENABLED 0x13
53 #define CMD_DISABLED 0x14
54 #define CMD_TRUE 0x15
55 #define CMD_FALSE 0x16
56 #define CMD_RGB 0x17
57 #define CMD_HSV 0x18
58 
59 #define CMD_MASK 0xff
60 #define FLAG_MASK 0xff00
61 
62 #define CMD_VOID 0
63 #define CMD_UNKNOWN -1
64 #define CMD_JSON -2
65 
66 #define SEND_COMMAND 0x100
67 #define SEND_PARAMETERS 0x200
68 #define SEND_RETRY 0x400
69 #define SEND_DEFFERED 0x800
70 #define ACTION_NEEDED 0x1000
71 #define ACTION_IN_PROCESS 0x2000
72 
73 
74 int txt2cmd (char * payload);
75 
76 /*
77 enum itemStoreType {
78 ST_VOID = 0,
79 ST_PERCENTS = 1,
80 ST_TENS = 2,
81 ST_HSV = 3,
82 ST_FLOAT_CELSIUS= 4,
83 ST_FLOAT_FARENHEIT= 5,
84 ST_RGB = 6,
85 ST_RGBW = 7,
86 ST_PERCENTS255 = 8,
87 ST_HSV255 = 9,
88 ST_INT32 = 10,
89 ST_UINT32 = 11,
90 ST_STRING = 12,
91 ST_FLOAT = 13//,
92 //ST_COMMAND = 15
93 };
94 */
95 
97 #define ST_VOID 0
98 #define ST_PERCENTS 1
99 #define ST_TENS 2
100 #define ST_HSV 3
101 #define ST_HS 4
102 #define ST_FLOAT_CELSIUS 5
103 #define ST_FLOAT_FARENHEIT 6
104 #define ST_RGB 7
105 #define ST_RGBW 8
106 #define ST_PERCENTS255 9
107 #define ST_HSV255 10
108 #define ST_INT32 11
109 #define ST_UINT32 12
110 #define ST_STRING 13
111 #define ST_FLOAT 14
112 
113 
114 #pragma pack(push, 1)
115 
116 typedef union
117 {
118  long int aslong;
119  int32_t asInt32;
120  uint32_t asUint32;
121  struct
122  {
123  uint8_t cmdCode;
124  union {
125  uint8_t cmdFlag;
126 /*
127  struct
128  { uint8_t suffixCode:4;
129  uint8_t itemArgType:4;
130  };
131  */
132  };
133  struct
134  { uint8_t suffixCode:4;
135  uint8_t itemArgType:4;
136  };
137  // uint8_t cmdEffect;
138  uint8_t cmdParam;
139  };
140 } itemCmdStore;
141 
142 typedef union
143 {
144  long int aslong;
145  int32_t asInt32;
146  uint32_t asUint32;
147  char* asString;
148  float asfloat;
149 
150  struct
151  { uint8_t v;
152  uint8_t s;
153  uint16_t h:9;
154  uint16_t colorTemp:7;
155  };
156  struct
157  { int8_t signed_v;
158  int8_t signed_s;
159  int16_t signed_h:9;
160  int16_t signed_colorTemp:7;
161  };
162  struct //Should be NeoPixel packed Color compatible
163  {
164  uint8_t b;
165  uint8_t g;
166  uint8_t r;
167  uint8_t w;
168  };
169 } itemArgStore;
170 
171 class Item;
172 class itemCmd
173 {
174 public:
177 
178  itemCmd(uint8_t _type=ST_VOID, uint8_t _code=CMD_VOID);
179  itemCmd(float val);
180  itemCmd assignFrom(itemCmd from);
181 
182  bool loadItem(Item * item, bool includeCommand=false );
183  bool saveItem(Item * item, bool includeCommand=false);
184 
185  itemCmd Int(int32_t i);
186  itemCmd Int(uint32_t i);
187  itemCmd Cmd(uint8_t i);
188  itemCmd HSV(uint16_t h, uint8_t s, uint8_t v);
189  itemCmd HSV255(uint16_t h, uint8_t s, uint8_t v);
190  itemCmd HS(uint16_t h, uint8_t s);
191  itemCmd RGB(uint8_t r, uint8_t g, uint8_t b);
192  itemCmd RGBW(uint8_t r, uint8_t g, uint8_t b, uint8_t w);
193  bool setH(uint16_t);
194  bool setS(uint8_t);
195  bool setColorTemp(uint8_t);
196  int8_t getColorTemp();
197  uint16_t getH();
198  uint16_t getS();
199  itemCmd setArgType(uint8_t);
200  itemCmd Percents(int i);
201  itemCmd Percents255(int i);
202 
203  uint8_t getSuffix();
204  itemCmd setSuffix(uint8_t suffix);
205 
206  bool incrementPercents(int16_t);
207  bool incrementH(int16_t);
208  bool incrementS(int16_t);
209 
210  long int getInt();
211  short getPercents(bool inverse=false);
212  short getPercents255(bool inverse=false);
213  uint8_t getCmd();
214  uint8_t getArgType();
215  uint8_t getCmdParam();
216  char * toString(char * Buffer, int bufLen, int sendFlags = SEND_COMMAND | SEND_PARAMETERS );
217 
218  bool isCommand();
219  bool isValue();
220  bool isColor();
221 
223  itemCmd setChanType(short chanType);
224  void debugOut();
225  };
226 
227 #pragma pack(pop)
itemArgStore::asfloat
float asfloat
Definition: itemCmd.h:148
itemCmd::assignFrom
itemCmd assignFrom(itemCmd from)
Definition: itemCmd.cpp:272
itemCmd::incrementPercents
bool incrementPercents(int16_t)
Definition: itemCmd.cpp:207
itemArgStore::s
uint8_t s
Definition: itemCmd.h:152
itemCmd::Percents255
itemCmd Percents255(int i)
Definition: itemCmd.cpp:608
itemCmd::toString
char * toString(char *Buffer, int bufLen, int sendFlags=SEND_COMMAND|SEND_PARAMETERS)
Definition: itemCmd.cpp:753
itemArgStore
Definition: itemCmd.h:143
itemCmd
Definition: itemCmd.h:173
itemCmdStore::suffixCode
uint8_t suffixCode
Definition: itemCmd.h:134
itemCmdStore::aslong
long int aslong
Definition: itemCmd.h:118
ST_VOID
#define ST_VOID
Definition of all possible types of argument, contained in class.
Definition: itemCmd.h:97
itemCmd::RGBW
itemCmd RGBW(uint8_t r, uint8_t g, uint8_t b, uint8_t w)
Definition: itemCmd.cpp:681
itemCmd::itemCmd
itemCmd(uint8_t _type=ST_VOID, uint8_t _code=CMD_VOID)
Constructor with definition of type and command.
Definition: itemCmd.cpp:42
itemCmd::param
itemArgStore param
Definition: itemCmd.h:176
itemArgStore::asString
char * asString
Definition: itemCmd.h:147
itemCmd::Cmd
itemCmd Cmd(uint8_t i)
Definition: itemCmd.cpp:700
itemCmd::HSV255
itemCmd HSV255(uint16_t h, uint8_t s, uint8_t v)
Definition: itemCmd.cpp:650
CMD_VOID
#define CMD_VOID
Definition: itemCmd.h:62
itemCmdStore::itemArgType
uint8_t itemArgType
Definition: itemCmd.h:135
itemCmd::getColorTemp
int8_t getColorTemp()
Definition: itemCmd.cpp:191
itemArgStore::aslong
long int aslong
Definition: itemCmd.h:144
itemCmd::setDefault
itemCmd setDefault()
Definition: itemCmd.cpp:92
itemArgStore::signed_colorTemp
int16_t signed_colorTemp
Definition: itemCmd.h:160
itemCmd::setS
bool setS(uint8_t)
Definition: itemCmd.cpp:136
itemArgStore::signed_h
int16_t signed_h
Definition: itemCmd.h:159
itemCmd::getS
uint16_t getS()
Definition: itemCmd.cpp:202
itemArgStore::h
uint16_t h
Definition: itemCmd.h:153
itemCmd::setChanType
itemCmd setChanType(short chanType)
Definition: itemCmd.cpp:66
itemCmdStore::asUint32
uint32_t asUint32
Definition: itemCmd.h:120
itemArgStore::asUint32
uint32_t asUint32
Definition: itemCmd.h:146
itemCmd::Percents
itemCmd Percents(int i)
Definition: itemCmd.cpp:585
b
#define b
Definition: item.cpp:1131
itemCmd::isValue
bool isValue()
Definition: itemCmd.cpp:488
itemCmd::saveItem
bool saveItem(Item *item, bool includeCommand=false)
Definition: itemCmd.cpp:737
itemCmd::isColor
bool isColor()
Definition: itemCmd.cpp:493
itemCmd::setH
bool setH(uint16_t)
Definition: itemCmd.cpp:115
itemCmd::loadItem
bool loadItem(Item *item, bool includeCommand=false)
Definition: itemCmd.cpp:719
itemCmd::getCmdParam
uint8_t getCmdParam()
Definition: itemCmd.cpp:579
itemCmd::debugOut
void debugOut()
Definition: itemCmd.cpp:820
itemArgStore::signed_s
int8_t signed_s
Definition: itemCmd.h:158
itemCmd::setArgType
itemCmd setArgType(uint8_t)
Definition: itemCmd.cpp:573
itemCmd::setSuffix
itemCmd setSuffix(uint8_t suffix)
Definition: itemCmd.cpp:713
itemCmd::getPercents255
short getPercents255(bool inverse=false)
Definition: itemCmd.cpp:545
cmdstr
char cmdstr[9]
Definition: itemCmd.h:23
itemArgStore::signed_v
int8_t signed_v
Definition: itemCmd.h:157
itemArgStore::w
uint8_t w
Definition: itemCmd.h:167
itemCmd::cmd
itemCmdStore cmd
Definition: itemCmd.h:175
itemArgStore::asInt32
int32_t asInt32
Definition: itemCmd.h:145
itemCmd::getCmd
uint8_t getCmd()
Definition: itemCmd.cpp:563
itemArgStore::r
uint8_t r
Definition: itemCmd.h:166
itemCmd::getInt
long int getInt()
Definition: itemCmd.cpp:499
itemCmd::isCommand
bool isCommand()
Definition: itemCmd.cpp:483
itemArgStore::colorTemp
uint16_t colorTemp
Definition: itemCmd.h:154
itemArgStore::v
uint8_t v
Definition: itemCmd.h:151
itemArgStore::g
uint8_t g
Definition: itemCmd.h:165
SEND_COMMAND
#define SEND_COMMAND
Definition: itemCmd.h:66
txt2cmd
int txt2cmd(char *payload)
Definition: itemCmd.cpp:14
SEND_PARAMETERS
#define SEND_PARAMETERS
Definition: itemCmd.h:67
Item
Definition: item.h:93
itemCmd::RGB
itemCmd RGB(uint8_t r, uint8_t g, uint8_t b)
Definition: itemCmd.cpp:671
itemCmd::getH
uint16_t getH()
Definition: itemCmd.cpp:197
PROGMEM
const cmdstr commands_P[] PROGMEM
Definition: itemCmd.h:25
itemCmdStore::cmdCode
uint8_t cmdCode
Definition: itemCmd.h:123
itemCmdStore::cmdParam
uint8_t cmdParam
Definition: itemCmd.h:138
itemCmd::Int
itemCmd Int(int32_t i)
Definition: itemCmd.cpp:631
itemCmd::getSuffix
uint8_t getSuffix()
Definition: itemCmd.cpp:708
itemCmd::getArgType
uint8_t getArgType()
Definition: itemCmd.cpp:568
itemCmd::getPercents
short getPercents(bool inverse=false)
Definition: itemCmd.cpp:527
itemCmd::incrementS
bool incrementS(int16_t)
Definition: itemCmd.cpp:246
itemCmdStore
Definition: itemCmd.h:117
itemCmdStore::cmdFlag
uint8_t cmdFlag
Definition: itemCmd.h:125
itemCmd::setColorTemp
bool setColorTemp(uint8_t)
Definition: itemCmd.cpp:165
itemCmdStore::asInt32
int32_t asInt32
Definition: itemCmd.h:119
itemCmd::HS
itemCmd HS(uint16_t h, uint8_t s)
Definition: itemCmd.cpp:661
itemCmd::incrementH
bool incrementH(int16_t)
Definition: itemCmd.cpp:229
itemCmd::HSV
itemCmd HSV(uint16_t h, uint8_t s, uint8_t v)
Definition: itemCmd.cpp:640
itemArgStore::b
uint8_t b
Definition: itemCmd.h:164