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