// TODO: This a guess!!...untested!!
 public byte[] read() {
   try {
     serialConnection.readStaleData();
     long start = currentTimeMillis();
     while (currentTimeMillis() - start <= sendTimeout) {
       if (serialConnection.available() > 10) {
         byte[] bytes = serialConnection.readAvailable();
         LOGGER.trace("AEM UEGO input: " + asHex(bytes));
         int startIndex = findStart(bytes);
         LOGGER.trace("AEM UEGO start index: " + startIndex);
         if (startIndex < 0 || startIndex >= bytes.length) continue;
         List<Byte> buffer = new ArrayList<Byte>();
         for (int i = startIndex; i < bytes.length; i++) {
           byte b = bytes[i];
           if (b == (byte) 0x0D) {
             byte[] response = toArray(buffer);
             LOGGER.trace("AEM UEGO Response: " + asHex(response));
             return response;
           } else {
             buffer.add(b);
           }
         }
       }
       sleep(1);
     }
     LOGGER.warn("AEM UEGO Response [read timeout]");
     return new byte[0];
   } catch (Exception e) {
     close();
     throw new SerialCommunicationException(e);
   }
 }
 public void close() {
   serialConnection.close();
   LOGGER.info("AEM disconnected");
 }