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 IOBuffer Pack() { var buffer = new IOBufferWritePageTx(); 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); buffer[7] = (byte)(PageLineNumber & 0x7F); for (int i = 0; i < PageLine.Size; i++) { buffer[8 + i] = (byte)(Line[i] & 0x7F); } for (int k = 0; k < 7; k++) { buffer[24] |= (byte)((Line[k] >> (7 - k)) & (0x01 << k)); buffer[25] |= (byte)((Line[7 + k] >> (7 - k)) & (0x01 << k)); } buffer[24] &= 0x7F; buffer[25] &= 0x7F; buffer[26] |= (byte)((Line[14] >> 7) & 0x01); buffer[26] |= (byte)((Line[15] >> 6) & 0x02); buffer[26] &= 0x03; checkSumManager.Calculate(buffer); return(buffer); }