private void ButtonWrite_Click(object sender, EventArgs e) { byte address = MainForm.Address; UInt32 txId = (UInt32)0x600 | address; UInt32 rxId = (UInt32)0x700 | address; UInt32 baudRate = 250000; NiCanInterface = new NiCanInterface("CAN0", false, txId, rxId, baudRate); NiCanInterface.Connect(); NiCanInterface.BusTerminationEnable = true; NiCanInterface.Open(); MainForm.WriteEnabled = false; var network = new Iso15765NetwrorkLayer(NiCanInterface); network.ReadTimeoutMs = 1000; network.Log = Settings.Default.LogEnable; Settings.Default.LogPath = AppConstants.LogPath + "_" + DateTime.Now.ToString(AppConstants.FileNameTimestampFormat) + ".txt"; network.LogPath = Settings.Default.LogPath; var dfu = new AppDfu(network); dfu.ProgressChange += (o, ev) => { MainForm.PoregressValue = ev.ProgressPercentage; MainForm.LabelStatus = ev.UserState.ToString(); }; byte[] firmware = Tools.OpenFile(Settings.Default.LastPath); dfu.Begin(firmware); Action syncCompleted = () => { }; dfu.Completed += (o, ev) => { NiCanInterface.Close(); MainForm.WriteEnabled = true; if (App.SyncContext != null) { App.SyncContext.Post((e1) => { syncCompleted(); }, null); } if (ev.Result is Exception) { MessageBox.Show((ev.Result as Exception).Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }; }
public void _Basic_DFU_Test() { UInt32 txId = 0x603; UInt32 rxId = 0x703; UInt32 baudRate = 250000; var canLink = new NiCanInterface("CAN0", false, txId, rxId, baudRate); canLink.Connect(); canLink.BusTerminationEnable = true; canLink.Open(); var network = new Iso15765NetwrorkLayer(canLink); network.Log = false; var dfu = new AppDfu(network); IoLog.Instance.FilePath = @"D:\io_log.txt"; Console.WriteLine("LogPath:" + IoLog.Instance.FilePath); int firmwareLength = 100; byte[] firmware = new byte[firmwareLength]; for (int i = 0; i < 100; i++) { firmware[i] = (byte)i; } byte blockSize; byte blockSequenceCoutner = 0; int dataPtr = 0; dfu.TesterPresent(0); dfu.DiagSession(AppDfu.Session.ProgrammingMode); dfu.FlashErase(); /*FIGYELJ ARRA HOGY A blockSize csak páros lehet, a szerver 0xFE-jelez vissza!*/ blockSize = (byte)(dfu.RequestDwonLoad(firmware.Length) - 2); /* first block*/ blockSequenceCoutner++; if (firmware.Length > blockSize) { byte[] block = new byte[blockSize]; Buffer.BlockCopy(firmware, 0, block, 0, blockSize); dataPtr = blockSize; dfu.TransferData(blockSequenceCoutner, block); do { blockSequenceCoutner++; if (blockSequenceCoutner == 0xFF) { blockSequenceCoutner = 0; } if (firmware.Length - dataPtr > blockSize) { block = new byte[blockSize]; Buffer.BlockCopy(firmware, dataPtr, block, 0, blockSize); dfu.TransferData(blockSequenceCoutner, block); dataPtr += blockSize; } else { block = new byte[firmware.Length - dataPtr]; Buffer.BlockCopy(firmware, dataPtr, block, 0, firmware.Length - dataPtr); dfu.TransferData(blockSequenceCoutner, block); dataPtr += firmware.Length - dataPtr; } } while (dataPtr != firmware.Length); } else { /*itt vége ha nem kellett hozzá egy egész block...*/ dfu.TransferData(blockSequenceCoutner, firmware); } dfu.TransferExit(); UInt16 expected = Tools.CalcCrc16Ansi(0, firmware); Debug.WriteLine("Cheksum:0x" + dfu.GetChecksum().ToString("X04") + ", Expected 0x" + expected.ToString("X04")); dfu.EcuReset(AppDfu.ResetType.HardReset); }