protected override void OnHandledInternal(DataReceivedUnit ou) { ou.SetNextActionItems(); byte[] command = ReceivedAchData.Command; var scheme = (SecuritySchemes)ReceivedAchData.SecurityScheme; bool isSuportedScheme = IsSupportedScheme(_network, command, scheme); if (command != null && command.Length > 1 && isSuportedScheme) { if (command[1] == COMMAND_CLASS_BASIC.BASIC_GET.ID) { ApiOperation sendData = null; var data = new COMMAND_CLASS_BASIC.BASIC_REPORT() { value = Value }; sendData = new SendDataExOperation(ReceivedAchData.DestNodeId, ReceivedAchData.SrcNodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } else if (command[1] == COMMAND_CLASS_BASIC.BASIC_SET.ID) { var basicSetCommand = (COMMAND_CLASS_BASIC.BASIC_SET)command; Value = basicSetCommand.value; } } }
/// <summary>ZCB_UpdateStatusSuccess</summary> private ActionBase SendFwuMdStatusReport(byte nodeId, byte reportStatus, SecuritySchemes scheme) { var fwuMdRequestReport = new COMMAND_CLASS_FIRMWARE_UPDATE_MD_V5.FIRMWARE_UPDATE_MD_STATUS_REPORT() { status = reportStatus }; var ret = new SendDataExOperation(nodeId, fwuMdRequestReport, TxOptions, scheme); return(ret); }
protected override void CreateInstance() { _powerLevelGet = new RFPowerLevelGetOperation(); _powerLevelSet = new RFPowerLevelSetOperation(0); _sendTest = new SendTestFrameOperation(0, 0x06); _sendPowerLevelReport = new SendDataExOperation(0, null, TransmitOptions.TransmitOptionAcknowledge, SecuritySchemes.NONE); _sendPowerLevelReport.SubstituteSettings.SetFlag(SubstituteFlags.DenySupervision); _sendPowerLevelTestNodeReport = new SendDataExOperation(0, null, TransmitOptions.TransmitOptionAcknowledge, SecuritySchemes.NONE); _sendPowerLevelTestNodeReport.SubstituteSettings.SetFlag(SubstituteFlags.DenySupervision); base.CreateInstance(); }
/// <summary>handleCommandClassFWUpdate</summary> private ActionBase SendFwuMdReport(byte nodeId, SecuritySchemes scheme) { var fwuMdReport = new COMMAND_CLASS_FIRMWARE_UPDATE_MD_V5.FIRMWARE_MD_REPORT() { manufacturerId = MANUFACTURE_ID, firmware0Id = FIRMWARE_ID, firmwareUpgradable = 0xFF, maxFragmentSize = Tools.GetBytes(MAX_FRAGMENT_SIZE).Skip(2).ToArray(), }; var ret = new SendDataExOperation(nodeId, fwuMdReport, TxOptions, scheme); return(ret); }
protected override void OnHandledInternal(DataReceivedUnit ou) { ou.SetNextActionItems(); byte nodeId = ReceivedAchData.SrcNodeId; byte[] command = ReceivedAchData.Command; var scheme = (SecuritySchemes)ReceivedAchData.SecurityScheme; bool isSuportedScheme = IsSupportedScheme(_network, command, scheme); if (isSuportedScheme && command != null && command.Length > 1) { if (command[1] == COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_INTERVAL_CAPABILITIES_GET.ID) { var cmd = (COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_INTERVAL_CAPABILITIES_GET)command; var rpt = new COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_INTERVAL_CAPABILITIES_REPORT() { minimumWakeUpIntervalSeconds = new byte[] { 0x00, 0x00, 0x3C }, maximumWakeUpIntervalSeconds = new byte[] { 0x01, 0x51, 0x80 }, defaultWakeUpIntervalSeconds = new byte[] { 0x00, 0x01, 0x2C }, wakeUpIntervalStepSeconds = new byte[] { 0x00, 0x00, 0x3C } }; var sendData = new SendDataExOperation(nodeId, rpt, TxOptions, scheme); ou.SetNextActionItems(sendData); } else if (command[1] == COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_INTERVAL_GET.ID) { var cmd = (COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_INTERVAL_GET)command; var rpt = new COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_INTERVAL_REPORT() { seconds = _wakeupDelay }; var sendData = new SendDataExOperation(nodeId, rpt, TxOptions, scheme); ou.SetNextActionItems(sendData); } else if (command[1] == COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_INTERVAL_SET.ID) { var cmd = (COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_INTERVAL_SET)command; _wakeupDelay = cmd.seconds; } else if (command[1] == COMMAND_CLASS_WAKE_UP_V2.WAKE_UP_NO_MORE_INFORMATION.ID) { _disableRFReceiveOperation.NewToken(); ou.SetNextActionItems(_disableRFReceiveOperation); } } }
/// <summary>CmdClassFirmwareUpdateMdGet</summary> private ActionBase SendFwuMdGet(byte nodeId, ushort fwuReportNumber, SecuritySchemes scheme) { _lastUsedReportNumber = fwuReportNumber; var reportNumber = Tools.GetBytes(fwuReportNumber); var fwuMdGet = new COMMAND_CLASS_FIRMWARE_UPDATE_MD_V5.FIRMWARE_UPDATE_MD_GET() { numberOfReports = 0x01, reportNumber2 = reportNumber[1], properties1 = new COMMAND_CLASS_FIRMWARE_UPDATE_MD_V5.FIRMWARE_UPDATE_MD_GET.Tproperties1() { reportNumber1 = reportNumber[0] } }; var ret = new SendDataExOperation(nodeId, fwuMdGet, TxOptions, scheme); return(ret); }
protected override void OnHandledInternal(DataReceivedUnit ou) { ou.SetNextActionItems(); byte nodeId = ReceivedAchData.SrcNodeId; byte[] command = ReceivedAchData.Command; var scheme = (SecuritySchemes)ReceivedAchData.SecurityScheme; bool isSuportedScheme = IsSupportedScheme(_network, command, scheme); if (command != null && command.Length > 1 && isSuportedScheme) { if (command[1] == COMMAND_CLASS_VERSION.VERSION_GET.ID) { ApiOperation sendData = null; var data = new COMMAND_CLASS_VERSION.VERSION_REPORT(); sendData = new SendDataExOperation(nodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } } }
//TODO: //MULTI_CHANNEL_END_POINT_FIND //MULTI_INSTANCE_CMD_ENCAP //MULTI_INSTANCE_GET protected override void OnHandledInternal(DataReceivedUnit ou) { ou.SetNextActionItems(); byte nodeId = ReceivedAchData.SrcNodeId; byte[] command = ReceivedAchData.Command; var scheme = (SecuritySchemes)ReceivedAchData.SecurityScheme; bool isSuportedScheme = IsSupportedScheme(_network, command, scheme); if (command != null && command.Length > 1 && isSuportedScheme) { if (command[1] == COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_END_POINT_GET.ID) { var cmd = (COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_END_POINT_GET)command; var rpt = new COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_END_POINT_REPORT() { properties1 = new COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_END_POINT_REPORT.Tproperties1() { res1 = 0x00, identical = 0x01, dynamic = 0x00, }, properties2 = new COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_END_POINT_REPORT.Tproperties2() { individualEndPoints = END_POINTS_COUNT, res2 = 0x00 }, properties3 = new COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_END_POINT_REPORT.Tproperties3() { } }; var sendData = new SendDataExOperation(nodeId, rpt, TxOptions, scheme); ou.SetNextActionItems(sendData); } else if (command[1] == COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_CAPABILITY_GET.ID) { var cmd = (COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_CAPABILITY_GET)command; if (cmd.properties1.endPoint > 0 && cmd.properties1.endPoint <= END_POINTS_COUNT) { var rpt = new COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_CAPABILITY_REPORT() { genericDeviceClass = GENERIC_DEVICE_CLASS, specificDeviceClass = SPECIFIC_DEVICE_CLASS, properties1 = { dynamic = 0, endPoint = cmd.properties1.endPoint }, commandClass = GetCapability(cmd.properties1.endPoint) }; var sendData = new SendDataExOperation(nodeId, rpt, TxOptions, scheme); ou.SetNextActionItems(sendData); } } else if (command[1] == COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_AGGREGATED_MEMBERS_GET.ID) { var cmd = (COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_AGGREGATED_MEMBERS_GET)command; if (cmd.properties1.aggregatedEndPoint > 0 && cmd.properties1.aggregatedEndPoint <= END_POINTS_COUNT) { var rpt = new COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_AGGREGATED_MEMBERS_REPORT() { properties1 = { aggregatedEndPoint = cmd.properties1.aggregatedEndPoint, res = 0 }, numberOfBitMasks = 0x01 }; rpt.aggregatedMembersBitMask.Add(0x03); var sendData = new SendDataExOperation(nodeId, rpt, TxOptions, scheme); ou.SetNextActionItems(sendData); } } else if (command[1] == COMMAND_CLASS_MULTI_CHANNEL_V4.MULTI_CHANNEL_CMD_ENCAP.ID) { var data = UnboxAndGetResponce(command); if (data != null && data.Length > 0) { var sendData = new SendDataExOperation(nodeId, data, TxOptions, scheme); ou.SetNextActionItems(sendData); } } } }
protected override void OnHandledInternal(DataReceivedUnit ou) { ou.SetNextActionItems(); byte nodeId = ReceivedAchData.SrcNodeId; byte[] command = ReceivedAchData.Command; var scheme = (SecuritySchemes)ReceivedAchData.SecurityScheme; bool isSuportedScheme = IsSupportedScheme(_network, command, scheme); if (command != null && command.Length > 1 && isSuportedScheme) { if (command[1] == COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_GET.ID) { var associationGetCmd = (COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_GET)command; var requestedGroupId = associationGetCmd.groupingIdentifier; if (requestedGroupId == GroupId) { ApiOperation sendData = null; var data = new COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_REPORT() { groupingIdentifier = GroupId, nodeid = AssociatedNodeIds, maxNodesSupported = MaxNodesSupported }; sendData = new SendDataExOperation(nodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } else if (requestedGroupId != 0x00) { ApiOperation sendData = null; var data = new COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_REPORT() { groupingIdentifier = requestedGroupId, nodeid = AssociatedNodeIds, maxNodesSupported = MaxNodesSupported }; sendData = new SendDataExOperation(nodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } } else if (command[1] == COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_SET.ID) { var associationSetCmd = (COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_SET)command; var requestedGroupId = associationSetCmd.groupingIdentifier; if (requestedGroupId == GroupId) { foreach (var associateNodeId in associationSetCmd.nodeId) { if (!AssociatedNodeIds.Contains(associateNodeId)) { AssociatedNodeIds.Add(associateNodeId); } } } else if (requestedGroupId != 0x00) { foreach (var associateNodeId in associationSetCmd.nodeId) { if (!AssociatedNodeIds.Contains(associateNodeId)) { AssociatedNodeIds.Add(associateNodeId); } } } } else if (command[1] == COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_REMOVE.ID) { var associationRemoveCmd = (COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_REMOVE)command; var requestedGroupId = associationRemoveCmd.groupingIdentifier; if (requestedGroupId == GroupId) { foreach (var associateNodeId in associationRemoveCmd.nodeId) { if (AssociatedNodeIds.Contains(associateNodeId)) { AssociatedNodeIds.Remove(associateNodeId); } } } else if (requestedGroupId != 0x00) { foreach (var associateNodeId in associationRemoveCmd.nodeId) { if (AssociatedNodeIds.Contains(associateNodeId)) { AssociatedNodeIds.Remove(associateNodeId); } } } } else if (command[1] == COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_GROUPINGS_GET.ID) { ApiOperation sendData = null; var data = new COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_GROUPINGS_REPORT() { supportedGroupings = 0x01 }; sendData = new SendDataExOperation(nodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } else if (command[1] == COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_SPECIFIC_GROUP_GET.ID) { ApiOperation sendData = null; var data = new COMMAND_CLASS_ASSOCIATION_V2.ASSOCIATION_SPECIFIC_GROUP_REPORT() { group = 0 }; sendData = new SendDataExOperation(nodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } } }
protected override void OnHandledInternal(DataReceivedUnit ou) { ou.SetNextActionItems(); byte nodeId = ReceivedAchData.SrcNodeId; byte[] command = ReceivedAchData.Command; var scheme = (SecuritySchemes)ReceivedAchData.SecurityScheme; bool isSuportedScheme = IsSupportedScheme(_network, command, scheme); if (command != null && command.Length > 1 && isSuportedScheme) { if (command[1] == COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_GET.ID) { var cmd = (COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_GET)command; if (cmd.groupingIdentifier == _groupId) { var rpt = new COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_REPORT() { groupingIdentifier = _groupId, nodeId = _associatedNodeIds, maxNodesSupported = _maxNodesSupported }; var sendData = new SendDataExOperation(nodeId, rpt, TxOptions, scheme); ou.SetNextActionItems(sendData); } } else if (command[1] == COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_GROUPINGS_GET.ID) { var cmd = (COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_GROUPINGS_GET)command; { var rpt = new COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_GROUPINGS_REPORT() { supportedGroupings = 0x01 }; var sendData = new SendDataExOperation(nodeId, rpt, TxOptions, scheme); ou.SetNextActionItems(sendData); } } else if (command[1] == COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_REMOVE.ID) { var cmd = (COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_REMOVE)command; if (cmd.groupingIdentifier == _groupId) { foreach (var associateNodeId in cmd.nodeId) { if (!_associatedNodeIds.Contains(associateNodeId)) { _associatedNodeIds.Remove(associateNodeId); } } } } else if (command[1] == COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_SET.ID) { var cmd = (COMMAND_CLASS_MULTI_CHANNEL_ASSOCIATION_V3.MULTI_CHANNEL_ASSOCIATION_SET)command; if (cmd.groupingIdentifier == _groupId) { foreach (var associateNodeId in cmd.nodeId) { if (!_associatedNodeIds.Contains(associateNodeId)) { _associatedNodeIds.Add(associateNodeId); } } } } } }
protected override void OnHandledInternal(DataReceivedUnit ou) { ou.SetNextActionItems(); byte nodeId = ReceivedAchData.SrcNodeId; byte[] command = ReceivedAchData.Command; var scheme = (SecuritySchemes)ReceivedAchData.SecurityScheme; bool isSuportedScheme = IsSupportedScheme(_network, command, scheme); if (command != null && command.Length > 1 && isSuportedScheme) { if (command[1] == COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_NAME_GET.ID) { var associationNameGetCmd = (COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_NAME_GET)command; var requestedGroupId = associationNameGetCmd.groupingIdentifier; if (requestedGroupId == GroupId) { ApiOperation sendData = null; var data = new COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_NAME_REPORT() { groupingIdentifier = GroupId, lengthOfName = (byte)Encoding.UTF8.GetByteCount(GroupName), name = Encoding.UTF8.GetBytes(GroupName) }; sendData = new SendDataExOperation(nodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } } else if (command[1] == COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_INFO_GET.ID) { var associationInfoGetCmd = (COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_INFO_GET)command; var requestedGroupId = associationInfoGetCmd.groupingIdentifier; ApiOperation sendData = null; var data = new COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_INFO_REPORT() { properties1 = new COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_INFO_REPORT.Tproperties1() { listMode = associationInfoGetCmd.properties1.listMode, groupCount = 0x01 }, vg1 = new List <COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_INFO_REPORT.TVG1>() { new COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_INFO_REPORT.TVG1() { groupingIdentifier = GroupId, mode = 0, profile1 = 0, profile2 = 1 } } }; sendData = new SendDataExOperation(nodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } else if (command[1] == COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_COMMAND_LIST_GET.ID) { var associationCommandListGetCmd = (COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_COMMAND_LIST_GET)command; var requestedGroupId = associationCommandListGetCmd.groupingIdentifier; ApiOperation sendData = null; var data = new COMMAND_CLASS_ASSOCIATION_GRP_INFO_V3.ASSOCIATION_GROUP_COMMAND_LIST_REPORT() { groupingIdentifier = GroupId, listLength = 0x02, command = new List <byte>() { COMMAND_CLASS_BASIC.ID, COMMAND_CLASS_BASIC.BASIC_GET.ID, } }; sendData = new SendDataExOperation(nodeId, data, TxOptions, TxSecOptions, scheme, TxOptions2); ou.SetNextActionItems(sendData); } } }