1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.hardware.audio@2.0;
18
19import android.hardware.audio.common@2.0;
20
21enum Result : int32_t {
22    OK,
23    NOT_INITIALIZED,
24    INVALID_ARGUMENTS,
25    INVALID_STATE,
26    NOT_SUPPORTED
27};
28
29@export(name="audio_drain_type_t", value_prefix="AUDIO_DRAIN_")
30enum AudioDrain : int32_t {
31    /** drain() returns when all data has been played. */
32    ALL,
33    /**
34     * drain() returns a short time before all data from the current track has
35     * been played to give time for gapless track switch.
36     */
37    EARLY_NOTIFY
38};
39
40/**
41 * A substitute for POSIX timespec.
42 */
43struct TimeSpec {
44    uint64_t tvSec;   // seconds
45    uint64_t tvNSec;  // nanoseconds
46};
47
48/**
49 * IEEE 802 MAC address.
50 */
51typedef uint8_t[6] MacAddress;
52
53struct ParameterValue {
54    string key;
55    string value;
56};
57
58/**
59 * Specifies a device in case when several devices of the same type
60 * can be connected (e.g. BT A2DP, USB).
61 */
62struct DeviceAddress {
63    AudioDevice device;  // discriminator
64    union Address {
65        MacAddress mac;     // used for BLUETOOTH_A2DP_*
66        uint8_t[4] ipv4;    // used for IP
67        struct Alsa {
68            int32_t card;
69            int32_t device;
70        } alsa;             // used for USB_*
71    } address;
72    string busAddress;      // used for BUS
73    string rSubmixAddress;  // used for REMOTE_SUBMIX
74};
75
76/**
77 * Mmap buffer descriptor returned by IStream.createMmapBuffer().
78 * Used by streams opened in mmap mode.
79 */
80struct MmapBufferInfo {
81    memory  sharedMemory;         // mmap memory buffer
82    int32_t bufferSizeFrames;     // total buffer size in frames
83    int32_t burstSizeFrames;      // transfer size granularity in frames
84};
85
86/**
87 * Mmap buffer read/write position returned by IStream.getMmapPosition().
88 * Used by streams opened in mmap mode.
89 */
90struct MmapPosition {
91    int64_t  timeNanoseconds; // time stamp in ns, CLOCK_MONOTONIC
92    int32_t  positionFrames;  // increasing 32 bit frame count reset when IStream.stop() is called
93};
94
95/**
96 * The message queue flags used to synchronize reads and writes from
97 * message queues used by StreamIn and StreamOut.
98 */
99enum MessageQueueFlagBits : uint32_t {
100    NOT_EMPTY = 1 << 0,
101    NOT_FULL = 1 << 1
102};
103