public override bool Run(IInTaskManager taskManager) { Mode mode = (memoryType == MemoryType.FLASH) ? Mode.ReadFlashPage : Mode.ReadEepromPage; var protocolTx = new ProtocolReadPageTx(serialPortSettings.HeaderTX, mode); var protocolRx = new ProtocolReadPageRx(serialPortSettings.HeaderRX, mode); var bufferTx = new IOBufferReadPageTx(); 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; protocolRx.Line = memory.GetPage(protocolTx.PageNumber).GetLine(protocolTx.PageLineNumber); Transmit(sp, protocolRx, taskManager.SynchronizationContext); RestartReceiv(); } } } }
public void ReadFlash() { var ctx1 = new ProtocolReadPageTx(0x80, Mode.ReadFlashPage); ctx1.PageNumber = 0xFFFFFF; ctx1.PageLineNumber = 15; var ctx2 = new ProtocolReadPageTx(0x80, Mode.ReadFlashPage); 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 ProtocolReadPageRx(0x81, Mode.ReadFlashPage); crx1.PageNumber = 0x7FFF; crx1.PageLineNumber = 1; crx1.Line[0] = 0xE4; crx1.Line[7] = 0xFE; crx1.Line[15] = 0x45; var crx2 = new ProtocolReadPageRx(0x81, Mode.ReadFlashPage); 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 IMemory Run(IInTaskManager <double> taskManager) { Mode mode = (memoryType == MemoryType.FLASH) ? Mode.ReadFlashPage : Mode.ReadEepromPage; var txProtocol = new ProtocolReadPageTx(serialPortSettings.HeaderTX, mode); var rxProtocol = new ProtocolReadPageRx(serialPortSettings.HeaderRX, mode); var bufferRx = new IOBufferReadPageRx(); using (var sp = new SerialPortManager(portName, (int)serialPortSettings.BaudRate, serialPortSettings.Parity, serialPortSettings.StopBits, 50, SerialPort.InfiniteTimeout)) { IMemory memory = new Memory((memoryType == MemoryType.FLASH) ? processor.FlashSize : processor.EepromSize); Stopwatch stopWatch = new Stopwatch(); int pageCounter = 0; foreach (var pageNumber in numberOfPages) { Page page = new Page(); txProtocol.PageNumber = pageNumber; for (int pageLineNumber = 0; pageLineNumber < Page.NumberOfLines; pageLineNumber++) { txProtocol.PageLineNumber = 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 == pageNumber) { if (rxProtocol.PageLineNumber == pageLineNumber) { goto label1; } else { RestartReceiv(); } } else { RestartReceiv(); } } } } label1: page.SetLine(pageLineNumber, rxProtocol.Line); } memory.SetPage(pageNumber, page); pageCounter++; taskManager.OnProgress((double)pageCounter / numberOfPages.Count * 100.00); } Thread.Sleep(1000); return(memory); } }