public static bool IsEqualTo(this IRpdDataInformation info1, IRpdDataInformation info2) { if (info1.BadPageCounter != info2.BadPageCounter) { return(false); } if (info1.Day != info2.Day) { return(false); } if (info1.DescriptionPageAddress != info2.DescriptionPageAddress) { return(false); } if (info1.FaultWasReaded != info2.FaultWasReaded) { return(false); } if (info1.Hour != info2.Hour) { return(false); } if (info1.LastWrittenPageAddress != info2.LastWrittenPageAddress) { return(false); } if (info1.Minute != info2.Minute) { return(false); } if (info1.Month != info2.Month) { return(false); } if (info1.Number != info2.Number) { return(false); } if (info1.Second != info2.Second) { return(false); } if (info1.Status != info2.Status) { return(false); } if (info1.Year != info2.Year) { return(false); } return(true); }
public void Save(IRpdDataInformation rpdLogInformation) { var bw = new AdvancedBinaryWriter(_stream, false); bw.Write((byte)rpdLogInformation.Number); bw.Write((byte)rpdLogInformation.Status); bw.Write((byte)rpdLogInformation.Day); bw.Write((byte)rpdLogInformation.Month); bw.Write((byte)rpdLogInformation.Year); bw.Write((byte)rpdLogInformation.Hour); bw.Write((byte)rpdLogInformation.Minute); bw.Write((byte)rpdLogInformation.Second); bw.Write((int)rpdLogInformation.DescriptionPageAddress); bw.Write((int)rpdLogInformation.LastWrittenPageAddress); bw.Write((byte)rpdLogInformation.FaultWasReaded); bw.Write((short)rpdLogInformation.BadPageCounter); }
public RpdLogInfoOnLowLevel(IRpdDataInformation rpdDataInformation) { _rpdDataInformation = rpdDataInformation; }
public ISystemConfiguration BuildConfiguration() { var sysconf = new SystemConfigurationSimple(); if (File.Exists(_fileName)) { var raw = File.ReadAllBytes(_fileName); if (raw.Length != FileSize) { throw new Exception("SYSCONF.BIN file size must be " + FileSize); } using (var br = new AdvancedBinaryReader(new MemoryStream(raw, false), false)) { //br.Read(sysconf.Raw, 0, sysconf.Raw.Length); br.BaseStream.Seek(0, SeekOrigin.Begin); //-----------------------------------------------------------0 (0) sysconf.DeviceAddress = br.ReadUInt16(); sysconf.NetAddress = (int)br.ReadUInt32(); var locomotiveAndSectionNumbers = br.ReadUInt16(); sysconf.LocomotiveNumber = locomotiveAndSectionNumbers & 0x7FFF; sysconf.SectionNumber = (locomotiveAndSectionNumbers & 0x8000) > 0 ? 2 : 1; //br.BaseStream.Seek(8, SeekOrigin.Begin); sysconf.FirmwareVersion = br.ReadUInt16(); sysconf.LastWrittenPageAddress = (int)br.ReadUInt32(); sysconf.LastReadedBlockAddress = br.ReadUInt16(); sysconf.BadBlocksCount = br.ReadUInt16(); sysconf.LastWrittenPageNumber = br.ReadUInt16(); sysconf.FirstWrittenAfterResetPageNumber = (int)br.ReadUInt32(); sysconf.PsnLogStartPageNumber = (int)br.ReadUInt32(); sysconf.ArrayDumpPsnStartPageNumber = (int)br.ReadUInt32(); sysconf.FatOffsetFromPageZero = (int)br.ReadUInt32(); sysconf.RpdPagesCountTransmittedToPsnLog = (int)br.ReadUInt32(); sysconf.ConfigurationByte = br.ReadByte(); //-----------------------------------------------------------1 (2048) br.BaseStream.Seek(2048, SeekOrigin.Begin); sysconf.FaultsCount = br.ReadByte(); var rpdLogInfos = new IRpdDataInformation[FaultLogTableRecordsMax]; var rpdLogInfoBuilder = new RpdDataInformationBuilderFromStream(br.BaseStream); for (int i = 0; i < FaultLogTableRecordsMax; ++i) { rpdLogInfos[i] = rpdLogInfoBuilder.Build(); } sysconf.FaultDumpsTable = rpdLogInfos; //-----------------------------------------------------------2 (4096) br.BaseStream.Seek(4096, SeekOrigin.Begin); sysconf.MetersCount = br.ReadByte(); var rpdMeters = new IRpdMeterSystemInformation[MetersTableRecordsMax]; var rpdMeterInfoBuilder = new RpdMeterSystemInformationBuilderFromStream(br.BaseStream); for (int i = 0; i < MetersTableRecordsMax; ++i) { rpdMeters[i] = rpdMeterInfoBuilder.Build(); } sysconf.MetersTable = rpdMeters; //4096 + 1217: br.BaseStream.Seek(4096 + 1217, SeekOrigin.Begin); // установим необходимое смещение var psnRegisterStatusMasks = new byte[PsnRegisterStatusMasksMax]; br.Read(psnRegisterStatusMasks, 0, PsnRegisterStatusMasksMax); sysconf.PsnRegisterStatusMasks = psnRegisterStatusMasks; //4096 + 1238: br.BaseStream.Seek(4096 + 1238, SeekOrigin.Begin); // установим необходимое смещение var dumpRules = new IRpdDumpRule[DumpRulesMax]; var rpdDumpRulesBuilder = new RpdDumpRuleBuilderFromStream(br.BaseStream); for (int i = 0; i < DumpRulesMax; ++i) { dumpRules[i] = rpdDumpRulesBuilder.Build(); } sysconf.DumpRules = dumpRules; //------------------------------------------------------------3 (6144) const int offsetPage3 = 6144; const int offsetPowerOnStartPages = offsetPage3 + 2; const int offsetFixedStartPages = offsetPage3 + 500; br.BaseStream.Seek(offsetPage3, SeekOrigin.Begin); sysconf.CurrentPsnLogNumber = br.ReadUInt16(); br.BaseStream.Seek(offsetPowerOnStartPages, SeekOrigin.Begin); var powerOnOffsetInfos = new List <IPsnDataFragmentInformation>(); var psnLogFragmentInfoBuilder = new PsnDataFragmentInformationBuilderFromStream(br.BaseStream); for (int i = 0; i < PsnLogPowerOnStartPagesMaxCount; ++i) { var psnLogFragmentInfo = psnLogFragmentInfoBuilder.Build(); if (psnLogFragmentInfo.StartOffset >= sysconf.PsnLogStartPageNumber) { powerOnOffsetInfos.Add(psnLogFragmentInfo); } } // —писок инвертируетс¤, т.к. перед записью элементы таблицы смещаютс¤ и последний элемент оказываетс¤ в начале таблицы powerOnOffsetInfos.Reverse(); sysconf.PsnLogPowerUpFragmentInfos = powerOnOffsetInfos; br.BaseStream.Seek(offsetFixedStartPages, SeekOrigin.Begin); // „итаем фиксированные смещени¤: var predefinedFragmentInfos = new List <IPsnDataFragmentInformation>(); for (int i = 0; i < PsnPredefinedFragmentStartInfosMaxCount; ++i) { predefinedFragmentInfos.Add(psnLogFragmentInfoBuilder.Build()); } sysconf.PsnLogPredefinedFragmentInfos = predefinedFragmentInfos; br.BaseStream.Close(); } return(sysconf); } throw new Exception("Cannot find binary file, file " + _fileName + " is not exist"); }