/// <summary>Set ecu time</summary> /// <param name="NewTime">Date time object of new ecu time</param> /// <returns>True in success</returns> public ReturnValue SetTime(DateTime NewTime) { byte[] TimeBuffer = new byte[7]; // Achtung ! Uhrzeit ist in UTC (ohne DST) ! NewTime = NewTime.ToUniversalTime(); TimeBuffer[0] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Second); // Sekunde in BCD TimeBuffer[1] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Minute); // Minute in BCD TimeBuffer[2] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Hour); // Stunde in BCD TimeBuffer[3] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.DayOfWeek); // Wochentag in BCD TimeBuffer[4] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Day); // Tag (im Monat) in BCD TimeBuffer[5] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Month); // Monat in BCD TimeBuffer[6] = BinaryCodedDecimals.ByteToBCD((byte)(NewTime.Year % 100)); // Jahr (ohne Jahrzehnt) in BCD return(mEcu.Write(Comm.OrderByte.SetTime, (UInt16)TimeBuffer.Length, ref TimeBuffer, 10)); }
/// <summary>Parse byte array buffer to item list</summary> private void Parse() { Items = new List <InternalDataItem>(); int Pos = 0; InternalDataItem it_time = new InternalDataItem(); byte y = BinaryCodedDecimals.BCDToByte(mRawData[6]); byte mo = BinaryCodedDecimals.BCDToByte((byte)(mRawData[5] & 0x1F)); byte d = BinaryCodedDecimals.BCDToByte((byte)(mRawData[4] & 0x3F)); byte h = BinaryCodedDecimals.BCDToByte((byte)(mRawData[2] & 0x1F)); byte mi = BinaryCodedDecimals.BCDToByte((byte)(mRawData[1] & 0x7F)); byte s = BinaryCodedDecimals.BCDToByte((byte)(mRawData[0] & 0x7F)); mo = mo > 12 ? (byte)0 : mo; d = d > 31 ? (byte)0 : d; h = h > 23 ? (byte)0 : h; mi = mi > 59 ? (byte)0 : mi; s = s > 59 ? (byte)0 : s; DateTime dt = new DateTime(y + 2000, mo, d, h, mi, s); it_time.Group = "RTC"; it_time.Name = "ECU Zeit [UTC]"; it_time.ValueString = dt.ToString("dd.MM.yyyy HH:mm:ss"); Items.Add(it_time); Pos = Pos + 6; InternalDataItem it_RtcControl = new InternalDataItem(); it_RtcControl.Group = "RTC"; it_RtcControl.Name = "RtcControl"; it_RtcControl.ValueString = (mRawData[Pos]).ToString(); Items.Add(it_RtcControl); Pos = Pos + 1; InternalDataItem it_EcuStatus = new InternalDataItem(); it_EcuStatus.Group = "RTC"; it_EcuStatus.Name = "EcuStatus"; it_EcuStatus.ValueString = (mRawData[Pos]).ToString(); Items.Add(it_EcuStatus); Pos = Pos + 1; InternalDataItem it_LastThermRegeneration = new InternalDataItem(); it_LastThermRegeneration.Group = "RTC"; it_LastThermRegeneration.Name = "LastThermRegeneration"; it_LastThermRegeneration.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString(); Items.Add(it_LastThermRegeneration); Pos = Pos + 4; InternalDataItem it_FlashAqRingPos = new InternalDataItem(); it_FlashAqRingPos.Group = "RTC"; it_FlashAqRingPos.Name = "FlashAqRingPos"; it_FlashAqRingPos.ValueString = (mRawData[Pos]).ToString(); Items.Add(it_FlashAqRingPos); Pos = Pos + 1; InternalDataItem it_FlashAqStepPos = new InternalDataItem(); it_FlashAqStepPos.Group = "RTC"; it_FlashAqStepPos.Name = "FlashAqStepPos"; it_FlashAqStepPos.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString(); Items.Add(it_FlashAqStepPos); Pos = Pos + 2; InternalDataItem it_FlashErrRingSector = new InternalDataItem(); it_FlashErrRingSector.Group = "RTC"; it_FlashErrRingSector.Name = "FlashErrRingSector"; it_FlashErrRingSector.ValueString = (mRawData[16]).ToString(); Items.Add(it_FlashErrRingSector); Pos = Pos + 1; InternalDataItem it_FlashErrRingAddress = new InternalDataItem(); it_FlashErrRingAddress.Group = "RTC"; it_FlashErrRingAddress.Name = "FlashErrRingAddress"; it_FlashErrRingAddress.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString(); Items.Add(it_FlashErrRingAddress); Pos = Pos + 2; InternalDataItem it_IstKonzentration = new InternalDataItem(); it_IstKonzentration.Group = "RTC"; it_IstKonzentration.Name = "IstKonzentration"; it_IstKonzentration.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString(); Items.Add(it_IstKonzentration); Pos = Pos + 4; InternalDataItem it_Tankinhalt = new InternalDataItem(); it_Tankinhalt.Group = "RTC"; it_Tankinhalt.Name = "Tankinhalt"; if (mSoftwareRevision == 8) { it_Tankinhalt.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString(); Pos = Pos + 2; } else { it_Tankinhalt.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString(); Pos = Pos + 4; } Items.Add(it_Tankinhalt); InternalDataItem it_Dosierimpulse = new InternalDataItem(); it_Dosierimpulse.Group = "RTC"; it_Dosierimpulse.Name = "Dosierimpulse"; it_Dosierimpulse.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString(); Items.Add(it_Dosierimpulse); Pos = Pos + 4; InternalDataItem it_PowerUpCounter = new InternalDataItem(); it_PowerUpCounter.Group = "RTC"; it_PowerUpCounter.Name = "PowerUpCounter"; it_PowerUpCounter.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString(); Items.Add(it_PowerUpCounter); Pos = Pos + 2; InternalDataItem it_BetriebsMinuten = new InternalDataItem(); it_BetriebsMinuten.Group = "RTC"; it_BetriebsMinuten.Name = "BetriebsMinuten"; it_BetriebsMinuten.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString(); Items.Add(it_BetriebsMinuten); Pos = Pos + 4; InternalDataItem it_DosierimpulseTank = new InternalDataItem(); it_DosierimpulseTank.Group = "RTC"; it_DosierimpulseTank.Name = "DosierimpulseTank"; it_DosierimpulseTank.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString(); Items.Add(it_DosierimpulseTank); Pos = Pos + 4; InternalDataItem it_DosierimpulseFilter = new InternalDataItem(); it_DosierimpulseFilter.Group = "RTC"; it_DosierimpulseFilter.Name = "DosierimpulseFilter"; it_DosierimpulseFilter.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString(); Items.Add(it_DosierimpulseFilter); Pos = Pos + 4; InternalDataItem it_Beladungssumme = new InternalDataItem(); it_Beladungssumme.Group = "RTC"; it_Beladungssumme.Name = "Beladungssumme"; it_Beladungssumme.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString(); Items.Add(it_Beladungssumme); Pos = Pos + 4; InternalDataItem it_PressureOffset = new InternalDataItem(); it_PressureOffset.Group = "RTC"; it_PressureOffset.Name = "PressureOffset"; it_PressureOffset.ValueString = (mRawData[Pos]).ToString(); Items.Add(it_PressureOffset); Pos = Pos + 1; InternalDataItem it_LastADOffset = new InternalDataItem(); it_LastADOffset.Group = "RTC"; it_LastADOffset.Name = "LastADOffset"; it_LastADOffset.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString(); Items.Add(it_LastADOffset); Pos = Pos + 2; InternalDataItem it_LoadNotCfgFlag = new InternalDataItem(); it_LoadNotCfgFlag.Group = "RTC"; it_LoadNotCfgFlag.Name = "LoadNotCfgFlag"; it_LoadNotCfgFlag.ValueString = (mRawData[Pos]).ToString(); Items.Add(it_LoadNotCfgFlag); Pos = Pos + 1; InternalDataItem it_SpiFlashDebug = new InternalDataItem(); it_SpiFlashDebug.Group = "RTC"; it_SpiFlashDebug.Name = "SpiFlashDebug"; it_SpiFlashDebug.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString(); Items.Add(it_SpiFlashDebug); Pos = Pos + 2; // free bytes InternalDataItem it_Checksum = new InternalDataItem(); it_Checksum.Group = "RTC"; it_Checksum.Name = "Checksum"; it_Checksum.ValueString = String.Format("0x{0:X4}", BitConverter.ToUInt16(mRawData, Pos)); Items.Add(it_Checksum); Pos = Pos + 2; }