Adeon
Loading...
Searching...
No Matches
AdeonGSM.h
Go to the documentation of this file.
1
25#ifndef ADEON_GSM_H
26#define ADEON_GSM_H
27
28#include <Arduino.h>
29#include "utility/MD5.h"
30#include "utility/list.h"
31
32#define ADEON_ADMIN 1
33#define ADEON_USER 2
34#define ADEON_HOST 3
35
36constexpr static auto SHORT_HASH_LENGTH = 5;
37constexpr static auto MSG_BUFFER_LENGTH = 140; /* - Maximum number of characters in one SMS is 160
38 - Each character takes 7 bits of memory
39 (7/8 of one byte)
40 - Min. buffer size should be 160*7/8 = 140 bytes
41 */
42
43class Adeon {
44 public:
45 void addUser(const char* phoneNum, uint16_t userGroup = 1);
46 void deleteUser(const char* phoneNum);
47 void deleteList();
48 char* editUserPhone(const char* actualPhoneNum, const char* newPhoneNum);
49 void editUserRights(const char* phoneNum, uint16_t userGroup = 1);
50 bool isUserInAdeon(const char* phoneNum);
51 uint8_t getNumOfUsers();
52 uint16_t getUserRightsLevel(const char* phoneNum);
53 void printUsers();
54
55 void addParam(const char* pName, uint16_t val = 1);
56 void addParamWithCallback(void (*callback)(uint16_t), const char* pName, uint16_t val = 1);
57 void setParamAccess(const char* pName, uint8_t access);
58 void deleteParam(const char* pName);
59 char* editParamName(const char* pActualName, const char* pNewName);
60 void editParamValue(const char* pName, uint16_t val = 1);
61 bool isParamInAdeon(const char* pName);
62 uint8_t getNumOfParams();
63 uint16_t getParamValue(const char* pName);
64 void printParams();
65
66 void parseBuf(const char* pMsg, uint8_t userGroup);
67 bool isAdeonReady();
68
69 private:
70 class Parser {
71 public:
72 Parser(char* pMsg);
73 bool isParserReady();
74 bool isMsgValid();
75 bool isNameAvailable();
76 void parse();
77
78 char* getTmpName();
79 uint16_t getValue();
80
81 private:
82 enum class State{
83 READY,
84 INIT,
85 PROCESSING
86 };
87 const char _hashEndSymbol = ':';
88 const char _semicolon = ';';
89 const char _equal = '=';
90 const char _gap = ' ';
91 const char _nullChar = '\0';
92
93 class Hash {
94 public:
95 Hash();
96 bool isHashValid(char* msg, char* hash);
97
98 private:
99 char* _pTmpMsg = nullptr;
100 char _shortHash[SHORT_HASH_LENGTH + 1];
101
102 void makeHashFromStr(char* msg);
103 void makeShortHash(char* str);
104 };
105
106 Hash _pHash = Hash();
107 State parsState = State::READY;
108
109 char _tmpHash[SHORT_HASH_LENGTH + 1]; // Reserve space for \0 character
110 char _subStr[LIST_ITEM_LENGTH];
111 char _pTmpName[LIST_ITEM_LENGTH];
112 uint16_t _tmpValue;
113 char* _pMsg = nullptr;
114 uint8_t _numberOfNames = 0; // get by getNumberOfParams(char* pMsg) function
115 uint8_t _processedNames = 0;
116
117 bool isHashParsingValid();
118 uint8_t getNumberOfNames();
119 char* parseName();
120 void parseValue(char* pActualParam);
121 char* getCharsUntilEndSym(char* pActualParam, char endSymbol);
122 char* positionOfStr(char* pStr, uint8_t pos, char startSymbol);
123 };
124
125 class UserList : public ItemList{
126 };
127
128 class ParameterList : public ItemList{
129 public:
130 void addItemWithCallback(const char* pId, uint16_t val, void (*callback)(uint16_t));
131 void setParamAccess(Item* pItem, uint8_t access);
132 uint8_t getParamAccess(Item* pItem);
133 };
134
135 uint8_t getParamAccess(const char* pName);
136
137 char _msg[MSG_BUFFER_LENGTH];
138 bool _ready = true; // indicator, that Adeon is ready to process new data
139
140 Parser parser = Parser(_msg);
141 UserList userList;
142 ParameterList paramList;
143};
144
145#endif // ADEON_GSM_H
Definition: AdeonGSM.h:43
uint16_t getUserRightsLevel(const char *phoneNum)
Get user rights value.
Definition: AdeonGSM.cpp:89
uint8_t getNumOfUsers()
Get number of users in a list.
Definition: AdeonGSM.cpp:80
void addParam(const char *pName, uint16_t val=1)
Add parameter into Adeon.
Definition: AdeonGSM.cpp:108
void addUser(const char *phoneNum, uint16_t userGroup=1)
Add user into Adeon.
Definition: AdeonGSM.cpp:30
void deleteParam(const char *pName)
Delete parameter from Adeon.
Definition: AdeonGSM.cpp:136
void editParamValue(const char *pName, uint16_t val=1)
Edit parameter value.
Definition: AdeonGSM.cpp:154
char * editParamName(const char *pActualName, const char *pNewName)
Edit parameter name.
Definition: AdeonGSM.cpp:145
void addParamWithCallback(void(*callback)(uint16_t), const char *pName, uint16_t val=1)
Add parameter into Adeon.
Definition: AdeonGSM.cpp:118
char * editUserPhone(const char *actualPhoneNum, const char *newPhoneNum)
Edit user telephone number.
Definition: AdeonGSM.cpp:54
void setParamAccess(const char *pName, uint8_t access)
Set parameter access rights.
Definition: AdeonGSM.cpp:128
bool isUserInAdeon(const char *phoneNum)
Check if user is in Adeon.
Definition: AdeonGSM.cpp:72
void deleteUser(const char *phoneNum)
Delete user from Adeon.
Definition: AdeonGSM.cpp:38
void printParams()
Print content of the parameter list.
Definition: AdeonGSM.cpp:190
void printUsers()
Print content of the user list.
Definition: AdeonGSM.cpp:99
void parseBuf(const char *pMsg, uint8_t userGroup)
Call parsing process of a message.
Definition: AdeonGSM.cpp:204
bool isAdeonReady()
Check if Adeon is ready for incoming message.
Definition: AdeonGSM.cpp:230
bool isParamInAdeon(const char *pName)
Check if parameter is in Adeon.
Definition: AdeonGSM.cpp:163
uint16_t getParamValue(const char *pName)
Get parameter value.
Definition: AdeonGSM.cpp:180
void deleteList()
Delete whole Adeon list.
Definition: AdeonGSM.cpp:45
void editUserRights(const char *phoneNum, uint16_t userGroup=1)
Edit user rights.
Definition: AdeonGSM.cpp:63
uint8_t getNumOfParams()
Get number of parameters in a list.
Definition: AdeonGSM.cpp:171
Definition: list.h:32
Library for linked list.