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 + -
显示快捷键?