IMediaPlayerClient.cpp revision 89fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5
1a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten/*
2a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten**
3a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** Copyright 2008, The Android Open Source Project
4a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten**
5a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** Licensed under the Apache License, Version 2.0 (the "License");
6a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** you may not use this file except in compliance with the License.
7a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** You may obtain a copy of the License at
8a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten**
9a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten**     http://www.apache.org/licenses/LICENSE-2.0
10a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten**
11a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** Unless required by applicable law or agreed to in writing, software
12a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** distributed under the License is distributed on an "AS IS" BASIS,
13a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** See the License for the specific language governing permissions and
15a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten** limitations under the License.
16a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten*/
17a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
18a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#include <utils/RefBase.h>
19a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#include <utils/IInterface.h>
2063c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi#include <utils/Parcel.h>
21ea429ee1007c36ade812199ad365c0e659e8053fEric Laurent
2263c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi#include <media/IMediaPlayerClient.h>
23a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
249cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivinamespace android {
259cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi
26ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenenum {
27cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi    NOTIFY = IBinder::FIRST_CALL_TRANSACTION,
28faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten};
29cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi
30cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Triviclass BpMediaPlayerClient: public BpInterface<IMediaPlayerClient>
31cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi{
32cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivipublic:
33cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi    BpMediaPlayerClient(const sp<IBinder>& impl)
34cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi        : BpInterface<IMediaPlayerClient>(impl)
35768edbc2a8e7f197548cf1141689dd237d19c455Glenn Kasten    {
36cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi    }
37cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi
38a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    virtual void notify(int msg, int ext1, int ext2)
39a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    {
40ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        Parcel data, reply;
41ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        data.writeInterfaceToken(IMediaPlayerClient::getInterfaceDescriptor());
42bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        data.writeInt32(msg);
43bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        data.writeInt32(ext1);
44bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        data.writeInt32(ext2);
45faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten        remote()->transact(NOTIFY, data, &reply, IBinder::FLAG_ONEWAY);
46ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
479cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi};
48bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten
499cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel TriviIMPLEMENT_META_INTERFACE(MediaPlayerClient, "android.hardware.IMediaPlayerClient");
509cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi
51bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten// ----------------------------------------------------------------------
529cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi
539cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#define CHECK_INTERFACE(interface, data, reply) \
549cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi        do { if (!data.enforceInterface(interface::getInterfaceDescriptor())) { \
55bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten            LOGW("Call incorrectly routed to " #interface); \
56ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            return PERMISSION_DENIED; \
57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        } } while (0)
58a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
59a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatus_t BnMediaPlayerClient::onTransact(
60ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
61a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
62a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    switch(code) {
63ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        case NOTIFY: {
64ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            CHECK_INTERFACE(IMediaPlayerClient, data, reply);
65ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            int msg = data.readInt32();
66ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            int ext1 = data.readInt32();
67ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            int ext2 = data.readInt32();
68bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten            notify(msg, ext1, ext2);
69bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten            return NO_ERROR;
70bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        } break;
71faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten        default:
72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            return BBinder::onTransact(code, data, reply, flags);
73ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
749cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi}
75bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten
769cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi}; // namespace android
779cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi
78bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten