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"
23 
24 typedef char cmdstr[9];
25 
26 const cmdstr commands_P[] PROGMEM =
27 {
28 "","ON","OFF","REST","TOGGLE","HALT","XON","XOFF","INCREASE","DECREASE",
29 "HEAT","COOL","AUTO","FAN_ONLY","DRY","STOP","HIGH","MEDIUM","LOW",
30 "TRUE","FALSE","ENABLED","DISABLED","RGB","HSV"
31 };
32 #define commandsNum sizeof(commands_P)/sizeof(cmdstr)
33 
34 #define CMD_ON 1
35 #define CMD_OFF 2
36 #define CMD_RESTORE 3 //on only if was turned off by CMD_HALT
37 #define CMD_TOGGLE 4
38 #define CMD_HALT 5 //just Off
39 #define CMD_XON 6 //just on
40 #define CMD_XOFF 7 //off only if was previously turned on by CMD_XON
41 #define CMD_UP 8 //increase
42 #define CMD_DN 9 //decrease
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 //AC fan leve
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 //#define CMD_CURTEMP 0xf
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 //#define CMD_RGB -3
66 //#define CMD_HSV -4
67 
68 #define SEND_COMMAND 0x100
69 #define SEND_PARAMETERS 0x200
70 #define SEND_RETRY 0x400
71 #define SEND_DEFFERED 0x800
72 #define ACTION_NEEDED 0x1000
73 #define ACTION_IN_PROCESS 0x2000
74 
75 
76 int txt2cmd (char * payload);
77 
78 /*
79 enum itemStoreType {
80 ST_VOID = 0,
81 ST_PERCENTS = 1,
82 ST_TENS = 2,
83 ST_HSV = 3,
84 ST_FLOAT_CELSIUS= 4,
85 ST_FLOAT_FARENHEIT= 5,
86 ST_RGB = 6,
87 ST_RGBW = 7,
88 ST_PERCENTS255 = 8,
89 ST_HSV255 = 9,
90 ST_INT32 = 10,
91 ST_UINT32 = 11,
92 ST_STRING = 12,
93 ST_FLOAT = 13//,
94 //ST_COMMAND = 15
95 };
96 */
97 
98 #define ST_VOID 0
99 #define ST_PERCENTS 1
100 #define ST_TENS 2
101 #define ST_HSV 3
102 #define ST_HS 4
103 #define ST_FLOAT_CELSIUS 5
104 #define ST_FLOAT_FARENHEIT 6
105 #define ST_RGB 7
106 #define ST_RGBW 8
107 #define ST_PERCENTS255 9
108 #define ST_HSV255 10
109 #define ST_INT32 11
110 #define ST_UINT32 12
111 #define ST_STRING 13
112 #define ST_FLOAT 14
113 
114 
115 #pragma pack(push, 1)
116 
117 typedef union
118 {
119  long int aslong;
120  int32_t asInt32;
121  uint32_t asUint32;
122  struct
123  {
124  uint8_t cmdCode;
125  union {
126  uint8_t cmdFlag;
127 /*
128  struct
129  { uint8_t suffixCode:4;
130  uint8_t itemArgType:4;
131  };
132  */
133  };
134  struct
135  { uint8_t suffixCode:4;
136  uint8_t itemArgType:4;
137  };
138  // uint8_t cmdEffect;
139  uint8_t cmdParam;
140  };
141 } itemCmdStore;
142 
143 typedef union
144 {
145  long int aslong;
146  int32_t asInt32;
147  uint32_t asUint32;
148  char* asString;
149  float asfloat;
150 
151  struct
152  { uint8_t v;
153  uint8_t s;
154  uint16_t h:9;
155  uint16_t colorTemp:7;
156  };
157  struct
158  { int8_t signed_v;
159  int8_t signed_s;
160  int16_t signed_h:9;
161  int16_t signed_colorTemp:7;
162  };
163  struct
164  {
165  uint8_t r;
166  uint8_t g;
167  uint8_t b;
168  uint8_t w;
169  };
170 } itemArgStore;
171 
172 class Item;
173 class itemCmd
174 {
175 public:
178 
179  itemCmd(uint8_t _type=ST_VOID, uint8_t _code=CMD_VOID);
180  itemCmd(float val);
181  itemCmd assignFrom(itemCmd from);
182 
183  bool loadItem(Item * item, bool includeCommand=false );
184  bool saveItem(Item * item, bool includeCommand=false);
185 
186  itemCmd Int(int32_t i);
187  itemCmd Int(uint32_t i);
188  itemCmd Cmd(uint8_t i);
189  itemCmd HSV(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  uint16_t getH();
196  uint16_t getS();
197  itemCmd setArgType(uint8_t);
198  itemCmd Percents(int i);
199  itemCmd Percents255(int i);
200 
201  uint8_t getSuffix();
202  itemCmd setSuffix(uint8_t suffix);
203 
204  bool incrementPercents(int16_t);
205  bool incrementH(int16_t);
206  bool incrementS(int16_t);
207 
208  long int getInt();
209  short getPercents(bool inverse=false);
210  short getPercents255(bool inverse=false);
211  uint8_t getCmd();
212  uint8_t getArgType();
213  uint8_t getCmdParam();
214  char * toString(char * Buffer, int bufLen, int sendFlags = SEND_COMMAND | SEND_PARAMETERS );
215 
216  bool isCommand();
217  bool isValue();
218  bool isColor();
219 
221  itemCmd setChanType(short chanType);
222  void debugOut();
223  };
224 
225 #pragma pack(pop)
itemArgStore::asfloat
float asfloat
Definition: itemCmd.h:149
itemCmd::assignFrom
itemCmd assignFrom(itemCmd from)
Definition: itemCmd.cpp:224
itemCmd::incrementPercents
bool incrementPercents(int16_t)
Definition: itemCmd.cpp:161
itemArgStore::s
uint8_t s
Definition: itemCmd.h:153
itemCmd::Percents255
itemCmd Percents255(int i)
Definition: itemCmd.cpp:499
itemCmd::toString
char * toString(char *Buffer, int bufLen, int sendFlags=SEND_COMMAND|SEND_PARAMETERS)
Definition: itemCmd.cpp:633
itemArgStore
Definition: itemCmd.h:144
itemCmd
Definition: itemCmd.h:174
itemCmdStore::suffixCode
uint8_t suffixCode
Definition: itemCmd.h:135
itemCmdStore::aslong
long int aslong
Definition: itemCmd.h:119
ST_VOID
#define ST_VOID
Definition: itemCmd.h:98
itemCmd::RGBW
itemCmd RGBW(uint8_t r, uint8_t g, uint8_t b, uint8_t w)
Definition: itemCmd.cpp:561
itemCmd::itemCmd
itemCmd(uint8_t _type=ST_VOID, uint8_t _code=CMD_VOID)
Definition: itemCmd.cpp:40
itemCmd::param
itemArgStore param
Definition: itemCmd.h:177
itemArgStore::asString
char * asString
Definition: itemCmd.h:148
itemCmd::Cmd
itemCmd Cmd(uint8_t i)
Definition: itemCmd.cpp:580
CMD_VOID
#define CMD_VOID
Definition: itemCmd.h:62
itemCmdStore::itemArgType
uint8_t itemArgType
Definition: itemCmd.h:136
itemArgStore::aslong
long int aslong
Definition: itemCmd.h:145
itemCmd::setDefault
itemCmd setDefault()
Definition: itemCmd.cpp:84
itemArgStore::signed_colorTemp
int16_t signed_colorTemp
Definition: itemCmd.h:161
itemCmd::setS
bool setS(uint8_t)
Definition: itemCmd.cpp:128
itemArgStore::signed_h
int16_t signed_h
Definition: itemCmd.h:160
itemCmd::getS
uint16_t getS()
Definition: itemCmd.cpp:156
itemArgStore::h
uint16_t h
Definition: itemCmd.h:154
itemCmd::setChanType
itemCmd setChanType(short chanType)
Definition: itemCmd.cpp:58
itemCmdStore::asUint32
uint32_t asUint32
Definition: itemCmd.h:121
itemArgStore::asUint32
uint32_t asUint32
Definition: itemCmd.h:147
itemCmd::Percents
itemCmd Percents(int i)
Definition: itemCmd.cpp:476
b
#define b
Definition: item.cpp:1097
itemCmd::isValue
bool isValue()
Definition: itemCmd.cpp:383
itemCmd::saveItem
bool saveItem(Item *item, bool includeCommand=false)
Definition: itemCmd.cpp:617
itemCmd::isColor
bool isColor()
Definition: itemCmd.cpp:388
itemCmd::setH
bool setH(uint16_t)
Definition: itemCmd.cpp:107
itemCmd::loadItem
bool loadItem(Item *item, bool includeCommand=false)
Definition: itemCmd.cpp:599
itemCmd::getCmdParam
uint8_t getCmdParam()
Definition: itemCmd.cpp:470
itemCmd::debugOut
void debugOut()
Definition: itemCmd.cpp:695
itemArgStore::signed_s
int8_t signed_s
Definition: itemCmd.h:159
itemCmd::setArgType
itemCmd setArgType(uint8_t)
Definition: itemCmd.cpp:464
itemCmd::setSuffix
itemCmd setSuffix(uint8_t suffix)
Definition: itemCmd.cpp:593
itemCmd::getPercents255
short getPercents255(bool inverse=false)
Definition: itemCmd.cpp:436
cmdstr
char cmdstr[9]
#include "item.h"
Definition: itemCmd.h:24
itemArgStore::signed_v
int8_t signed_v
Definition: itemCmd.h:158
itemArgStore::w
uint8_t w
Definition: itemCmd.h:168
itemCmd::cmd
itemCmdStore cmd
Definition: itemCmd.h:176
itemArgStore::asInt32
int32_t asInt32
Definition: itemCmd.h:146
itemCmd::getCmd
uint8_t getCmd()
Definition: itemCmd.cpp:454
itemArgStore::r
uint8_t r
Definition: itemCmd.h:165
itemCmd::getInt
long int getInt()
Definition: itemCmd.cpp:394
itemCmd::isCommand
bool isCommand()
Definition: itemCmd.cpp:378
itemArgStore::colorTemp
uint16_t colorTemp
Definition: itemCmd.h:155
itemArgStore::v
uint8_t v
Definition: itemCmd.h:152
itemArgStore::g
uint8_t g
Definition: itemCmd.h:166
SEND_COMMAND
#define SEND_COMMAND
Definition: itemCmd.h:68
txt2cmd
int txt2cmd(char *payload)
Definition: itemCmd.cpp:13
SEND_PARAMETERS
#define SEND_PARAMETERS
Definition: itemCmd.h:69
Item
Definition: item.h:92
itemCmd::RGB
itemCmd RGB(uint8_t r, uint8_t g, uint8_t b)
Definition: itemCmd.cpp:551
itemCmd::getH
uint16_t getH()
Definition: itemCmd.cpp:151
PROGMEM
const cmdstr commands_P[] PROGMEM
Definition: itemCmd.h:26
itemCmdStore::cmdCode
uint8_t cmdCode
Definition: itemCmd.h:124
itemCmdStore::cmdParam
uint8_t cmdParam
Definition: itemCmd.h:139
itemCmd::Int
itemCmd Int(int32_t i)
Definition: itemCmd.cpp:522
itemCmd::getSuffix
uint8_t getSuffix()
Definition: itemCmd.cpp:588
itemCmd::getArgType
uint8_t getArgType()
Definition: itemCmd.cpp:459
itemCmd::getPercents
short getPercents(bool inverse=false)
Definition: itemCmd.cpp:418
itemCmd::incrementS
bool incrementS(int16_t)
Definition: itemCmd.cpp:200
itemCmdStore
Definition: itemCmd.h:118
itemCmdStore::cmdFlag
uint8_t cmdFlag
Definition: itemCmd.h:126
itemCmdStore::asInt32
int32_t asInt32
Definition: itemCmd.h:120
itemCmd::HS
itemCmd HS(uint16_t h, uint8_t s)
Definition: itemCmd.cpp:541
itemCmd::incrementH
bool incrementH(int16_t)
Definition: itemCmd.cpp:183
itemCmd::HSV
itemCmd HSV(uint16_t h, uint8_t s, uint8_t v)
Definition: itemCmd.cpp:531
itemArgStore::b
uint8_t b
Definition: itemCmd.h:167