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