///<summary> ///Generates disconnect request. /// </summary> ///<returns> ///Disconnect request. ///</returns> private void GenerateDisconnectRequest() { //Return error if connection is not established. if (!Settings.Connected && !Settings.IsAuthenticationRequired && !Settings.AllowAnonymousAccess) { replyData.Add(GenerateConfirmedServiceError(ConfirmedServiceError.InitiateError, ServiceError.Service, (byte)Service.Unsupported)); return; } replyData.SetUInt8(0x81); // FromatID replyData.SetUInt8(0x80); // GroupID replyData.SetUInt8(0); // Length replyData.SetUInt8(HDLCInfo.MaxInfoTX); replyData.SetUInt8(GXCommon.GetSize(Limits.MaxInfoTX)); replyData.Add(Limits.MaxInfoTX); replyData.SetUInt8(HDLCInfo.MaxInfoRX); replyData.SetUInt8(GXCommon.GetSize(Limits.MaxInfoRX)); replyData.Add(Limits.MaxInfoRX); replyData.SetUInt8(HDLCInfo.WindowSizeTX); replyData.SetUInt8(GXCommon.GetSize(Limits.WindowSizeTX)); replyData.Add(Limits.WindowSizeTX); replyData.SetUInt8(HDLCInfo.WindowSizeRX); replyData.SetUInt8(GXCommon.GetSize(Limits.WindowSizeRX)); replyData.Add(Limits.WindowSizeRX); int len = replyData.Position - 3; replyData.SetUInt8(2, (byte)len); // Length. }
///<summary> ///Parse SNRM Request. If server do not accept client empty byte array is returned. /// </summary> ///<returns> ///Returns returned UA packet. ///</returns> private void HandleSnrmRequest() { Reset(true); replyData.SetUInt8(0x81); // FromatID replyData.SetUInt8(0x80); // GroupID replyData.SetUInt8(0); // Length replyData.SetUInt8(HDLCInfo.MaxInfoTX); replyData.SetUInt8(GXCommon.GetSize(Limits.MaxInfoTX)); replyData.Add(Limits.MaxInfoTX); replyData.SetUInt8(HDLCInfo.MaxInfoRX); replyData.SetUInt8(GXCommon.GetSize(Limits.MaxInfoRX)); replyData.Add(Limits.MaxInfoRX); replyData.SetUInt8(HDLCInfo.WindowSizeTX); replyData.SetUInt8(GXCommon.GetSize(Limits.WindowSizeTX)); replyData.Add(Limits.WindowSizeTX); replyData.SetUInt8(HDLCInfo.WindowSizeRX); replyData.SetUInt8(GXCommon.GetSize(Limits.WindowSizeRX)); replyData.Add(Limits.WindowSizeRX); replyData.SetUInt8(2, (byte)(replyData.Size - 3)); }
///<summary> ///Generates disconnect request. /// </summary> ///<returns> ///Disconnect request. ///</returns> private byte[][] GenerateDisconnectRequest() { GXByteBuffer buff; if (this.InterfaceType == InterfaceType.WRAPPER) { buff = new GXByteBuffer(2); buff.SetUInt8(0x63); buff.SetUInt8(0x0); return(GXDLMS.SplitToWrapperFrames(Settings, buff)); } else { buff = new GXByteBuffer(22); buff.SetUInt8(0x81); // FromatID buff.SetUInt8(0x80); // GroupID buff.SetUInt8(0); // Length buff.SetUInt8(HDLCInfo.MaxInfoTX); buff.SetUInt8(GXCommon.GetSize(Limits.MaxInfoTX)); buff.Add(Limits.MaxInfoTX); buff.SetUInt8(HDLCInfo.MaxInfoRX); buff.SetUInt8(GXCommon.GetSize(Limits.MaxInfoRX)); buff.Add(Limits.MaxInfoRX); buff.SetUInt8(HDLCInfo.WindowSizeTX); buff.SetUInt8(GXCommon.GetSize(Limits.WindowSizeTX)); buff.Add(Limits.WindowSizeTX); buff.SetUInt8(HDLCInfo.WindowSizeRX); buff.SetUInt8(GXCommon.GetSize(Limits.WindowSizeRX)); buff.Add(Limits.WindowSizeRX); int len = buff.Position - 3; buff.SetUInt8(2, (byte)len); // Length. } return(GXDLMS.SplitToHdlcFrames(Settings, (byte)Command.Ua, buff)); }
///<summary> ///Parse SNRM Request. If server do not accept client empty byte array is returned. /// </summary> ///<returns> ///Returns returned UA packet. ///</returns> private byte[][] HandleSnrmRequest() { GXByteBuffer bb = new GXByteBuffer(25); bb.SetUInt8(0x81); // FromatID bb.SetUInt8(0x80); // GroupID bb.SetUInt8(0); // Length bb.SetUInt8(HDLCInfo.MaxInfoTX); bb.SetUInt8(GXCommon.GetSize(Limits.MaxInfoTX)); bb.Add(Limits.MaxInfoTX); bb.SetUInt8(HDLCInfo.MaxInfoRX); bb.SetUInt8(GXCommon.GetSize(Limits.MaxInfoRX)); bb.Add(Limits.MaxInfoRX); bb.SetUInt8(HDLCInfo.WindowSizeTX); bb.SetUInt8(GXCommon.GetSize(Limits.WindowSizeTX)); bb.Add(Limits.WindowSizeTX); bb.SetUInt8(HDLCInfo.WindowSizeRX); bb.SetUInt8(GXCommon.GetSize(Limits.WindowSizeRX)); bb.Add(Limits.WindowSizeRX); bb.SetUInt8(2, (byte)(bb.Size - 3)); return(GXDLMS.SplitToHdlcFrames(Settings, (byte)Command.Ua, bb)); }