OpenZWave Library 1.4.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 CommandClass;
40 class Driver;
41
45 {
46 public:
48 {
49 m_MultiChannel = 0x01, // Indicate MultiChannel encapsulation
50 m_MultiInstance = 0x02, // Indicate MultiInstance encapsulation
51 };
52
53 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 );
54 ~Msg(){}
55
56 void SetInstance( CommandClass* _cc, uint8 const _instance ); // Used to enable wrapping with MultiInstance/MultiChannel during finalize.
57
58 void Append( uint8 const _data );
59 void Finalize();
60 void UpdateCallbackId();
61
66 uint8 GetTargetNodeId()const{ return m_targetNodeId; }
67
73 uint8 GetCallbackId()const{ return m_callbackId; }
74
83 uint8 GetExpectedReply()const{ return m_expectedReply; }
84
89 uint8 GetExpectedCommandClassId()const{ return m_expectedCommandClassId; }
90
96 uint8 GetExpectedInstance()const{ return m_instance; }
97
103// uint8 GetExpectedIndex()const{ return m_expectedIndex; }
108 string GetLogText()const{ return m_logText; }
109
110 uint32 GetLength()const{ return m_encrypted == true ? m_length + 20 + 6 : m_length; }
111 uint8* GetBuffer();
112 string GetAsString();
113
114 uint8 GetSendAttempts()const{ return m_sendAttempts; }
115 void SetSendAttempts( uint8 _count ){ m_sendAttempts = _count; }
116
117 uint8 GetMaxSendAttempts()const{ return m_maxSendAttempts; }
118 void SetMaxSendAttempts( uint8 _count ){ if( _count < MAX_MAX_TRIES ) m_maxSendAttempts = _count; }
119
121 {
122 return( m_bFinal && (m_length==11) && (m_buffer[3]==0x13) && (m_buffer[6]==0x84) && (m_buffer[7]==0x08) );
123 }
125 {
126 return( m_bFinal && (m_length==11) && (m_buffer[3]==0x13) && (m_buffer[6]==0x00) && (m_buffer[7]==0x00) );
127 }
128
129 bool operator == ( Msg const& _other )const
130 {
131 if( m_bFinal && _other.m_bFinal )
132 {
133 // Do not include the callback Id or checksum in the comparison.
134 uint8 length = m_length - (m_bCallbackRequired ? 2: 1 );
135 return( !memcmp( m_buffer, _other.m_buffer, length ) );
136 }
137
138 return false;
139 }
141 if (m_buffer[3] == 0x13) {
142 return m_buffer[6];
143 }
144 return 0;
145
146 }
147
148 bool isEncrypted() {
149 return m_encrypted;
150 }
152 m_encrypted = true;
153 }
155 return m_noncerecvd;
156 }
157 void setNonce(uint8 nonce[8]) {
158 memcpy(m_nonce, nonce, 8);
159 m_noncerecvd = true;
161 }
162 void clearNonce() {
163 memset((m_nonce), '\0', 8);
164 m_noncerecvd = false;
165 }
166 void SetHomeId(uint32 homeId) { m_homeId = homeId; };
167
171 Driver* GetDriver()const;
172 private:
173
174
175 void MultiEncap(); // Encapsulate the data inside a MultiInstance/Multicommand message
176
177 string m_logText;
178 bool m_bFinal;
179 bool m_bCallbackRequired;
180
181 uint8 m_callbackId;
182 uint8 m_expectedReply;
183 uint8 m_expectedCommandClassId;
184 uint8 m_length;
185 uint8 m_buffer[256];
186 uint8 e_buffer[256];
187
188 uint8 m_targetNodeId;
189 uint8 m_sendAttempts;
190 uint8 m_maxSendAttempts;
191
192 uint8 m_instance;
193 uint8 m_endPoint; // Endpoint to use if the message must be wrapped in a multiInstance or multiChannel command class
194 uint8 m_flags;
195
196 bool m_encrypted;
197 bool m_noncerecvd;
198 uint8 m_nonce[8];
199 uint32 m_homeId;
200 static uint8 s_nextCallbackId; // counter to get a unique callback id
201 };
202
203} // namespace OpenZWave
204
205#endif //_Msg_H
206
unsigned int uint32
Definition Defs.h:80
#define MAX_MAX_TRIES
Definition Defs.h:214
#define OPENZWAVE_EXPORT
Definition Defs.h:52
unsigned char uint8
Definition Defs.h:74
Base class for all Z-Wave command classes.
Definition CommandClass.h:47
The Driver class handles communication between OpenZWave and a device attached via a serial port (typ...
Definition Driver.h:59
Message object to be passed to and from devices on the Z-Wave network.
Definition Msg.h:45
void setNonce(uint8 nonce[8])
Definition Msg.h:157
uint8 GetCallbackId() const
Identifies the Callback ID (if any) for this message. Callback ID is a value (OpenZWave uses sequenti...
Definition Msg.h:73
uint8 GetExpectedReply() const
Identifies the expected reply type (if any) for this message. The expected reply is a function code....
Definition Msg.h:83
~Msg()
Definition Msg.h:54
bool IsWakeUpNoMoreInformationCommand()
Definition Msg.h:120
void UpdateCallbackId()
Definition Msg.cpp:196
bool isEncrypted()
Definition Msg.h:148
bool isNonceRecieved()
Definition Msg.h:154
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)
Definition Msg.cpp:51
void SetMaxSendAttempts(uint8 _count)
Definition Msg.h:118
string GetLogText() const
For messages that request a Report for a specified command class, identifies the expected Index for t...
Definition Msg.h:108
uint8 GetMaxSendAttempts() const
Definition Msg.h:117
void SetHomeId(uint32 homeId)
Definition Msg.h:166
uint8 GetExpectedCommandClassId() const
Identifies the expected Command Class ID (if any) for this message.
Definition Msg.h:89
uint8 GetExpectedInstance() const
For messages that request a Report for a specified command class, identifies the expected Instance fo...
Definition Msg.h:96
void clearNonce()
Definition Msg.h:162
uint8 GetSendingCommandClass()
Definition Msg.h:140
void setEncrypted()
Definition Msg.h:151
uint32 GetLength() const
Definition Msg.h:110
uint8 GetTargetNodeId() const
Identifies the Node ID of the "target" node (if any) for this function.
Definition Msg.h:66
MessageFlags
Definition Msg.h:48
@ m_MultiChannel
Definition Msg.h:49
@ m_MultiInstance
Definition Msg.h:50
bool IsNoOperation()
Definition Msg.h:124
uint8 GetSendAttempts() const
Definition Msg.h:114
void SetSendAttempts(uint8 _count)
Definition Msg.h:115
Definition Bitfield.h:35