2023-04-08 15:06:36 +02:00
|
|
|
#ifndef ZIGATEBACKEND_H
|
|
|
|
#define ZIGATEBACKEND_H
|
|
|
|
|
2023-04-24 21:57:35 +02:00
|
|
|
#define DEVICE_ANNOUNCE "004D"
|
|
|
|
#define STATUS_RETURNED "8000"
|
|
|
|
#define LOG_MESSAGE "8001"
|
|
|
|
#define DATA_INDICATION "8002"
|
|
|
|
#define CLUSTERS_LIST "8003"
|
|
|
|
#define ATTRIBUTES_LIST "8004"
|
|
|
|
#define COMMANDS_LIST "8005"
|
|
|
|
#define STATUS "8006"
|
|
|
|
#define STATUS2 "8007"
|
|
|
|
#define VERSION_LIST "8010"
|
|
|
|
#define PERMIT_JOIN "8014"
|
|
|
|
#define NETWORK_JOINED_FORMED "8024"
|
|
|
|
#define BIND_RESPONSE "8030"
|
|
|
|
#define UNBIND_RESPONSE "8031"
|
|
|
|
#define NETWORK_ADDRESS "8040"
|
|
|
|
#define IEEE_ADDRESS "8041"
|
|
|
|
#define NODE_DESCRIPTOR "8042"
|
|
|
|
#define SIMPLE_DESCRIPTOR "8043"
|
|
|
|
#define POWER_DESCRIPTOR "8044"
|
|
|
|
#define ACTIVE_ENDPOINT "8045"
|
|
|
|
#define MATCH_DESCRIPTOR "8046"
|
|
|
|
#define USER_DESCRIPTOR_NOTIFY "802B"
|
|
|
|
#define USER_DESCRIPTOR "802C"
|
|
|
|
#define MANAGEMENT_LEAVE "8047"
|
|
|
|
#define LEAVE_INDICATION "8048"
|
|
|
|
#define MANAGEMENT_NETWORK_UPDATE "804A"
|
|
|
|
#define SYSTEM_SERVER_DISCOVERY "804B"
|
|
|
|
#define MANAGEMENT_LQI "804E"
|
|
|
|
#define ATTRIBUTE_DISCOVERY "8140"
|
|
|
|
#define HEARTBEAT "8008"
|
|
|
|
#define NETWORK_STATE "8009"
|
|
|
|
#define ACK_DATA "8011"
|
|
|
|
#define DATA_CONFIRM "8012"
|
|
|
|
#define DEVICES_LIST "8015"
|
|
|
|
#define TIME_SERVER "8017"
|
|
|
|
#define AUTHENTICATE_RESPONSE "8028"
|
|
|
|
#define PDM_EVENT "8035"
|
|
|
|
#define PERMIT_JOINING "8049"
|
|
|
|
#define PDM_CHILD_TABLE_SIZE "8052"
|
|
|
|
#define ADD_GROUP "8060"
|
|
|
|
#define VIEW_GROUP "8061"
|
|
|
|
#define GROUP_MEMBERSHIP "8062"
|
|
|
|
#define REMOVE_GROUP "8063"
|
|
|
|
#define LEVEL_UPDATE "8085"
|
|
|
|
#define ON_OFF "8095"
|
|
|
|
#define VIEW_SCENE "80A0"
|
|
|
|
#define ADD_SCENE "80A1"
|
|
|
|
#define REMOVE_SCENE "80A2"
|
|
|
|
#define REMOVE_ALL_SCENE "80A3"
|
|
|
|
#define STORE_SCENE "80A4"
|
|
|
|
#define SCENE_MEMBERSHIP "80A6"
|
|
|
|
#define SCENES_UPDATE "80A7"
|
|
|
|
#define READ_INDIVIDUAL_ATTRIBUTE "8100"
|
|
|
|
#define DEFAULT_RESPONSE "8101"
|
|
|
|
#define REPORT_INDIVIDUAL_ATTRIBUTE "8102"
|
|
|
|
#define WRITE_ATTRIBUTE "8110"
|
|
|
|
#define CONFIGURE_REPORTING "8120"
|
|
|
|
#define READ_REPORT_CONFIG "8122"
|
|
|
|
#define COMPLEX_DESCRIPTOR "8531"
|
|
|
|
#define ROUTER_DISCOVERY "8701"
|
|
|
|
#define APS_DATA_CONFIRM_FAIL "8702"
|
|
|
|
#define EXTENDED_ERROR "9999"
|
|
|
|
|
|
|
|
#include "library.h"
|
2023-04-08 15:06:36 +02:00
|
|
|
#include "serial.inc.h"
|
|
|
|
#include <QMap>
|
2023-04-20 13:42:00 +02:00
|
|
|
#include <QHash>
|
2023-04-08 15:06:36 +02:00
|
|
|
#include <QSerialPort>
|
2023-04-20 13:42:00 +02:00
|
|
|
#include "responseClasses.h"
|
2023-04-29 15:15:19 +02:00
|
|
|
#include <QtConcurrent/QtConcurrent>
|
2023-04-20 13:42:00 +02:00
|
|
|
|
2023-04-24 21:57:35 +02:00
|
|
|
//void deviceAnnounceManager(Response *);
|
|
|
|
//void commandReturnStatusManager(Response *);
|
|
|
|
//void logMessageManager(Response *);
|
|
|
|
//void dataIndicationManager(Response *);
|
|
|
|
void clustersListManager(Response *);
|
|
|
|
//void attributesListManager(Response *);
|
|
|
|
//void commandsListManager(Response *);
|
|
|
|
//void statusManager(Response *);
|
|
|
|
//void status2Manager(Response *);
|
|
|
|
//void versionListManager(Response *);
|
|
|
|
//void permitJoinManager(Response *);
|
|
|
|
//void networkJoinedFormedManager(Response *);
|
|
|
|
//void bindResponseManager(Response *);
|
|
|
|
//void unbindResponseManager(Response *);
|
|
|
|
//void networkAddressManager(Response *);
|
|
|
|
void iEEEAddressManager(Response *);
|
|
|
|
void nodeDescriptorManager(Response *);
|
|
|
|
void simpleDescriptorManager(Response *);
|
|
|
|
//void powerDescriptorManager(Response *);
|
|
|
|
//void activeEndpointManager(Response *);
|
|
|
|
//void matchDescriptorManager(Response *);
|
|
|
|
//void userDescriptorNotifyManager(Response *);
|
|
|
|
//void userDescriptorManager(Response *);
|
|
|
|
//void complexDescriptorManager(Response *);
|
|
|
|
//void managementLeaveManager(Response *);
|
|
|
|
//void leaveIndicationManager(Response *);
|
|
|
|
//void managementNetworkUpdateManager(Response *);
|
|
|
|
//void systemServerDiscoveryManager(Response *);
|
|
|
|
//void managementLQIManager(Response *);
|
|
|
|
//void attributeDiscoveryManager(Response *);
|
|
|
|
void deviceListManager(Response *);
|
|
|
|
void networkAddressManager(Response *);
|
|
|
|
void dataIndicationManager(Response *);
|
2023-04-08 15:06:36 +02:00
|
|
|
|
|
|
|
class ZigbeeMgr;
|
|
|
|
|
2023-04-29 15:15:19 +02:00
|
|
|
class ZigateBackend : QObject
|
2023-04-08 15:06:36 +02:00
|
|
|
{
|
|
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
2023-04-29 15:15:19 +02:00
|
|
|
public slots:
|
|
|
|
void interpretResult(QByteArray);
|
|
|
|
|
2023-04-08 15:06:36 +02:00
|
|
|
public:
|
|
|
|
ZigateBackend();
|
|
|
|
~ZigateBackend();
|
|
|
|
|
2023-04-20 13:42:00 +02:00
|
|
|
bool initBackend();
|
2023-04-08 15:06:36 +02:00
|
|
|
QByteArray checksum(QByteArray msgType, QByteArray length, QByteArray datas);
|
|
|
|
QByteArray transcode(QByteArray datas);
|
2023-04-20 13:42:00 +02:00
|
|
|
QByteArray unTranscode(QByteArray datas);
|
2023-04-13 00:27:20 +02:00
|
|
|
void sendCmd(QByteArray cmd, QByteArray datas);
|
2023-04-29 15:15:19 +02:00
|
|
|
//int interpretResult(QByteArray datas);
|
|
|
|
//void getResponse();
|
2023-04-20 13:42:00 +02:00
|
|
|
bool resetCoordinator();
|
2023-04-13 00:27:20 +02:00
|
|
|
|
2023-04-29 15:15:19 +02:00
|
|
|
// commands
|
|
|
|
void getVersion();
|
|
|
|
|
2023-04-13 00:27:20 +02:00
|
|
|
QMap <int, QString> resultCodes;
|
|
|
|
QMap <QString, QList <QByteArray>> cmdList =
|
|
|
|
{
|
|
|
|
{"setHeartBeat", {"0008", "0000", ""}},
|
|
|
|
{"getNetWorkState", {"0009", "0000", ""}},
|
|
|
|
{"getVersion", {"0010", "0000", ""}},
|
|
|
|
{"reset", {"0011", "0000", ""}},
|
|
|
|
{"erasePersistentData", {"0012", "0000", ""}},
|
|
|
|
{"factoryReset", {"0013", "0000", ""}},
|
|
|
|
{"permitJoin", {"0014", "0000", ""}},
|
|
|
|
{"setExpendedPANID", {"0020", "0008", ""}},
|
|
|
|
{"setChannelMask", {"0021", "0004", ""}},
|
|
|
|
{"setSecurityStateandKey", {"0022", "0000", ""}},
|
|
|
|
{"setDeviceType", {"0023", "0001", ""}},
|
|
|
|
{"startNetwork", {"0024", "0000", ""}},
|
|
|
|
{"startNetworkScan", {"0025", "0000", ""}},
|
|
|
|
{"removeDevice", {"0026", "0010", ""}},
|
|
|
|
{"enablePermissionsControlledJoins", {"0027", "0001", ""}},
|
|
|
|
{"authenticateDevice", {"0028", "0018", ""}},
|
|
|
|
{"outOfBandCommissioningDataRequest", {"0029", "0018", ""}},
|
|
|
|
{"userDescriptorSet", {"002B", "0000", ""}},
|
|
|
|
{"userDescritporRequest", {"002C", "0000", ""}},
|
|
|
|
{"bind", {"0030", "", ""}},
|
|
|
|
{"unbind", {"0031", "", ""}},
|
|
|
|
{"complexDescriptorRequest", {"0034", "0004", ""}},
|
|
|
|
{"networkAddressRequest", {"0040", "0012", ""}},
|
|
|
|
{"ieeeAddressRequest", {"0041", "0006", ""}},
|
|
|
|
{"nodeDescriptorRequest", {"0042", "0002", ""}},
|
|
|
|
{"simpleDescriptorRequest", {"0043", "0003", ""}},
|
|
|
|
{"powerDescriptorRequest", {"0044", "0002", ""}},
|
|
|
|
{"activeEndpointRequest", {"0045", "0002", ""}},
|
|
|
|
{"matchDescriptorRequest", {"0046", "", ""}},
|
|
|
|
{"managementLeaveRequest", {"0047", "001C", ""}},
|
|
|
|
{"permitJoiningRequest", {"0049", "0004", ""}},
|
|
|
|
{"managementNetworkUpdateRequest", {"004A", "000B", ""}},
|
|
|
|
{"systemServerDiscoveryRequest", {"004B", "0004", ""}},
|
|
|
|
{"managementLQIRequest", {"004E", "0003", ""}},
|
|
|
|
{"addGroup", {"0060", "0007", ""}},
|
|
|
|
{"viewGroup", {"0061", "0007", ""}},
|
|
|
|
{"getGroupMembership", {"0062", "", ""}},
|
|
|
|
{"removeGroup", {"0063", "0007", ""}},
|
|
|
|
{"removeAllGroups", {"0064", "0005", ""}},
|
|
|
|
{"addGroupIfIdentify", {"0065", "0007", ""}},
|
|
|
|
{"identifySend", {"0070", "0007", ""}},
|
|
|
|
{"identifyQuery", {"0071", "0005", ""}},
|
|
|
|
{"moveToLevel", {"0080", "0008", ""}},
|
|
|
|
{"moveToLevelWithWithoutOnOff", {"0081", "0009", ""}},
|
|
|
|
{"moveStep", {"0082", "000A", "0000"}},
|
|
|
|
{"moveStopMove", {"0083", "0005", ""}},
|
|
|
|
{"moveStopWithOnOff", {"0084", "0005", ""}},
|
|
|
|
{"onOffWithNoEffects", {"0092", "0006", ""}},
|
|
|
|
{"onOffTimedSend", {"0093", "000A", ""}},
|
|
|
|
{"onOffWithEffectsSend", {"0094", "0007", ""}},
|
|
|
|
{"viewScene", {"00A0", "0008", ""}},
|
|
|
|
{"addScene", {"00A1", "000D", ""}},
|
|
|
|
{"removeScene", {"00A2", "0008", ""}},
|
|
|
|
{"removeAllScenes", {"00A3", "0007", ""}},
|
|
|
|
{"storeScene", {"00A4", "0008", ""}},
|
|
|
|
{"recallScene", {"00A5", "0008", ""}},
|
|
|
|
{"sceneMembershipRequest", {"00A6", "0007", ""}},
|
|
|
|
{"addEnhancedScene", {"00A7", "", ""}},
|
|
|
|
{"viewEnhancedHostToNodeScene", {"00A8", "0008", ""}},
|
|
|
|
{"copyScene", {"00A9", "000C", ""}},
|
|
|
|
{"moveToHue", {"00B0", "0009", ""}},
|
|
|
|
{"moveHue", {"00B1", "0007", ""}},
|
|
|
|
{"stepHue", {"00B2", "0008", ""}},
|
|
|
|
{"moveToSaturation", {"00B3", "0008", ""}},
|
|
|
|
{"moveSaturation", {"00B4", "0006", ""}},
|
|
|
|
{"stepSaturation", {"00B5", "0008", ""}},
|
|
|
|
{"moveToHueAndSaturation", {"00B6", "0008", ""}},
|
|
|
|
{"moveToColour", {"00B7", "000B", ""}},
|
|
|
|
{"moveColour", {"00B8", "0009", ""}},
|
|
|
|
{"stepColour", {"00B9", "000B", ""}},
|
|
|
|
{"enhancedMoveToHue", {"00BA", "000A", ""}},
|
|
|
|
{"enhancedMoveHue", {"00BB", "0007", ""}},
|
|
|
|
{"enhancedStepHue", {"00BC", "0008", ""}},
|
|
|
|
{"enhancedMoveToHueAndSaturation", {"00BD", "000E", ""}},
|
|
|
|
{"colourLoopSet", {"00BE", "000D", ""}},
|
|
|
|
{"stopMoveStep", {"00BF", "0005", ""}},
|
|
|
|
{"moveToColourTemperature", {"00C0", "0009", ""}},
|
|
|
|
{"moveColourTemperature", {"00C1", "000D", ""}},
|
|
|
|
{"stepColourTemperature", {"00C2", "000E", ""}},
|
|
|
|
{"Initiate Touchlink", {"00D0", "0000", ""}},
|
|
|
|
{"touchLinkFactoryResetTarget", {"00D2", "0000", ""}},
|
|
|
|
{"identifyTriggerEffect", {"00E0", "0007", ""}},
|
|
|
|
{"lockUnlockDoor", {"00F0", "0006", ""}},
|
|
|
|
{"readAttributeRequest", {"0100", "", ""}},
|
|
|
|
{"writeAttributeRequest", {"0110", "000", ""}},
|
|
|
|
{"configureReportingRequest", {"0120", "", ""}},
|
|
|
|
{"attributeDiscoveryRequest", {"0140", "000E", ""}},
|
|
|
|
{"iASZoneEnrollResponse", {"0400", "0007", ""}},
|
|
|
|
{"rawApsDataRequest", {"0530", "000D", ""}}
|
|
|
|
};
|
2023-04-20 13:42:00 +02:00
|
|
|
QHash <QString, ResponseProperties *> responseListIndex;
|
2023-04-13 00:27:20 +02:00
|
|
|
|
2023-04-20 13:42:00 +02:00
|
|
|
QList <QString> responseListCode
|
|
|
|
{
|
|
|
|
"004D",
|
|
|
|
"8000",
|
|
|
|
"8001",
|
|
|
|
"8002",
|
|
|
|
"8003",
|
|
|
|
"8004",
|
|
|
|
"8005",
|
|
|
|
"8006",
|
|
|
|
"8007",
|
|
|
|
"8010",
|
|
|
|
"8014",
|
|
|
|
"8024",
|
|
|
|
"8030",
|
|
|
|
"8031",
|
|
|
|
"8040",
|
|
|
|
"8041",
|
|
|
|
"8042",
|
|
|
|
"8043",
|
|
|
|
"8044",
|
|
|
|
"8045",
|
|
|
|
"8046",
|
|
|
|
"802B",
|
|
|
|
"802C",
|
|
|
|
"8047",
|
|
|
|
"8048",
|
|
|
|
"804A",
|
|
|
|
"804B",
|
|
|
|
"804E",
|
|
|
|
"8140",
|
|
|
|
"8008",
|
|
|
|
"8009",
|
|
|
|
"8011",
|
|
|
|
"8012",
|
|
|
|
"8015",
|
|
|
|
"8017",
|
|
|
|
"8028",
|
|
|
|
"8035",
|
|
|
|
"8049",
|
|
|
|
"8052",
|
|
|
|
"8060",
|
|
|
|
"8061",
|
|
|
|
"8062",
|
|
|
|
"8063",
|
|
|
|
"8085",
|
|
|
|
"8095",
|
|
|
|
"80A0",
|
|
|
|
"80A1",
|
|
|
|
"80A2",
|
|
|
|
"80A3",
|
|
|
|
"80A4",
|
|
|
|
"80A6",
|
|
|
|
"80A7",
|
|
|
|
"8100",
|
|
|
|
"8101",
|
|
|
|
"8102",
|
|
|
|
"8110",
|
|
|
|
"8120",
|
|
|
|
"8122",
|
|
|
|
"8531",
|
|
|
|
"8701",
|
|
|
|
"8702",
|
|
|
|
"9999"
|
2023-04-13 00:27:20 +02:00
|
|
|
};
|
|
|
|
|
2023-04-20 13:42:00 +02:00
|
|
|
//ZigbeeMgr serial;
|
2023-04-13 00:27:20 +02:00
|
|
|
QMap <QByteArray, QString> clusters
|
2023-04-08 15:06:36 +02:00
|
|
|
{
|
|
|
|
{"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"}
|
|
|
|
};
|
2023-04-29 15:15:19 +02:00
|
|
|
|
2023-04-08 15:06:36 +02:00
|
|
|
};
|
2023-04-20 13:42:00 +02:00
|
|
|
|
2023-04-24 21:57:35 +02:00
|
|
|
|
2023-04-08 15:06:36 +02:00
|
|
|
#endif // ZIGATEBACKEND_H
|