Exemplo n.º 1
0
        public static NetworkLayerProtocol Parse(DataLinkLayer dataLinkData)
        {
            NetworkLayerProtocol networkData = new NetworkLayerProtocol();

            networkData.N_AI      = dataLinkData.Address;
            networkData.N_PCIType = (byte)(dataLinkData.ListDllData[0] & 0xF0);

            if (networkData.N_PCIType == 0x01)
            {
                networkData.SF_DL = (byte)(dataLinkData.ListDllData[0] & 0x0F);
                if ((networkData.SF_DL > 7) || (networkData.SF_DL == 0))
                {
                    throw new Exception("单帧长度错误");
                }
                networkData.N_PCI = networkData.GetSFN_PCI(networkData.N_PCIType, networkData.SF_DL);
                dataLinkData.ListDllData.RemoveRange(0, 1);
                networkData.N_Data = dataLinkData.ListDllData;
            }
            else if (networkData.N_PCIType == 0x03)
            {
                networkData.FC_FS = (byte)(dataLinkData.ListDllData[0] & 0xF0);
                if (networkData.FC_FS == 3)
                {
                    throw new Exception("Buffer 溢出");
                }
                //networkData.N_PCI = networkData.GetFCN_PCI();
                //dataLinkData.L_Data.RemoveRange(0, 3);
                //networkData.N_Data = dataLinkData.L_Data;
            }
            else
            {
                if (networkData.N_PCIType == 0x01)
                {
                    networkData.FF_DL = networkData.GetFF_DL(dataLinkData.ListDllData[0], dataLinkData.ListDllData[1]);
                    if ((networkData.FF_DL < 8) || (networkData.FF_DL > 0xFFF))
                    {
                        throw new Exception("首帧长度错误");
                    }

                    networkData.N_PCI = networkData.GetFFN_PCI(networkData.N_PCIType, networkData.FF_DL);
                    dataLinkData.ListDllData.RemoveRange(0, 2);
                    networkData.N_Data.AddRange(dataLinkData.ListDllData);
                }
                else
                {
                    networkData.CF_SN = (byte)(dataLinkData.ListDllData[0] & 0xF0);
                    if ((networkData.CF_SN > 15) || (networkData.CF_SN < 0))
                    {
                        throw new Exception("连续帧序号错误");
                    }

                    networkData.N_PCI = networkData.GetCFN_PCI(networkData.N_PCIType, dataLinkData.ListDllData[0]);
                    dataLinkData.ListDllData.RemoveRange(0, 1);
                    networkData.N_Data.AddRange(dataLinkData.ListDllData);
                }
            }

            return(networkData);
        }
Exemplo n.º 2
0
 public void NetworkLayerToApplicationLayer(NetworkLayerProtocol networkLayer)
 {
     //ApplicationLayerProtocol app = ApplicationLayerProtocol.Parse(networkLayer);
 }
Exemplo n.º 3
0
 public List <byte> getDataFromNetworkLayer(NetworkLayerProtocol networkLayerFrame)
 {
     A_Data = networkLayerFrame.N_Data;
     return(A_Data);
 }