OpenZWave Library 1.7.0
Loading...
Searching...
No Matches
Msg.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2//
3// Msg.h
4//
5// Represents a Z-Wave message
6//
7// Copyright (c) 2010 Mal Lansell <openzwave@lansell.org>
8//
9// SOFTWARE NOTICE AND LICENSE
10//
11// This file is part of OpenZWave.
12//
13// OpenZWave is free software: you can redistribute it and/or modify
14// it under the terms of the GNU Lesser General Public License as published
15// by the Free Software Foundation, either version 3 of the License,
16// or (at your option) any later version.
17//
18// OpenZWave is distributed in the hope that it will be useful,
19// but WITHOUT ANY WARRANTY; without even the implied warranty of
20// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21// GNU Lesser General Public License for more details.
22//
23// You should have received a copy of the GNU Lesser General Public License
24// along with OpenZWave. If not, see <http://www.gnu.org/licenses/>.
25//
26//-----------------------------------------------------------------------------
27
28#ifndef _Msg_H
29#define _Msg_H
30
31#include <cstdio>
32#include <string>
33#include <string.h>
34#include "Defs.h"
35//#include "Driver.h"
36
37namespace OpenZWave
38{
39 class Driver;
40
41 namespace Internal
42 {
43 namespace CC
44 {
45 class CommandClass;
46 }
47
51 {
52 public:
54 {
55 m_MultiChannel = 0x01, // Indicate MultiChannel encapsulation
56 m_MultiInstance = 0x02, // Indicate MultiInstance encapsulation
57 m_Supervision = 0x04, // Indicate Supervision encapsulation
58 };
59
60 Msg(string const& _logtext, uint8 _targetNodeId, uint8 const _msgType, uint8 const _function, bool const _bCallbackRequired, bool const _bReplyRequired = true, uint8 const _expectedReply = 0, uint8 const _expectedCommandClassId = 0);
62 {
63 }
64
65 void SetInstance(OpenZWave::Internal::CC::CommandClass * _cc, uint8 const _instance); // Used to enable wrapping with MultiInstance/MultiChannel during finalize.
66 void SetSupervision(uint8 _session_id);
67
68 void Append(uint8 const _data);
69 void AppendArray(const uint8* const _data, const uint8 _length);
70 void Finalize();
71 void UpdateCallbackId();
72
78 {
79 return m_targetNodeId;
80 }
81
88 {
89 return m_callbackId;
90 }
91
101 {
102 return m_expectedReply;
103 }
104
110 {
111 return m_expectedCommandClassId;
112 }
113
120 {
121 return m_instance;
122 }
123
129// uint8 GetExpectedIndex()const{ return m_expectedIndex; }
134 string GetLogText() const
135 {
136 return m_logText;
137 }
138
140 {
141 return m_encrypted == true ? m_length + 20 + 6 : m_length;
142 }
143 uint8* GetBuffer();
144 string GetAsString();
145
147 {
148 return m_sendAttempts;
149 }
151 {
152 m_sendAttempts = _count;
153 }
154
156 {
157 return m_maxSendAttempts;
158 }
160 {
161 if (_count < MAX_MAX_TRIES)
162 m_maxSendAttempts = _count;
163 }
164
166 {
167 return (m_bFinal && (m_length == 11) && (m_buffer[3] == 0x13) && (m_buffer[6] == 0x84) && (m_buffer[7] == 0x08));
168 }
170 {
171 return (m_bFinal && (m_length == 11) && (m_buffer[3] == 0x13) && (m_buffer[6] == 0x00) && (m_buffer[7] == 0x00));
172 }
173
174 bool operator ==(Msg const& _other) const
175 {
176 if (m_bFinal && _other.m_bFinal)
177 {
178 // Do not include the callback Id or checksum in the comparison.
179 uint8 length = m_length - (m_bCallbackRequired ? 2 : 1);
180 return (!memcmp(m_buffer, _other.m_buffer, length));
181 }
182
183 return false;
184 }
186 {
187 if (m_buffer[3] == 0x13)
188 {
189 return m_buffer[6];
190 }
191 return 0;
192 }
194 {
195 return m_encrypted;
196 }
198 {
199 m_encrypted = true;
200 }
202 {
203 return m_noncerecvd;
204 }
205 void setNonce(uint8 nonce[8])
206 {
207 memcpy(m_nonce, nonce, 8);
208 m_noncerecvd = true;
209 UpdateCallbackId();
210 }
212 {
213 memset((m_nonce), '\0', 8);
214 m_noncerecvd = false;
215 }
216 void SetHomeId(uint32 homeId)
217 {
218 m_homeId = homeId;
219 }
221 {
222 m_resendDuetoCANorNAK = true;
223 }
225 {
226 return m_resendDuetoCANorNAK;
227 }
228
232 Driver* GetDriver() const;
233 private:
234
235 void MultiEncap(); // Encapsulate the data inside a MultiInstance/Multicommand message
236 void SupervisionEncap(); // Encapsulate the data inside a Supervision message
237 string m_logText;
238 bool m_bFinal;
239 bool m_bCallbackRequired;
240
241 uint8 m_callbackId;
242 uint8 m_expectedReply;
243 uint8 m_expectedCommandClassId;
244 uint8 m_length;
245 uint8 m_buffer[256];
246 uint8 e_buffer[256];
247
248 uint8 m_targetNodeId;
249 uint8 m_sendAttempts;
250 uint8 m_maxSendAttempts;
251
252 uint8 m_instance;
253 uint8 m_endPoint; // Endpoint to use if the message must be wrapped in a multiInstance or multiChannel command class
254 uint8 m_flags;
255 uint8 m_supervision_session_id;
256
257 bool m_encrypted;
258 bool m_noncerecvd;
259 uint8 m_nonce[8];
260 uint32 m_homeId;
261 static uint8 s_nextCallbackId; // counter to get a unique callback id
262 /* we are resending this message due to CAN or NAK messages */
263 bool m_resendDuetoCANorNAK;
264 };
265 } // namespace Internal
266} // namespace OpenZWave
267
268#endif //_Msg_H
269
unsigned int uint32
Definition Defs.h:91
#define MAX_MAX_TRIES
Definition Defs.h:225
#define OPENZWAVE_EXPORT
Definition Defs.h:52
unsigned char uint8
Definition Defs.h:85
The Driver class handles communication between OpenZWave and a device attached via a serial port (typ...
Definition Driver.h:85
Base class for all Z-Wave command classes.
Definition CommandClass.h:61
Message object to be passed to and from devices on the Z-Wave network.
Definition Msg.h:51
bool isNonceRecieved()
Definition Msg.h:201
void SetSendAttempts(uint8 _count)
Definition Msg.h:150
string GetLogText() const
For messages that request a Report for a specified command class, identifies the expected Index for t...
Definition Msg.h:134
bool IsWakeUpNoMoreInformationCommand()
Definition Msg.h:165
uint8 GetExpectedInstance() const
For messages that request a Report for a specified command class, identifies the expected Instance fo...
Definition Msg.h:119
void setResendDuetoCANorNAK()
Definition Msg.h:220
uint8 GetCallbackId() const
Identifies the Callback ID (if any) for this message. Callback ID is a value (OpenZWave uses sequenti...
Definition Msg.h:87
uint8 GetMaxSendAttempts() const
Definition Msg.h:155
MessageFlags
Definition Msg.h:54
~Msg()
Definition Msg.h:61
bool isResendDuetoCANorNAK()
Definition Msg.h:224
uint8 GetExpectedCommandClassId() const
Identifies the expected Command Class ID (if any) for this message.
Definition Msg.h:109
void setEncrypted()
Definition Msg.h:197
bool isEncrypted()
Definition Msg.h:193
uint8 GetTargetNodeId() const
Identifies the Node ID of the "target" node (if any) for this function.
Definition Msg.h:77
void SetHomeId(uint32 homeId)
Definition Msg.h:216
void setNonce(uint8 nonce[8])
Definition Msg.h:205
void SetMaxSendAttempts(uint8 _count)
Definition Msg.h:159
uint32 GetLength() const
Definition Msg.h:139
uint8 GetSendAttempts() const
Definition Msg.h:146
uint8 GetExpectedReply() const
Identifies the expected reply type (if any) for this message. The expected reply is a function code....
Definition Msg.h:100
uint8 GetSendingCommandClass()
Definition Msg.h:185
void clearNonce()
Definition Msg.h:211
bool IsNoOperation()
Definition Msg.h:169
Definition Bitfield.cpp:31