コード例 #1
0
 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);
             }
         }
     }
 }
コード例 #2
0
 private void OnPortFree()
 {
     if (dataToSend.Count > 0)
     {
         var msg = NMEAParser.BuildProprietarySentence(ManufacturerCodes.MCP, "4", new object[] { dataToSend.Dequeue() });
         port.SendData(msg);
         IsWaiting = true;
     }
 }