code: def Read(self, expected_ids, read_data=True):
          
          if self.send_idx:
              self._Flush()
  
          # Read one filesync packet off the recv buffer.
          header_data = self._ReadBuffered(self.recv_header_len)
          header = struct.unpack(self.recv_header_format, header_data)
          # Header is (ID, ...).
          command_id = self.wire_to_id[header[0]]
  
          if command_id not in expected_ids:
              if command_id == b'FAIL':
                  reason = ''
                  if self.recv_buffer:
                      reason = self.recv_buffer.decode('utf-8', errors='ignore')
                  raise usb_exceptions.AdbCommandFailureException('Command failed: {}'.format(reason))
              raise adb_protocol.InvalidResponseError(
                  'Expected one of %s, got %s' % (expected_ids, command_id))
  
          if not read_data:
              return command_id, header[1:]
  
          # Header is (ID, ..., size).
          size = header[-1]
          data = self._ReadBuffered(size)
          return command_id, header[1:-1], data
docs: Read ADB messages and return FileSync packets.