private void PerformProtocol() { if (state == uMCPState.RUNNING) { if ((!isTxFinishedTimerRunning) && (!isTimeoutTimerRunning) && (select)) { if (dataToSend.Count == 0) { if (SREP) { SendPacket(new uMCPREPPacket(ID, TID, N), true); SREP = false; } else if (sentDataBlocks.Count > 0) { byte x = Convert.ToByte((A + 1) % 256); SendPacket(new uMCPDATAPacket(ID, TID, R, x, sentDataBlocks[x], true), true); } else if ((!selectDefaultState) || (SACK)) { SendPacket(new uMCPACKPacket(ID, TID, R, N), false); SACK = false; } } else { var blockToSend = dataToSend.Dequeue(); N++; sentDataBlocks.Add(N, blockToSend); bool isDTE = (dataToSend.Count == 0) || (sentDataBlocks.Count >= pipeliningLimit); SendPacket(new uMCPDATAPacket(ID, TID, R, N, blockToSend, isDTE), isDTE); } } } }
private void OnPortFree() { if (dataToSend.Count > 0) { var msg = NMEAParser.BuildProprietarySentence(ManufacturerCodes.MCP, "4", new object[] { dataToSend.Dequeue() }); port.SendData(msg); IsWaiting = true; } }