IAAudioService.cpp revision a4eb0d86a29be2763be5fac51727858d5095794b
1204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk/* 2204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Copyright (C) 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 17a4eb0d86a29be2763be5fac51727858d5095794bPhil Burk#include <aaudio/AAudio.h> 18204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 19204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include "binding/AudioEndpointParcelable.h" 205ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include "binding/AAudioStreamRequest.h" 213316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk#include "binding/AAudioServiceDefinitions.h" 225ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include "binding/AAudioStreamConfiguration.h" 235ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include "binding/IAAudioService.h" 245ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include "utility/AAudioUtilities.h" 25204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 26204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burknamespace android { 27204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 283316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burkusing aaudio::aaudio_handle_t; 293316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk 30204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk/** 315ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk * This is used by the AAudio Client to talk to the AAudio Service. 32204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * 335ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk * The order of parameters in the Parcels must match with code in AAudioService.cpp. 34204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 355ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkclass BpAAudioService : public BpInterface<IAAudioService> 36204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk{ 37204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkpublic: 385ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk explicit BpAAudioService(const sp<IBinder>& impl) 395ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk : BpInterface<IAAudioService>(impl) 40204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk { 41204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 42204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 43c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_handle_t openStream(const aaudio::AAudioStreamRequest &request, 44c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk aaudio::AAudioStreamConfiguration &configurationOutput) override { 45204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel data, reply; 46204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // send command 475ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk data.writeInterfaceToken(IAAudioService::getInterfaceDescriptor()); 48c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("BpAAudioService::client openStream request dump --------------------"); 49c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk request.dump(); 50204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk request.writeToParcel(&data); 51204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk status_t err = remote()->transact(OPEN_STREAM, data, &reply); 52204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk if (err != NO_ERROR) { 535ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_androidToAAudioResult(err); 54204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 55204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // parse reply 565ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_handle_t stream; 57204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply.readInt32(&stream); 58c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk err = configurationOutput.readFromParcel(&reply); 59c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (err != NO_ERROR) { 60c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("BpAAudioService::client openStream readFromParcel failed %d", err); 61c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk closeStream(stream); 62c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk return AAudioConvert_androidToAAudioResult(err); 63c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk } 64204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return stream; 65204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 66204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 675ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk virtual aaudio_result_t closeStream(aaudio_handle_t streamHandle) override { 68204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel data, reply; 69204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // send command 705ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk data.writeInterfaceToken(IAAudioService::getInterfaceDescriptor()); 71204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32(streamHandle); 72204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk status_t err = remote()->transact(CLOSE_STREAM, data, &reply); 73204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk if (err != NO_ERROR) { 745ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_androidToAAudioResult(err); 75204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 76204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // parse reply 775ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t res; 78204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply.readInt32(&res); 79204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return res; 80204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 81204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 825ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk virtual aaudio_result_t getStreamDescription(aaudio_handle_t streamHandle, 835ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio::AudioEndpointParcelable &parcelable) { 84204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel data, reply; 85204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // send command 865ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk data.writeInterfaceToken(IAAudioService::getInterfaceDescriptor()); 87204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32(streamHandle); 88204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk status_t err = remote()->transact(GET_STREAM_DESCRIPTION, data, &reply); 89204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk if (err != NO_ERROR) { 90c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("BpAAudioService::client transact(GET_STREAM_DESCRIPTION) returns %d", err); 915ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_androidToAAudioResult(err); 92204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 93204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // parse reply 94c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk aaudio_result_t result; 95c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk err = reply.readInt32(&result); 96c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (err != NO_ERROR) { 97c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("BpAAudioService::client transact(GET_STREAM_DESCRIPTION) readInt %d", err); 98c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk return AAudioConvert_androidToAAudioResult(err); 99c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk } else if (result != AAUDIO_OK) { 100c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("BpAAudioService::client GET_STREAM_DESCRIPTION passed result %d", result); 101c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk return result; 102c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk } 103c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk err = parcelable.readFromParcel(&reply);; 104c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk if (err != NO_ERROR) { 105c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("BpAAudioService::client transact(GET_STREAM_DESCRIPTION) read endpoint %d", err); 106c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk return AAudioConvert_androidToAAudioResult(err); 107c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk } 108c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk //parcelable.dump(); 109c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk result = parcelable.validate(); 1105ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk if (result != AAUDIO_OK) { 111c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("BpAAudioService::client GET_STREAM_DESCRIPTION validation fails %d", result); 112204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return result; 113204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 114204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return result; 115204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 116204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 117204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // TODO should we wait for a reply? 1185ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk virtual aaudio_result_t startStream(aaudio_handle_t streamHandle) override { 119204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel data, reply; 120204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // send command 1215ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk data.writeInterfaceToken(IAAudioService::getInterfaceDescriptor()); 122204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32(streamHandle); 123204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk status_t err = remote()->transact(START_STREAM, data, &reply); 124204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk if (err != NO_ERROR) { 1255ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_androidToAAudioResult(err); 126204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 127204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // parse reply 1285ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t res; 129204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply.readInt32(&res); 130204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return res; 131204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 132204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 1335ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk virtual aaudio_result_t pauseStream(aaudio_handle_t streamHandle) override { 134204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel data, reply; 135204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // send command 1365ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk data.writeInterfaceToken(IAAudioService::getInterfaceDescriptor()); 137204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32(streamHandle); 138204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk status_t err = remote()->transact(PAUSE_STREAM, data, &reply); 139204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk if (err != NO_ERROR) { 1405ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_androidToAAudioResult(err); 141204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 142204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // parse reply 1435ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t res; 144204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply.readInt32(&res); 145204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return res; 146204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 147204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 1485ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk virtual aaudio_result_t flushStream(aaudio_handle_t streamHandle) override { 149204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel data, reply; 150204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // send command 1515ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk data.writeInterfaceToken(IAAudioService::getInterfaceDescriptor()); 152204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32(streamHandle); 153204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk status_t err = remote()->transact(FLUSH_STREAM, data, &reply); 154204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk if (err != NO_ERROR) { 1555ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_androidToAAudioResult(err); 156204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 157204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // parse reply 1585ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t res; 159204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply.readInt32(&res); 160204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return res; 161204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 162204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 163c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t registerAudioThread(aaudio_handle_t streamHandle, 164c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t clientProcessId, 165c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t clientThreadId, 1663316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int64_t periodNanoseconds) 167204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk override { 168204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel data, reply; 169204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // send command 1705ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk data.writeInterfaceToken(IAAudioService::getInterfaceDescriptor()); 171204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32(streamHandle); 172c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk data.writeInt32((int32_t) clientProcessId); 173204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32((int32_t) clientThreadId); 174204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt64(periodNanoseconds); 175204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk status_t err = remote()->transact(REGISTER_AUDIO_THREAD, data, &reply); 176204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk if (err != NO_ERROR) { 1775ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_androidToAAudioResult(err); 178204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 179204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // parse reply 1805ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t res; 181204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply.readInt32(&res); 182204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return res; 183204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 184204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 185c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t unregisterAudioThread(aaudio_handle_t streamHandle, 186c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t clientProcessId, 187c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t clientThreadId) 188204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk override { 189204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel data, reply; 190204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // send command 1915ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk data.writeInterfaceToken(IAAudioService::getInterfaceDescriptor()); 192204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32(streamHandle); 193c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk data.writeInt32((int32_t) clientProcessId); 194204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.writeInt32((int32_t) clientThreadId); 195204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk status_t err = remote()->transact(UNREGISTER_AUDIO_THREAD, data, &reply); 196204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk if (err != NO_ERROR) { 1975ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_androidToAAudioResult(err); 198204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 199204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk // parse reply 2005ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t res; 201204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply.readInt32(&res); 202204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return res; 203204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 204204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 205204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk}; 206204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 207204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk// Implement an interface to the service. 208c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk// This is here so that you don't have to link with libaaudio static library. 2095ed503c7a66c90f93759c90237a9b432dbd93f9fPhil BurkIMPLEMENT_META_INTERFACE(AAudioService, "IAAudioService"); 210204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 2115ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk// The order of parameters in the Parcels must match with code in BpAAudioService 212204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 2135ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkstatus_t BnAAudioService::onTransact(uint32_t code, const Parcel& data, 214204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk Parcel* reply, uint32_t flags) { 2153316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk aaudio_handle_t stream; 2165ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio::AAudioStreamRequest request; 2175ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio::AAudioStreamConfiguration configuration; 218204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk pid_t pid; 219c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t tid; 2203316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int64_t nanoseconds; 2215ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t result; 2225ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk ALOGV("BnAAudioService::onTransact(%i) %i", code, flags); 223204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.checkInterface(this); 224204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 225204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk switch(code) { 226204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk case OPEN_STREAM: { 227204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk request.readFromParcel(&data); 228c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 229c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGD("BnAAudioService::client openStream request dump --------------------"); 230c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk request.dump(); 231c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 232204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk stream = openStream(request, configuration); 233c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGV("BnAAudioService::onTransact OPEN_STREAM server handle = 0x%08X", stream); 234204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply->writeInt32(stream); 235204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk configuration.writeToParcel(reply); 236204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return NO_ERROR; 237204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } break; 238204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 239204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk case CLOSE_STREAM: { 240204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&stream); 241c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGV("BnAAudioService::onTransact CLOSE_STREAM 0x%08X", stream); 242204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk result = closeStream(stream); 243204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply->writeInt32(result); 244204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return NO_ERROR; 245204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } break; 246204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 247204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk case GET_STREAM_DESCRIPTION: { 248204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&stream); 249c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGI("BnAAudioService::onTransact GET_STREAM_DESCRIPTION 0x%08X", stream); 2505ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio::AudioEndpointParcelable parcelable; 251204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk result = getStreamDescription(stream, parcelable); 252c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGI("BnAAudioService::onTransact getStreamDescription() returns %d", result); 2535ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk if (result != AAUDIO_OK) { 2545ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_aaudioToAndroidStatus(result); 255204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 256204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk result = parcelable.validate(); 2575ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk if (result != AAUDIO_OK) { 258c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGE("BnAAudioService::onTransact getStreamDescription() returns %d", result); 259c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk parcelable.dump(); 2605ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk return AAudioConvert_aaudioToAndroidStatus(result); 261204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 262204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply->writeInt32(result); 263c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk parcelable.writeToParcel(reply); 264204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return NO_ERROR; 265204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } break; 266204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 267204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk case START_STREAM: { 268204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&stream); 269204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk result = startStream(stream); 270c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGV("BnAAudioService::onTransact START_STREAM 0x%08X, result = %d", 271204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk stream, result); 272204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply->writeInt32(result); 273204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return NO_ERROR; 274204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } break; 275204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 276204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk case PAUSE_STREAM: { 277204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&stream); 278204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk result = pauseStream(stream); 279c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGV("BnAAudioService::onTransact PAUSE_STREAM 0x%08X, result = %d", 280204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk stream, result); 281204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply->writeInt32(result); 282204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return NO_ERROR; 283204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } break; 284204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 285204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk case FLUSH_STREAM: { 286204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&stream); 287204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk result = flushStream(stream); 288c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGV("BnAAudioService::onTransact FLUSH_STREAM 0x%08X, result = %d", 289204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk stream, result); 290204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply->writeInt32(result); 291204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return NO_ERROR; 292204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } break; 293204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 294204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk case REGISTER_AUDIO_THREAD: { 295204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&stream); 296204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&pid); 297c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk data.readInt32(&tid); 298204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt64(&nanoseconds); 299c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk result = registerAudioThread(stream, pid, tid, nanoseconds); 300c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGV("BnAAudioService::onTransact REGISTER_AUDIO_THREAD 0x%08X, result = %d", 301204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk stream, result); 302204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply->writeInt32(result); 303204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return NO_ERROR; 304204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } break; 305204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 306204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk case UNREGISTER_AUDIO_THREAD: { 307204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&stream); 308204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk data.readInt32(&pid); 309c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk data.readInt32(&tid); 310c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk result = unregisterAudioThread(stream, pid, tid); 311c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ALOGV("BnAAudioService::onTransact UNREGISTER_AUDIO_THREAD 0x%08X, result = %d", 312204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk stream, result); 313204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk reply->writeInt32(result); 314204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return NO_ERROR; 315204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } break; 316204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 317204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk default: 3185ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk // ALOGW("BnAAudioService::onTransact not handled %u", code); 319204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk return BBinder::onTransact(code, data, reply, flags); 320204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk } 321204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk} 322204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 323204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk} /* namespace android */ 324