Files
OpenMQTT-Gateway/lib/ESPiLight/pilight/libs/openzwave/Msg.h
T
Florian 67dd7ac078 update esppilight lib
content of the library is not filtered on 433mhz only
2018-11-28 20:41:37 +01:00

174 lines
5.8 KiB
C++

//-----------------------------------------------------------------------------
//
// Msg.h
//
// Represents a Z-Wave message
//
// Copyright (c) 2010 Mal Lansell <openzwave@lansell.org>
//
// SOFTWARE NOTICE AND LICENSE
//
// This file is part of OpenZWave.
//
// OpenZWave is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation, either version 3 of the License,
// or (at your option) any later version.
//
// OpenZWave is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with OpenZWave. If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
#ifndef _Msg_H
#define _Msg_H
#include <cstdio>
#include <string>
#include <string.h>
#include "Defs.h"
namespace OpenZWave
{
class CommandClass;
/** \brief Message object to be passed to and from devices on the Z-Wave network.
*/
class OPENZWAVE_EXPORT Msg
{
public:
enum MessageFlags
{
m_MultiChannel = 0x01, // Indicate MultiChannel encapsulation
m_MultiInstance = 0x02, // Indicate MultiInstance encapsulation
};
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 );
~Msg(){}
void SetInstance( CommandClass* _cc, uint8 const _instance ); // Used to enable wrapping with MultiInstance/MultiChannel during finalize.
void Append( uint8 const _data );
void Finalize();
void UpdateCallbackId();
/**
* \brief Identifies the Node ID of the "target" node (if any) for this function.
* \return Node ID of the target.
*/
uint8 GetTargetNodeId()const{ return m_targetNodeId; }
/**
* \brief Identifies the Callback ID (if any) for this message. Callback ID is a value (OpenZWave uses sequential IDs) that
* helps the application associate message responses with the original message request.
* \return Callback ID for this message.
*/
uint8 GetCallbackId()const{ return m_callbackId; }
/**
* \brief Identifies the expected reply type (if any) for this message. The expected reply is a function code...one
* of the FUNC_ID... values defined in Defs.h. Many Z-Wave functions generate responses with the same function code
* (for example, a FUNC_ID_ZW_GET_VERSION message generates a FUNC_ID_ZW_GET_VERSION response. But other functions
* generate a different response. FUNC_ID_ZW_SEND_DATA triggers several responses, but ultimately, a "Get" sent with
* this function should result in a FUNC_ID_APPLICATION_COMMAND_HANDLER response.
* \return Expected reply (function code) for this message.
*/
uint8 GetExpectedReply()const{ return m_expectedReply; }
/**
* \brief Identifies the expected Command Class ID (if any) for this message.
* \return Expected command class ID for this message.
*/
uint8 GetExpectedCommandClassId()const{ return m_expectedCommandClassId; }
/**
* \brief For messages that request a Report for a specified command class, identifies the expected Instance
* for the variable being obtained in the report.
* \return Expected Instance value for this message.
*/
uint8 GetExpectedInstance()const{ return m_instance; }
/**
* \brief For messages that request a Report for a specified command class, identifies the expected Index
* for the variable being obtained in the report.
* \return Expected Index value for this message.
*/
// uint8 GetExpectedIndex()const{ return m_expectedIndex; }
/**
* \brief get the LogText Associated with this message
* \return the LogText used during the constructor
*/
string GetLogText()const{ return m_logText; }
uint32 GetLength()const{ return m_length; }
uint8* GetBuffer(){ return m_buffer; }
string GetAsString();
uint8 GetSendAttempts()const{ return m_sendAttempts; }
void SetSendAttempts( uint8 _count ){ m_sendAttempts = _count; }
uint8 GetMaxSendAttempts()const{ return m_maxSendAttempts; }
void SetMaxSendAttempts( uint8 _count ){ if( _count < MAX_MAX_TRIES ) m_maxSendAttempts = _count; }
bool IsWakeUpNoMoreInformationCommand()
{
return( m_bFinal && (m_length==11) && (m_buffer[3]==0x13) && (m_buffer[6]==0x84) && (m_buffer[7]==0x08) );
}
bool IsNoOperation()
{
return( m_bFinal && (m_length==11) && (m_buffer[3]==0x13) && (m_buffer[6]==0x00) && (m_buffer[7]==0x00) );
}
bool operator == ( Msg const& _other )const
{
if( m_bFinal && _other.m_bFinal )
{
// Do not include the callback Id or checksum in the comparison.
uint8 length = m_length - (m_bCallbackRequired ? 2: 1 );
return( !memcmp( m_buffer, _other.m_buffer, length ) );
}
return false;
}
uint8 GetSendingCommandClass() {
if (m_buffer[3] == 0x13) {
return m_buffer[6];
}
return 0;
}
private:
void MultiEncap(); // Encapsulate the data inside a MultiInstance/Multicommand message
string m_logText;
bool m_bFinal;
bool m_bCallbackRequired;
uint8 m_callbackId;
uint8 m_expectedReply;
uint8 m_expectedCommandClassId;
uint8 m_length;
uint8 m_buffer[256];
uint8 m_targetNodeId;
uint8 m_sendAttempts;
uint8 m_maxSendAttempts;
uint8 m_instance;
uint8 m_endPoint; // Endpoint to use if the message must be wrapped in a multiInstance or multiChannel command class
uint8 m_flags;
static uint8 s_nextCallbackId; // counter to get a unique callback id
};
} // namespace OpenZWave
#endif //_Msg_H