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); }
public void NetworkLayerToApplicationLayer(NetworkLayerProtocol networkLayer) { //ApplicationLayerProtocol app = ApplicationLayerProtocol.Parse(networkLayer); }
public List <byte> getDataFromNetworkLayer(NetworkLayerProtocol networkLayerFrame) { A_Data = networkLayerFrame.N_Data; return(A_Data); }