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); } }
public override List <int> Run(IInTaskManager <double> taskManager) { Mode mode = (memoryType == MemoryType.FLASH) ? Mode.IsEmptyFlashPage : Mode.IsEmptyEepromPage; var txProtocol = new ProtocolIsEmptyPageTx(serialPortSettings.HeaderTX, mode); var rxProtocol = new ProtocolIsEmptyPageRx(serialPortSettings.HeaderRX, mode); var bufferRx = new IOBufferIsEmptyPageRx(); using (var sp = new SerialPortManager(portName, (int)serialPortSettings.BaudRate, serialPortSettings.Parity, serialPortSettings.StopBits, 50, SerialPort.InfiniteTimeout)) { List <int> notEmptyPages = new List <int>(); int numberOfPages = GetNumberOfPages(); int pageCounter = 0; Stopwatch stopWatch = new Stopwatch(); for (;;) { label1: if (pageCounter == numberOfPages) { return(notEmptyPages); } txProtocol.PageNumber = pageCounter; 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 == pageCounter) { if (!rxProtocol.IsEmpty) { notEmptyPages.Add(rxProtocol.PageNumber); } pageCounter++; taskManager.OnProgress((double)pageCounter / numberOfPages * 100.00); goto label1; } else { RestartReceiv(); } } } } } }
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); } }