@classmethod
def StreamingCommand(cls, usb, service, command='', timeout_ms=None):
    """One complete set of USB packets for a single command.

    Sends service:command in a new connection, reading the data for the
    response. All the data is held in memory, large responses will be slow and
    can fill up memory.

    Args:
      usb: USB device handle with BulkRead and BulkWrite methods.
      service: The service on the device to talk to.
      command: The command to send to the service.
      timeout_ms: Timeout for USB packets, in milliseconds.

    Raises:
      InterleavedDataError: Multiple streams running over usb.
      InvalidCommandError: Got an unexpected response command.

    Yields:
      The responses from the service.
    """
    if isinstance(command, str):
        command = command.encode('utf8')
    connection = cls.Open(usb, destination=b'%s:%s' % (service, command),
        timeout_ms=timeout_ms)
    for data in connection.ReadUntilClose():
        yield data.decode('utf8')
