public override bool Run(IInTaskManager <double> taskManager) { Mode mode = (memoryType == MemoryType.FLASH) ? Mode.EraseFlashPage : Mode.EraseEepromPage; var txProtocol = new ProtocolErasePageTx(serialPortSettings.HeaderTX, mode); var rxProtocol = new ProtocolErasePageRx(serialPortSettings.HeaderRX, mode); var bufferRx = new IOBufferErasePageRx(); using (var sp = new SerialPortManager(portName, (int)serialPortSettings.BaudRate, serialPortSettings.Parity, serialPortSettings.StopBits, 50, SerialPort.InfiniteTimeout)) { int numberOfPages = GetNumberOfPages(); int pageCounter = 0; Stopwatch stopWatch = new Stopwatch(); for (;;) { label1: if (pageCounter == numberOfPages) { Thread.Sleep(1000); return(true); } 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) { pageCounter++; taskManager.OnProgress((double)pageCounter / numberOfPages * 100.00); goto label1; } else { RestartReceiv(); } } } } } }
public override IOBuffer Pack() { var buffer = new IOBufferErasePageRx(); buffer[0] = Header; buffer[1] = Confirmation; buffer[2] = (byte)Regim; buffer[3] = (byte)(PageNumber & 0x7F); buffer[4] = (byte)((PageNumber >> 7) & 0x7F); buffer[5] = (byte)((PageNumber >> 14) & 0x7F); buffer[6] = (byte)((PageNumber >> 21) & 0x07); checkSumManager.Calculate(buffer); return(buffer); }