public void ReceptionProc() { byte[] mainbuf = new byte[1024]; int buf_index = 0; while (true) { Thread.Sleep(150); byte[] buffer = new byte[256]; int len = port.Read(buffer, 0, 255); if (len >= 2 && buffer[0] == (byte)0x10 && (buffer[1] == (byte)0x30 || buffer[1] == (byte)0x31)) { buf_index = 0; Console.WriteLine("Received ACK"); ready = true; Array.Copy(buffer, 2, mainbuf, buf_index, len - 2); buf_index += (len-2); } else { Array.Copy(buffer, 0, mainbuf, buf_index, len); buf_index += len; } if (buf_index >= 2) { // should add check for NAK, and if NAK then should retransmit packet, should create some FIFO if (mainbuf[buf_index - 2] == (byte)0x10 && (mainbuf[buf_index - 1] == (byte)0x30 || mainbuf[buf_index - 1] == (byte)0x31)) { buf_index = 0; Console.WriteLine("Received ACK"); ready = true; } else if (buf_index > 2 && mainbuf[buf_index - 3] == (byte)0x10 && mainbuf[buf_index - 2] == (byte)0x03) { Console.WriteLine("Received DLE && STX"); if (checkChecksum(mainbuf, buf_index)) { sendACK(); byte[] pdu = new byte[buf_index-8]; Array.Copy(mainbuf, 5, pdu, 0, buf_index - 8); System.Console.Out.WriteLine("We will check that: (" + pdu.Length + ")" + ByteArray.ByteArrayToHexString(pdu, " ", 16)); // pdu to analyze.. decode } else sendNAK(); buf_index = 0; } } } }