# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""This module provides the USB Controller interface."""


class USBController(object):
    """An abstraction of USB audio gadget driver controller on Chameleon.

    It provides methods to control the USB gadget driver on Chameleon.

    A ChameleonConnection object is passed to the construction.

    """
    def __init__(self, chameleon_connection):
        """Constructs an USBController.

        @param chameleon_connection: A ChameleonConnection object.

        """
        self._chameleond_proxy = chameleon_connection


    def set_playback_configs(self, playback_data_format):
        """Sets the playback configurations for the USB gadget driver.

        @param playback_data_format: A 4-entry dictionary with following fields:
                                     'file_type', 'sample_format', 'channel' and
                                     'rate'. For e.g.,
                                     format = {
                                         'file_type': 'raw',
                                         'sample_format': 'S16_LE',
                                         'channel': 2,
                                         'rate': 48000
                                     }

        """
        self._chameleond_proxy.SetUSBDriverPlaybackConfigs(playback_data_format)


    def set_capture_configs(self, port_id, capture_data_foramt):
        """Sets the capture configurations for the USB gadget driver.

        @param capture_data_format: A 4-entry dictionary with following fields:
                                     'file_type', 'sample_format', 'channel' and
                                     'rate'. For e.g.,
                                     format = {
                                         'file_type': 'raw',
                                         'sample_format': 'S16_LE',
                                         'channel': 2,
                                         'rate': 48000
                                     }

        """
        self._chameleond_proxy.SetUSBDriverCaptureConfigs(capture_data_foramt)
