applicationlayer.cs

来自「zwave 无线通讯协议 PC controller 控制器源码」· CS 代码 · 共 1,676 行 · 第 1/5 页

CS
1,676
字号
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="nodeId"></param>
        /// <param name="sucState"></param>
        /// <param name="txOptions"></param>
        /// <param name="capabilities"></param>
        /// <returns>true if ZWaveSUC_SET_SUCCEEDED</returns>
        public bool ZWaveSetSucNodeId(byte nodeId, bool sucState, TXOption txOptions, byte capabilities)
        {
            if (nodeId == _controllerNodeId)
            {
                return ThisSUCNodeId(nodeId, sucState, txOptions, capabilities);
            }
            else
            {
                return OtherSUCNodeId(nodeId, sucState, txOptions, capabilities);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="nodeId"></param>
        /// <param name="txOptions"></param>
        /// <returns></returns>
        public TXStatus ZWaveSendSucId(byte nodeId, TXOption txOptions)
        {
            DataPacket[] res = new DataPacket[2];
            DataPacket req = new DataPacket();
            req.AddPayload(nodeId);
            req.AddPayload((byte)txOptions);
            TXStatus rc = sessionLayer.RequestWithMultipleResponses(DataFrame.CommandType.CmdZWaveSendSucId, req, ref res, true, DEFAULT_TIMEOUT);

            if ((rc == TXStatus.CompleteOk) && (res[1].Length == 1))
            {
                return ((TXStatus)res[1].GetPayload()[0]);
            }
            else
            {
                return rc;
            }
        }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="mode"></param>
    /// <returns></returns>
    public NodeStatus ZWaveRemoveNodeFromNetwork(Mode mode)
    {
      DataPacket res = new DataPacket();
      DataPacket req = new DataPacket();
      req.AddPayload((byte)mode);
      NodeStatus status = NodeStatus.Done;
      if (mode == Mode.NodeStop)
      {
          bool sent = sessionLayer.RequestWithNoResponse(DataFrame.CommandType.CmdZWaveRemoveNodeFromNetwork, req);
          if (!sent)
          {
              status = NodeStatus.Failed;
          }
      }
      else
      {
          TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdZWaveRemoveNodeFromNetwork, req, out res, true);
          if (rc != TXStatus.CompleteOk)
          {
              throw new ApplicationLayerException("CMD_ZWaveREMOVE_NODE_FROM_NETWORK");
          }
          status = (NodeStatus)res.GetPayload()[0];
      }
      return status;
    }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="homeId"></param>
        /// <param name="controllerNode"></param>
        /// <returns></returns>
        public TXStatus ZWaveMemoryGetId(out Int32 homeId, out byte controllerNode)
        {
            DataPacket res;
            DataPacket req = new DataPacket();

            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdMemoryGetId, req, out res);
            if (rc != TXStatus.CompleteOk) throw new ApplicationLayerException("CMD_MEMORY_GET_ID");
            byte[] payload = res.GetPayload();
            homeId = (int)payload[0] << 24 | (int)payload[1] << 16 | (int)payload[2] << 8 | (int)payload[3];
            controllerNode = payload[4];
            return rc;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="buffer"></param>
        /// <param name="length"></param>
        public void ZWaveMemoryPutBuffer(uint offset, byte[] buffer, uint length)
        {
            if (length > 66) length = 66;
            DataPacket[] res = new DataPacket[2];
            DataPacket req = new DataPacket();
            req.AddPayload((byte)(offset >> 8));
            req.AddPayload((byte)(offset & 0xFF));
            req.AddPayload((byte)(length >> 8));
            req.AddPayload((byte)(length & 0xFF));
            req.AddPayload(buffer);
            TXStatus rc = sessionLayer.RequestWithMultipleResponses(DataFrame.CommandType.CmdMemoryPutBuffer, req, ref res, true);
            if (rc != TXStatus.CompleteOk) throw new ApplicationLayerException("CMD_MEMORY_PUT_BUFFER");
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="len"></param>
        /// <returns></returns>
        public byte[] ZWaveMemoryGetBuffer(uint offset, byte len)
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            req.AddPayload((byte)(offset >> 8));
            req.AddPayload((byte)(offset & 0xFF));
            req.AddPayload(len);
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdMemoryGetBuffer, req, out res);
            if (rc != TXStatus.CompleteOk) throw new ApplicationLayerException("CMD_MEMORY_GET_BUFFER");
            return res.GetPayload();
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="offset"></param>
        /// <returns></returns>
        public byte ZWaveMemoryGetByte(uint offset)
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            req.AddPayload((byte)(offset >> 8));
            req.AddPayload((byte)(offset & 0xFF));
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdMemoryGetByte, req, out res);
            if (rc != TXStatus.CompleteOk) throw new ApplicationLayerException("CMD_MEMORY_GET_BYTE");
            return res.GetPayload()[0];
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public TXStatus ZWaveMemoryPutByte(uint offset, byte value)
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            req.AddPayload((byte)(offset >> 8));
            req.AddPayload((byte)(offset & 0xFF));
            req.AddPayload(value);
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdMemoryPutByte, req, out res);
            return rc;
        }


        /// <summary>
        /// 
        /// </summary>
        public void ZWaveSetDefault()
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdZWaveSetDefault, req, out res, true);
            if (rc != TXStatus.CompleteOk)
                throw new ApplicationLayerException("CMD_ZWaveSET_DEFAULT");
            EnumerateNodes();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="mode"></param>
        public void ZWaveSetRFReceiveMode(byte mode)
        {
            DataPacket req = new DataPacket();
            req.AddPayload(mode);
            bool rc = sessionLayer.RequestWithNoResponse(DataFrame.CommandType.CmdZWaveSetRFReceiveMode, req);
            if (!rc) throw new ApplicationLayerException("CMD_ZWaveSET_RF_RECEIVE_MODE");
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="powerLevel"></param>
        /// <returns>The RF Powerlevel set</returns>
        public byte ZWaveRFPowerLevelSet(byte powerLevel)
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            req.AddPayload(powerLevel);
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdZWaveRFPowerLevelSet, req, out res);
            if (rc != TXStatus.CompleteOk)
            {
                throw new ApplicationLayerException("CMD_ZWaveRF_POWER_LEVEL_SET");
            }
            return res.GetPayload()[0];
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="nodeId"></param>
        public void ZWaveLockRoutes(byte nodeId)
        {
            DataPacket req = new DataPacket();
            req.AddPayload(nodeId);
            bool rc = sessionLayer.RequestWithNoResponse(DataFrame.CommandType.CmdLockRouteResponse, req);
            if (!rc) throw new ApplicationLayerException("CMD_LOCK_ROUTE_RESPONSE");
        }

        /// <summary>
        /// 
        /// </summary>
        public void ZWaveReplicationReceiveComplete()
        {
            DataPacket req = new DataPacket();
            bool rc = sessionLayer.RequestWithNoResponse(DataFrame.CommandType.CmdZWaveReplicationCommandComplete, req);
            if (!rc) throw new ApplicationLayerException("CMD_ZWaveREPLICATION_COMMAND_COMPLETE");
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public byte ZWaveGetSucNodeId()
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdZWaveGetSucNodeId, req, out res);
            if (rc != TXStatus.CompleteOk) throw new ApplicationLayerException("CMD_ZWaveGET_SUC_NODE_ID");
            return res.GetPayload()[0];
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="mode"></param>
        /// <returns></returns>
        public NodeStatus ZWaveAddNodeToNetwork(Mode mode)
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            req.AddPayload((byte)mode);
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdZWaveAddNodeToNetwork, req, out res, true);
            if (rc != TXStatus.CompleteOk)
                throw new ApplicationLayerException("CMD_ZWaveADD_NODE_TO_NETWORK:" + mode.ToString());

            return (NodeStatus)res.GetPayload()[0];
        }


        /// <summary>
        /// 
        /// </summary>
        public void ZWaveStopLearnMode()
        {
            DataPacket req = new DataPacket();
            req.AddPayload((byte)Mode.NodeStop);
            bool rc = sessionLayer.RequestWithNoResponse(DataFrame.CommandType.CmdZWaveAddNodeToNetwork, req);
            if (!rc) throw new ApplicationLayerException("CMD_ZWaveADD_NODE_TO_NETWORK");
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="mode"></param>
        /// <returns></returns>
        public NodeStatus ZWaveControllerChange(ControllerChangeMode mode)
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            req.AddPayload((byte)mode);
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdZWaveControllerChange, req, out res, true);
            if (rc != TXStatus.CompleteOk) throw new ApplicationLayerException("CMD_ZWaveCONTROLLER_CHANGE");
            NodeStatus status = (NodeStatus)res.GetPayload()[0];
            return status;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="mode"></param>
        /// <returns></returns>
        public NodeStatus ZWaveCreateNewPrimaryCtrl(CreateNewPrimaryControllerMode mode)
        {
            DataPacket res;
            DataPacket req = new DataPacket();
            req.AddPayload((byte)mode);
            TXStatus rc = sessionLayer.RequestWithResponse(DataFrame.CommandType.CmdZWaveCreateNewPrimary, req, out res, true);
            if (rc != TXStatus.CompleteOk) throw new ApplicationLayerException("CMD_ZWaveCREATE_NEW_PRIMARY");
            NodeStatus status = (NodeStatus)res.GetPayload()[0];
            return status;
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="learnMode"></param>
        /// <returns></returns>
        public bool ZWaveSetLearnMode(bool learnMode)
        {
            DataPacket req = new DataPacket();
            req.AddPayload(Convert.ToByte(learnMode));
            bool rc = sessionLayer.RequestWithNoResponse(DataFrame.CommandType.CmdZWaveSetLearnMode, req);
            if (!rc) throw new ApplicationLayerException("CMD_ZWaveSET_LEARN_MODE");
            return rc;
        }


        /// <summary>
        /// Set Node Information Frame
        /// </summary>
        /// <param na

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?