1c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean/*
2c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * Copyright (C) 2014 The Android Open Source Project
3c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean *
4c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * Licensed under the Apache License, Version 2.0 (the "License");
5c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * you may not use this file except in compliance with the License.
6c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * You may obtain a copy of the License at
7c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean *
8c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean *      http://www.apache.org/licenses/LICENSE-2.0
9c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean *
10c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * Unless required by applicable law or agreed to in writing, software
11c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * distributed under the License is distributed on an "AS IS" BASIS,
12c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * See the License for the specific language governing permissions and
14c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean * limitations under the License.
15c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean */
16c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
17c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean#ifndef ANDROID_HARDWARE_LIBHARDWARE_MODULES_USBAUDIO_ALSA_DEVICE_PROXY_H
18c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean#define ANDROID_HARDWARE_LIBHARDWARE_MODULES_USBAUDIO_ALSA_DEVICE_PROXY_H
19c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
20c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean#include <tinyalsa/asoundlib.h>
21c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
22c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean#include "alsa_device_profile.h"
23c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
24c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeantypedef struct {
25c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean    alsa_device_profile* profile;
26c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
27c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean    struct pcm_config alsa_config;
28c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
29c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean    struct pcm * pcm;
30c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean} alsa_device_proxy;
31c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
32c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanvoid proxy_prepare(alsa_device_proxy * proxy, alsa_device_profile * profile,
33c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean                   struct pcm_config * config);
34c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
35c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanunsigned proxy_get_sample_rate(const alsa_device_proxy * proxy);
36c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanenum pcm_format proxy_get_format(const alsa_device_proxy * proxy);
37c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanunsigned proxy_get_channel_count(const alsa_device_proxy * proxy);
38c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
39c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanunsigned int proxy_get_period_size(const alsa_device_proxy * proxy);
40c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
41c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanunsigned proxy_get_latency(const alsa_device_proxy * proxy);
42c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
43c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanint proxy_open(alsa_device_proxy * proxy);
44c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanvoid proxy_close(alsa_device_proxy * proxy);
45c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
46c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanint proxy_write(const alsa_device_proxy * proxy, const void *data, unsigned int count);
47c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLeanint proxy_read(const alsa_device_proxy * proxy, void *data, unsigned int count);
48c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean
49c88e6ae584a5f7ea65ab6df89e381c2c7bf8e84ePaul McLean#endif /* ANDROID_HARDWARE_LIBHARDWARE_MODULES_USBAUDIO_ALSA_DEVICE_PROXY_H */
50