docs: def _readline(self):
          """Read exactly one line from the device
  
          Returns:
              None on no data
          """
          logging.info('%s: reading line', self.port)
          if len(self._lines) > 1:
              return self._lines.pop(0)
  
          tail = ''
          if len(self._lines):
              tail = self._lines.pop()
  
          try:
              tail += self._read()
          except socket.error:
              logging.exception('%s: No new data', self.port)
              time.sleep(0.1)
  
          self._lines += LINESEPX.split(tail)
          if len(self._lines) > 1:
              return self._lines.pop(0)