1fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten/* 2fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** 3fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** Copyright 2007, The Android Open Source Project 4fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** 5fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** Licensed under the Apache License, Version 2.0 (the "License"); 6fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** you may not use this file except in compliance with the License. 7fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** You may obtain a copy of the License at 8fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** 9fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** http://www.apache.org/licenses/LICENSE-2.0 10fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** 11fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** Unless required by applicable law or agreed to in writing, software 12fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** distributed under the License is distributed on an "AS IS" BASIS, 13fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** See the License for the specific language governing permissions and 15fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten** limitations under the License. 16fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten*/ 17fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 18fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten#define LOG_TAG "IMediaLogService" 19fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten//#define LOG_NDEBUG 0 20fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 21fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten#include <utils/Log.h> 22fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten#include <stdint.h> 23fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten#include <sys/types.h> 24fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten#include <binder/Parcel.h> 25fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten#include <media/IMediaLogService.h> 26fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 27fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kastennamespace android { 28fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 29fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kastenenum { 30fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten REGISTER_WRITER = IBinder::FIRST_CALL_TRANSACTION, 31fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten UNREGISTER_WRITER, 32fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten}; 33fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 34fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kastenclass BpMediaLogService : public BpInterface<IMediaLogService> 35fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten{ 36fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kastenpublic: 37fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten BpMediaLogService(const sp<IBinder>& impl) 38fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten : BpInterface<IMediaLogService>(impl) 39fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten { 40fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten } 41fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 42fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten virtual void registerWriter(const sp<IMemory>& shared, size_t size, const char *name) { 43fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten Parcel data, reply; 44fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten data.writeInterfaceToken(IMediaLogService::getInterfaceDescriptor()); 45fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten data.writeStrongBinder(shared->asBinder()); 46e03dd22716e688faa56467561827d9b1ea0c4214Glenn Kasten data.writeInt64((int64_t) size); 47fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten data.writeCString(name); 48fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten status_t status = remote()->transact(REGISTER_WRITER, data, &reply); 49fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten // FIXME ignores status 50fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten } 51fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 52fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten virtual void unregisterWriter(const sp<IMemory>& shared) { 53fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten Parcel data, reply; 54fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten data.writeInterfaceToken(IMediaLogService::getInterfaceDescriptor()); 55fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten data.writeStrongBinder(shared->asBinder()); 56fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten status_t status = remote()->transact(UNREGISTER_WRITER, data, &reply); 57fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten // FIXME ignores status 58fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten } 59fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 60fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten}; 61fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 62fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn KastenIMPLEMENT_META_INTERFACE(MediaLogService, "android.media.IMediaLogService"); 63fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 64fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten// ---------------------------------------------------------------------- 65fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 66fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kastenstatus_t BnMediaLogService::onTransact( 67fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 68fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten{ 69fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten switch (code) { 70fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 71fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten case REGISTER_WRITER: { 72fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten CHECK_INTERFACE(IMediaLogService, data, reply); 73fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten sp<IMemory> shared = interface_cast<IMemory>(data.readStrongBinder()); 74e03dd22716e688faa56467561827d9b1ea0c4214Glenn Kasten size_t size = (size_t) data.readInt64(); 75fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten const char *name = data.readCString(); 76fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten registerWriter(shared, size, name); 77fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten return NO_ERROR; 78fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten } 79fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 80fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten case UNREGISTER_WRITER: { 81fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten CHECK_INTERFACE(IMediaLogService, data, reply); 82fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten sp<IMemory> shared = interface_cast<IMemory>(data.readStrongBinder()); 83fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten unregisterWriter(shared); 84fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten return NO_ERROR; 85fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten } 86fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 87fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten default: 88fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten return BBinder::onTransact(code, data, reply, flags); 89fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten } 90fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten} 91fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 92fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten// ---------------------------------------------------------------------------- 93fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten 94fdf4e4f1859771b95585cbc87f8cd038ea2815c6Glenn Kasten}; // namespace android 95