Beispiel #1
0
        ///<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.
        }
Beispiel #2
0
 ///<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));
 }
Beispiel #3
0
        ///<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));
        }
Beispiel #4
0
        ///<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));
        }