379 lines
12 KiB
C
379 lines
12 KiB
C
|
#ifndef ZIGATEBACKEND_H
|
|||
|
#define ZIGATEBACKEND_H
|
|||
|
|
|||
|
#include "serial.inc.h"
|
|||
|
#include <QMap>
|
|||
|
#include <QSerialPortInfo>
|
|||
|
#include <QSerialPort>
|
|||
|
//#include <QArray>
|
|||
|
|
|||
|
class ZigbeeMgr;
|
|||
|
|
|||
|
class ZigateBackend : public ZigbeeMgr
|
|||
|
{
|
|||
|
|
|||
|
Q_OBJECT
|
|||
|
|
|||
|
public:
|
|||
|
QMap <int, QString> resultCodes;
|
|||
|
QString portName;
|
|||
|
QString serialDeviceDescription;
|
|||
|
QString serialDeviceManufacturer;
|
|||
|
QString serialDeviceNumber;
|
|||
|
QString serialDeviceVendor;
|
|||
|
QString serialDeviceProduct;
|
|||
|
quint32 baudRate = 115200;
|
|||
|
//ZigbeeMgr serial;
|
|||
|
|
|||
|
ZigateBackend();
|
|||
|
~ZigateBackend();
|
|||
|
|
|||
|
QByteArray checksum(QByteArray msgType, QByteArray length, QByteArray datas);
|
|||
|
QByteArray transcode(QByteArray datas);
|
|||
|
void sendCmd(QByteArray cmd, QByteArray len, QByteArray datas);
|
|||
|
bool findSerialDevice();
|
|||
|
|
|||
|
QMap <QString, QString> clusters
|
|||
|
{
|
|||
|
{"0000", " (General: Basic)"},
|
|||
|
{"0001", " (General: Power Config)"},
|
|||
|
{"0002", " (General: Temperature Config)"},
|
|||
|
{"0003", " (General: Identify)"},
|
|||
|
{"0004", " (General: Groups)"},
|
|||
|
{"0005", " (General: Scenes)"},
|
|||
|
{"0006", " (General: On/Off)"},
|
|||
|
{"0007", " (General: On/Off Config)"},
|
|||
|
{"0008", " (General: Level Control)"},
|
|||
|
{"0009", " (General: Alarms)"},
|
|||
|
{"000A", " (General: Time)"},
|
|||
|
{"000F", " (General: Binary Input Basic)"},
|
|||
|
{"0020", " (General: Poll Control)"},
|
|||
|
{"0019", " (General: OTA)"},
|
|||
|
{"0101", " (General: Door Lock"},
|
|||
|
{"0201", " (HVAC: Thermostat)"},
|
|||
|
{"0202", " (HVAC: Fan Control)"},
|
|||
|
{"0300", " (Lighting: Color Control)"},
|
|||
|
{"0400", " (Measurement: Illuminance)"},
|
|||
|
{"0402", " (Measurement: Temperature)"},
|
|||
|
{"0405", " (Measurement: Humidity)"},
|
|||
|
{"0406", " (Measurement: Occupancy Sensing)"},
|
|||
|
{"0500", " (Security & Safety: IAS Zone)"},
|
|||
|
{"0702", " (Smart Energy: Metering)"},
|
|||
|
{"0B05", " (Misc: Diagnostics)"},
|
|||
|
{"1000", " (ZLL: Commissioning)"},
|
|||
|
{"FF01", " Xiaomi private"},
|
|||
|
{"FF02", " Xiaomi private"},
|
|||
|
{"1234", " Xiaomi private"}
|
|||
|
};
|
|||
|
|
|||
|
/*Zigate -> Obj 0x0008 Set heartBeat enable/disable (ZiGatev2 Firm v3.20) <enable/disable : uint8_t >
|
|||
|
0 – disable (by default)
|
|||
|
1 – enable
|
|||
|
Status
|
|||
|
*/
|
|||
|
QList <QByteArray> heartbeatEnable = {"0008", "0001", "0210"};
|
|||
|
|
|||
|
/*Zigate -> Obj 0x0009 Get Network State (Firm v3.0d) Status
|
|||
|
Network State Response
|
|||
|
*/
|
|||
|
QByteArray networkState = "0009";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0010 Get Version Status
|
|||
|
Version List
|
|||
|
*/
|
|||
|
QList <QByteArray> getVersion = {"0010", "0000", ""};
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0011 Reset Status, followed by chip reset
|
|||
|
*/
|
|||
|
QByteArray reset = "0011";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0012 Erase Persistent Data Status
|
|||
|
*/
|
|||
|
QByteArray erasePersistentData = "0012";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0013 ZLO/ZLL “Factory New” Reset No payload Status, followed by chip reset
|
|||
|
Resets (“Factory New”) the Control Bridge but persists the frame counters.
|
|||
|
*/
|
|||
|
QByteArray factoryReset = "0013";
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0014 Permit Join Status, followed by “Permit join” status response
|
|||
|
*/
|
|||
|
QByteArray permitJoin = "0014";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0015 Get devices list Get devices authentified in the ZiGate’s PDM. Status, followed by “Get devices list” response
|
|||
|
*/
|
|||
|
QByteArray getDevicesList = "0015";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0016 Set Time server (v3.0f) <timestamp UTC: uQByteArray32_t> from 2000-01-01 00:00:00 Status
|
|||
|
*/
|
|||
|
QByteArray setTimeServer = "0016";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0017 GetTime server (v3.0f) Status
|
|||
|
Get_timer_server_response
|
|||
|
*/
|
|||
|
QByteArray getTimerServerResponse = "0017";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0018 SetLed (v3.0f) <on/off : uint8_t >
|
|||
|
0 – Off
|
|||
|
1- On
|
|||
|
Status
|
|||
|
*/
|
|||
|
QByteArray setLed = "0018";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0019 Set Certification (v3.0f) <type : uint8_t >
|
|||
|
1- CE
|
|||
|
2- FCC
|
|||
|
Status
|
|||
|
*/
|
|||
|
QByteArray setCertification = "0019";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0020 Set Expended PANID <64-bit Extended PAN ID:uint64_t> Status
|
|||
|
*/
|
|||
|
QByteArray setExpended = "0020";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0021 Set Channel Mask <channel mask:uint32_t> Status
|
|||
|
*/
|
|||
|
QByteArray setChannelMask = "0021";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0022 Set Security State + Key <key type: uint8_t> Status
|
|||
|
<key: data>
|
|||
|
*/
|
|||
|
QByteArray setSecurityState = "0022";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0023 Set device Type <device type: uint8_t> Status
|
|||
|
Device Types:
|
|||
|
0 = Coordinator
|
|||
|
1 = Router
|
|||
|
*/
|
|||
|
QByteArray setDeviceType = "0023";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0024 Start Network Status
|
|||
|
Network Joined / Formed
|
|||
|
*/
|
|||
|
QByteArray startNetwork = "0024";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0025 Start Network Scan Status
|
|||
|
Network Joined / Formed
|
|||
|
*/
|
|||
|
QByteArray StartNetworkScan = "0025";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0026 Remove Device <Parent IEEE address: uint64_t> Status
|
|||
|
<Child IEEE address: uint64_t> Leave indication
|
|||
|
*/
|
|||
|
QByteArray removeDevice = "0026";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0027 Enable Permissions Controlled Joins <Enable/Disable : uint8_t> Status
|
|||
|
1 – Enable
|
|||
|
2 – Disable
|
|||
|
*/
|
|||
|
QByteArray enablePermControlledJoins = "0027";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0028 Authenticate Device <IEEE address "; uint64_t> Status
|
|||
|
<Key : 16 elements byte each> Authenticate response
|
|||
|
*/
|
|||
|
QByteArray authenticateDevice = "0028";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0029 Out of Band Commissioning Data Request <Address of interest : uint64_t> Status
|
|||
|
<Key : 16 elements byte each> Out of Band Commissioning Data Response
|
|||
|
*/
|
|||
|
QByteArray outOfBandCDR = "0029";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x002B User Descriptor Set < target short address: uint16_t> Status
|
|||
|
< Address of interest: uint16_t> User descriptor notify response
|
|||
|
< string length: uint8_t>
|
|||
|
<data: uint8_t stream >
|
|||
|
*/
|
|||
|
QByteArray userDescriptorSet = "002B";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x002C User Descritpor Request < target short address: uint16_t> Status
|
|||
|
< Address of interest: uint16_t> User Descriptor response
|
|||
|
*/
|
|||
|
QByteArray userDescriptorRequest = "002C";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0531 Complex Descriptor request < target short address: uint16_t> Status
|
|||
|
< Address of interest: uint16_t> Complex Descriptor Response
|
|||
|
*/
|
|||
|
QByteArray complexDescriptorRequest = "0531";
|
|||
|
|
|||
|
/*Zigate -> Obj 0x0030 Bind <target extended address: uint64_t> Status
|
|||
|
<target endpoint: uint8_t> Bind response
|
|||
|
<cluster ID: uint16_t>
|
|||
|
<destination address mode: uint8_t>
|
|||
|
<destination address:uint16_t or uint64_t>
|
|||
|
<destination endpoint (value ignored for group address): uint8_t>
|
|||
|
*/
|
|||
|
QByteArray bind = "0030";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0031 Unbind <target extended address: uint64_t> Status
|
|||
|
<target endpoint: uint8_t> Unbind response
|
|||
|
<cluster ID: uint16_t>
|
|||
|
<destination address mode: uint8_t>
|
|||
|
<destination address: uint16_t or uint64_t>
|
|||
|
<destination endpoint(value ignored for group address): uint8_t>
|
|||
|
*/
|
|||
|
QByteArray unBind = "0031";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0040 Network Address request <target short address: uint16_t> <extended address:uint64_t> Status
|
|||
|
<request type: uint8_t> Network Address response
|
|||
|
<start index: uint8_t>
|
|||
|
Request Type:
|
|||
|
0 = Single Request
|
|||
|
1 = Extended Request
|
|||
|
*/
|
|||
|
QByteArray networkAddressRequest = "0040";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0041 IEEE Address request <target short address: uint16_t> Status
|
|||
|
<short address: uint16_t> IEEE Address response
|
|||
|
<request type: uint8_t>
|
|||
|
<start index: uint8_t>
|
|||
|
Request Type:
|
|||
|
0 = Single
|
|||
|
1 = Extended
|
|||
|
*/
|
|||
|
QByteArray ieeeAddressRequest = "0041";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0042 Node Descriptor request <target short address: uint16_t> Status
|
|||
|
Node Descriptor response
|
|||
|
*/
|
|||
|
QByteArray nodeDescriptorRequest = "0042";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0043 Simple Descriptor request <target short address: uint16_t> Status
|
|||
|
<endpoint: uint8_t> Simple Descriptor response
|
|||
|
*/
|
|||
|
QByteArray simpleDescriptorRequest = "0043";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0044 Power Descriptor request <target short address: uint16_t> Status
|
|||
|
Power Descriptor response
|
|||
|
*/
|
|||
|
QByteArray powerDescriptorRequest = "0044";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0045 Active Endpoint request <target short address: uint16_t> Status
|
|||
|
Active Endpoint response
|
|||
|
*/
|
|||
|
QByteArray activeEndpointRequest = "0045";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0046 Match Descriptor request <target short address: uint16_t> Status
|
|||
|
<profile id: uint16_t> Match Descriptor response
|
|||
|
<number of input clusters: uint8_t>
|
|||
|
<input cluster list:data: each entry is uint16_t >
|
|||
|
<number of output clusters: uint8_t>
|
|||
|
<output cluster list:data: each entry is uint16_t>
|
|||
|
*/
|
|||
|
QByteArray matchDescriptorRequest = "0046";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0047 Management Leave request <target short address: uint16_t> Status
|
|||
|
<extended address: uint64_t> Management Leave response
|
|||
|
<Rejoin: uint8_t> Leave indication
|
|||
|
<Remove Children: uint8_t>
|
|||
|
Rejoin,
|
|||
|
0 = Do not rejoin
|
|||
|
1 = Rejoin
|
|||
|
Remove Children
|
|||
|
0 = Leave, do not remove children
|
|||
|
1 = Leave, removing children
|
|||
|
*/
|
|||
|
QByteArray managementLeaveRequest = "0047";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0049 Permit Joining request <target short address: uint16_t> Status
|
|||
|
<interval: uint8_t>
|
|||
|
<TCsignificance: uint8_t>
|
|||
|
Target address: May be address of gateway node or broadcast (0xfffc)
|
|||
|
Interval:
|
|||
|
0 = Disable Joining
|
|||
|
1 – 254 = Time in seconds to allow joins
|
|||
|
255 = Allow all joins
|
|||
|
TCsignificance:
|
|||
|
0 = No change in authentication
|
|||
|
1 = Authentication policy as spec
|
|||
|
*/
|
|||
|
QByteArray permitJoiningRequest = "0049";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x004A Management Network Update request <target short address: uint16_t> Status
|
|||
|
<channel mask: uint32_t> Management Network Update response
|
|||
|
<scan duration: uint8_t>
|
|||
|
<scan count: uint8_t>
|
|||
|
<network update ID: uint8_t>
|
|||
|
<network manager short address: uint16_t>
|
|||
|
Channel Mask:
|
|||
|
Mask of channels to scan
|
|||
|
Scan Duration:
|
|||
|
0 – 0xFF Multiple of superframe duration.
|
|||
|
Scan count:
|
|||
|
Scan repeats 0 – 5
|
|||
|
Network Update ID:
|
|||
|
0 – 0xFF Transaction ID for scan
|
|||
|
*/
|
|||
|
QByteArray manaementNetworkUpdateRequest = "004A";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x004B System Server Discovery request <target short address: uint16_t> Status
|
|||
|
<Server mask: uint16_t> System Server Discovery response
|
|||
|
Bitmask according to spec.
|
|||
|
*/
|
|||
|
QByteArray systemServerDiscoveryRequest = "004B";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x004C Leave Request <extended address: uint64_t> Status
|
|||
|
<Rejoin: uint8_t> Leave indication Leave indication (0x8048)
|
|||
|
<Remove Children: uint8_t>
|
|||
|
Rejoin,
|
|||
|
0 = Do not rejoin
|
|||
|
1 = Rejoin
|
|||
|
Remove Children
|
|||
|
0 = Leave, do not remove children
|
|||
|
1 = Leave, removing children
|
|||
|
*/
|
|||
|
QByteArray leaveRequest = "004C";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x004E Management LQI request <Target Address : uint16_t> Status
|
|||
|
<Start Index : uint8_t> Management LQI response
|
|||
|
*/
|
|||
|
QByteArray managementLqiRequest = "004E";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0051 Free PDM internal address map table (From v.322 ZiGate+) Status
|
|||
|
*/
|
|||
|
QByteArray freePdmTable = "0051";
|
|||
|
|
|||
|
/*
|
|||
|
Zigate -> Obj 0x0052 Get PDM child table size (From v.322 ZiGate+) Status
|
|||
|
PDM child table size response
|
|||
|
*/
|
|||
|
QByteArray getPdmChildTableSize = "0052";
|
|||
|
|
|||
|
};
|
|||
|
#endif // ZIGATEBACKEND_H
|