public void WriteFlash() { var ctx1 = new ProtocolWritePageRx(0x80, Mode.WriteFlashPage); ctx1.PageNumber = 0xFFFFFF; ctx1.PageLineNumber = 15; var ctx2 = new ProtocolWritePageRx(0x80, Mode.WriteFlashPage); var buf = ctx1.Pack(); Assert.IsTrue(ctx2.UnPack(buf)); Assert.AreEqual(0xFFFFFF, ctx2.PageNumber); Assert.AreEqual(15, ctx2.PageLineNumber); Console.WriteLine(buf.ToString()); var crx1 = new ProtocolWritePageTx(0x81, Mode.WriteFlashPage); crx1.PageNumber = 0x7FFF; crx1.PageLineNumber = 1; crx1.Line[0] = 0xE4; crx1.Line[7] = 0xFE; crx1.Line[15] = 0x45; var crx2 = new ProtocolWritePageTx(0x81, Mode.WriteFlashPage); buf = crx1.Pack(); Assert.IsTrue(crx2.UnPack(buf)); Assert.AreEqual(0x7FFF, crx2.PageNumber); Assert.AreEqual(1, crx2.PageLineNumber); Assert.AreEqual <byte>(0xE4, crx2.Line[0]); Assert.AreEqual <byte>(0xFE, crx2.Line[7]); Assert.AreEqual <byte>(0x45, crx2.Line[15]); Console.WriteLine(buf.ToString()); }
public override bool Run(IInTaskManager taskManager) { Mode mode = (memoryType == MemoryType.FLASH) ? Mode.WriteFlashPage : Mode.WriteEepromPage; var protocolTx = new ProtocolWritePageTx(serialPortSettings.HeaderTX, mode); var protocolRx = new ProtocolWritePageRx(serialPortSettings.HeaderRX, mode); var bufferTx = new IOBufferWritePageTx(); using (var sp = new SerialPortManager(portName, (int)serialPortSettings.BaudRate, serialPortSettings.Parity, serialPortSettings.StopBits, 50, SerialPort.InfiniteTimeout)) { for (;;) { taskManager.IfCancellation(); if (IfReceived(sp, protocolTx, bufferTx, taskManager.SynchronizationContext)) { protocolRx.PageNumber = protocolTx.PageNumber; protocolRx.PageLineNumber = protocolTx.PageLineNumber; var page = memory.GetPage(protocolTx.PageNumber); page.SetLine(protocolTx.PageLineNumber, protocolTx.Line); memory.SetPage(protocolTx.PageNumber, page); Transmit(sp, protocolRx, taskManager.SynchronizationContext); } } } }
public override bool Run(IInTaskManager <double> taskManager) { Mode mode = (memoryType == MemoryType.FLASH) ? Mode.WriteFlashPage : Mode.WriteEepromPage; var txProtocol = new ProtocolWritePageTx(serialPortSettings.HeaderTX, mode); var rxProtocol = new ProtocolWritePageRx(serialPortSettings.HeaderRX, mode); var bufferRx = new IOBufferWritePageRx(); using (var sp = new SerialPortManager(portName, (int)serialPortSettings.BaudRate, serialPortSettings.Parity, serialPortSettings.StopBits, 50, SerialPort.InfiniteTimeout)) { var nonEmptyPages = GetNonEmptyPagesWithNumber(); Stopwatch stopWatch = new Stopwatch(); int pageCount = 0; foreach (var page in nonEmptyPages) { for (int pageLineNumber = 0; pageLineNumber < Page.NumberOfLines; pageLineNumber++) { txProtocol.PageNumber = page.Key; txProtocol.PageLineNumber = pageLineNumber; txProtocol.Line = page.Value.GetLine(pageLineNumber); for (;;) { Transmit(sp, txProtocol, taskManager.SynchronizationContext); RestartReceiv(); stopWatch.Restart(); while (stopWatch.Elapsed < TimeSpan.FromMilliseconds(100)) { taskManager.IfCancellation(); if (IfReceived(sp, rxProtocol, bufferRx, taskManager.SynchronizationContext)) { if (rxProtocol.PageNumber == page.Key) { if (rxProtocol.PageLineNumber == pageLineNumber) { goto label1; } else { RestartReceiv(); } } else { RestartReceiv(); } } } } label1 :; } taskManager.OnProgress((double)pageCount++ / (nonEmptyPages.Count - 1) * 100.00); } Thread.Sleep(1000); return(true); } }