1204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk/*
2204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Copyright 2016 The Android Open Source Project
3204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk *
4204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Licensed under the Apache License, Version 2.0 (the "License");
5204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * you may not use this file except in compliance with the License.
6204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * You may obtain a copy of the License at
7204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk *
8204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk *      http://www.apache.org/licenses/LICENSE-2.0
9204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk *
10204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Unless required by applicable law or agreed to in writing, software
11204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * distributed under the License is distributed on an "AS IS" BASIS,
12204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * See the License for the specific language governing permissions and
14204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * limitations under the License.
15204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */
16204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
17c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#define LOG_TAG "AAudio"
18c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk//#define LOG_NDEBUG 0
19c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <utils/Log.h>
20c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
21204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <stdint.h>
22204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
23204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <sys/mman.h>
24204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <binder/Parcel.h>
25204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <binder/Parcelable.h>
26204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
27a4eb0d86a29be2763be5fac51727858d5095794bPhil Burk#include <aaudio/AAudio.h>
28204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
295ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include "binding/AAudioStreamConfiguration.h"
305ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include "binding/AAudioStreamRequest.h"
31204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
32204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::NO_ERROR;
33204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::status_t;
34204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::Parcel;
35204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::Parcelable;
36204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
375ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkusing namespace aaudio;
38204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
395ed503c7a66c90f93759c90237a9b432dbd93f9fPhil BurkAAudioStreamRequest::AAudioStreamRequest()
40204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk    : mConfiguration()
41204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk    {}
42204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
435ed503c7a66c90f93759c90237a9b432dbd93f9fPhil BurkAAudioStreamRequest::~AAudioStreamRequest() {}
44204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
455ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkstatus_t AAudioStreamRequest::writeToParcel(Parcel* parcel) const {
46c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status_t status = parcel->writeInt32((int32_t) mUserId);
47c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
48c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status = parcel->writeInt32((int32_t) mProcessId);
49c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
50c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status = parcel->writeInt32((int32_t) mDirection);
51c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
5271f35bb687476694882a617ba4a810a0bb56fe23Phil Burk
5371f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    status = parcel->writeBool(mSharingModeMatchRequired);
5471f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    if (status != NO_ERROR) goto error;
5571f35bb687476694882a617ba4a810a0bb56fe23Phil Burk
56c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status = mConfiguration.writeToParcel(parcel);
57c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
58c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    return NO_ERROR;
59c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
60c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkerror:
61c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    ALOGE("AAudioStreamRequest.writeToParcel(): write failed = %d", status);
62c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    return status;
63204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk}
64204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
655ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkstatus_t AAudioStreamRequest::readFromParcel(const Parcel* parcel) {
66204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk    int32_t temp;
67c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status_t status = parcel->readInt32(&temp);
68c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
69204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk    mUserId = (uid_t) temp;
7071f35bb687476694882a617ba4a810a0bb56fe23Phil Burk
71c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status = parcel->readInt32(&temp);
72c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
73204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk    mProcessId = (pid_t) temp;
7471f35bb687476694882a617ba4a810a0bb56fe23Phil Burk
75c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status = parcel->readInt32(&temp);
76c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
77c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    mDirection = (aaudio_direction_t) temp;
7871f35bb687476694882a617ba4a810a0bb56fe23Phil Burk
7971f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    status = parcel->readBool(&mSharingModeMatchRequired);
8071f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    if (status != NO_ERROR) goto error;
8171f35bb687476694882a617ba4a810a0bb56fe23Phil Burk
82c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status = mConfiguration.readFromParcel(parcel);
83c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
84c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    return NO_ERROR;
85c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
86c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkerror:
87c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    ALOGE("AAudioStreamRequest.readFromParcel(): read failed = %d", status);
88c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    return status;
89204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk}
90204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
91c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkaaudio_result_t AAudioStreamRequest::validate() const {
92204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk    return mConfiguration.validate();
93204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk}
94204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
95c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkvoid AAudioStreamRequest::dump() const {
96c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    ALOGD("AAudioStreamRequest mUserId    = %d", mUserId);
975ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk    ALOGD("AAudioStreamRequest mProcessId = %d", mProcessId);
98c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    ALOGD("AAudioStreamRequest mDirection = %d", mDirection);
99204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk    mConfiguration.dump();
100204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk}
101