private bool hasFullPacket() { bool result = false; int byteCount = port.BytesToRead; byte[] bytesRead; if (readPacket.Count > 0 && byteCount > 0) //if the readPacket already has values and the input buffer has bytes to read { if (byteCount > readPacket.ElementAt(1)) { bytesRead = new byte[readPacket.ElementAt(1) + 1]; port.Read(bytesRead, 0, readPacket.ElementAt(1) + 1); readPacket.AddRange(bytesRead); result = true; } } else if (byteCount > 2) //if the input buffer has bytes to read and you get here then we start filling the readPacket { bytesRead = new byte[2]; port.Read(bytesRead, 0, 2); if (bytesRead[0] == 0xD5) //checks for start bit from printer { readPacket.AddRange(bytesRead); if (readPacket.ElementAt(1) < byteCount) //checks packet size against how full the buffer is { bytesRead = new byte[readPacket.ElementAt(1) + 1]; port.Read(bytesRead, 0, readPacket.ElementAt(1) + 1); readPacket.AddRange(bytesRead); result = true; } } else { if (bytesRead[1] == 0xD5) //checks for start bit in second spot in case we somehow got a stray bit in here somehow { readPacket.Add(bytesRead[1]); //Add the start bit and retrieve packet length from the buffer (may need to check buffer size before reading) bytesRead = new byte[1]; port.Read(bytesRead, 0, 1); readPacket.Add(bytesRead[0]); if (readPacket.ElementAt(1) < byteCount) //checks packet size against how full the buffer is { bytesRead = new byte[readPacket.ElementAt(1) + 1]; port.Read(bytesRead, 0, readPacket.ElementAt(1) + 1); readPacket.AddRange(bytesRead); result = true; } } } } return(result); }