IAudioRecord.cpp revision 34f1d8ecd23169a5f299937e3aaf1bd7937578a0
1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** Copyright 2007, The Android Open Source Project 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** Licensed under the Apache License, Version 2.0 (the "License"); 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** you may not use this file except in compliance with the License. 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** You may obtain a copy of the License at 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** http://www.apache.org/licenses/LICENSE-2.0 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** Unless required by applicable law or agreed to in writing, software 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** distributed under the License is distributed on an "AS IS" BASIS, 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** See the License for the specific language governing permissions and 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard** limitations under the License. 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard*/ 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define LOG_TAG "IAudioRecord" 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard//#define LOG_NDEBUG 0 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <utils/Log.h> 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <stdint.h> 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <sys/types.h> 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <binder/Parcel.h> 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <media/IAudioRecord.h> 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardnamespace android { 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardenum { 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard GET_CBLK = IBinder::FIRST_CALL_TRANSACTION, 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard START, 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STOP 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}; 36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardclass BpAudioRecord : public BpInterface<IAudioRecord> 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardpublic: 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard BpAudioRecord(const sp<IBinder>& impl) 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard : BpInterface<IAudioRecord>(impl) 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard virtual status_t start() 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Parcel data, reply; 48b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard data.writeInterfaceToken(IAudioRecord::getInterfaceDescriptor()); 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard status_t status = remote()->transact(START, data, &reply); 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (status == NO_ERROR) { 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard status = reply.readInt32(); 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } else { 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LOGW("start() error: %s", strerror(-status)); 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return status; 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard virtual void stop() 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Parcel data, reply; 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard data.writeInterfaceToken(IAudioRecord::getInterfaceDescriptor()); 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard remote()->transact(STOP, data, &reply); 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard virtual sp<IMemory> getCblk() const 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Parcel data, reply; 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sp<IMemory> cblk; 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard data.writeInterfaceToken(IAudioRecord::getInterfaceDescriptor()); 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard status_t status = remote()->transact(GET_CBLK, data, &reply); 71b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard if (status == NO_ERROR) { 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard cblk = interface_cast<IMemory>(reply.readStrongBinder()); 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return cblk; 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}; 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 78e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardIMPLEMENT_META_INTERFACE(AudioRecord, "android.media.IAudioRecord"); 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard// ---------------------------------------------------------------------- 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstatus_t BnAudioRecord::onTransact( 83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard switch(code) { 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard case GET_CBLK: { 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard CHECK_INTERFACE(IAudioRecord, data, reply); 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard reply->writeStrongBinder(getCblk()->asBinder()); 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return NO_ERROR; 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } break; 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard case START: { 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard CHECK_INTERFACE(IAudioRecord, data, reply); 93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard reply->writeInt32(start()); 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return NO_ERROR; 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } break; 96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard case STOP: { 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard CHECK_INTERFACE(IAudioRecord, data, reply); 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard stop(); 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return NO_ERROR; 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } break; 101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard default: 102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return BBinder::onTransact(code, data, reply, flags); 103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}; // namespace android 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard