19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2008, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <binder/Parcel.h> 220795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IMemory.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IMediaPlayerService.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <media/IMediaRecorder.h> 25e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <media/IOMX.h> 2652b52cdfb7502d5a0fd7bba21d1daa3e36a54e42Andreas Huber#include <media/IStreamSource.h> 27e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 28e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <utils/Errors.h> // for status_t 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 33fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke CREATE = IBinder::FIRST_CALL_TRANSACTION, 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DECODE_URL, 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DECODE_FD, 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CREATE_MEDIA_RECORDER, 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CREATE_METADATA_RETRIEVER, 38d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang GET_OMX, 39d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang ADD_BATTERY_DATA, 40d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang PULL_BATTERY_DATA 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass BpMediaPlayerService: public BpInterface<IMediaPlayerService> 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BpMediaPlayerService(const sp<IBinder>& impl) 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : BpInterface<IMediaPlayerService>(impl) 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid) 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(pid); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(CREATE_METADATA_RETRIEVER, data, &reply); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return interface_cast<IMediaMetadataRetriever>(reply.readStrongBinder()); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 60256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber virtual sp<IMediaPlayer> create( 61fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke pid_t pid, const sp<IMediaPlayerClient>& client, int audioSessionId) { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(pid); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeStrongBinder(client->asBinder()); 66619346f902241736d933657a4fe10f10c50a1ba8Eric Laurent data.writeInt32(audioSessionId); 67256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber 68fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke remote()->transact(CREATE, data, &reply); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return interface_cast<IMediaPlayer>(reply.readStrongBinder()); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid) 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt32(pid); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(CREATE_MEDIA_RECORDER, data, &reply); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return interface_cast<IMediaRecorder>(reply.readStrongBinder()); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeCString(url); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(DECODE_URL, data, &reply); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *pSampleRate = uint32_t(reply.readInt32()); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *pNumChannels = reply.readInt32(); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *pFormat = reply.readInt32(); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return interface_cast<IMemory>(reply.readStrongBinder()); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel data, reply; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeFileDescriptor(fd); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt64(offset); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data.writeInt64(length); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project remote()->transact(DECODE_FD, data, &reply); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *pSampleRate = uint32_t(reply.readInt32()); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *pNumChannels = reply.readInt32(); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *pFormat = reply.readInt32(); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return interface_cast<IMemory>(reply.readStrongBinder()); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 106e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 107784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual sp<IOMX> getOMX() { 108e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber Parcel data, reply; 109e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 110784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber remote()->transact(GET_OMX, data, &reply); 111e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber return interface_cast<IOMX>(reply.readStrongBinder()); 112e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } 113d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang 114d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang virtual void addBatteryData(uint32_t params) { 115d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang Parcel data, reply; 116d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 117d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang data.writeInt32(params); 118d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang remote()->transact(ADD_BATTERY_DATA, data, &reply); 119d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang } 120d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang 121d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang virtual status_t pullBatteryData(Parcel* reply) { 122d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang Parcel data; 123d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); 124d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang return remote()->transact(PULL_BATTERY_DATA, data, reply); 125d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 128dcd810d01394cbcc78905b46e212a49e38f88b8bnikoIMPLEMENT_META_INTERFACE(MediaPlayerService, "android.media.IMediaPlayerService"); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------- 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t BnMediaPlayerService::onTransact( 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch(code) { 136fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke case CREATE: { 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid = data.readInt32(); 139256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber sp<IMediaPlayerClient> client = 140256430093679e1d62b54fb0c852126e54d162f6fAndreas Huber interface_cast<IMediaPlayerClient>(data.readStrongBinder()); 141619346f902241736d933657a4fe10f10c50a1ba8Eric Laurent int audioSessionId = data.readInt32(); 142fc301b0bb5c635c6bb51b48c504a8db5f9010e5cDave Burke sp<IMediaPlayer> player = create(pid, client, audioSessionId); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DECODE_URL: { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char* url = data.readCString(); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int numChannels; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32(sampleRate); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32(numChannels); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32(format); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DECODE_FD: { 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int fd = dup(data.readFileDescriptor()); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t offset = data.readInt64(); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t length = data.readInt64(); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sampleRate; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int numChannels; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int format; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32(sampleRate); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32(numChannels); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeInt32(format); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(player->asBinder()); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case CREATE_MEDIA_RECORDER: { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid = data.readInt32(); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMediaRecorder> recorder = createMediaRecorder(pid); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(recorder->asBinder()); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case CREATE_METADATA_RETRIEVER: { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHECK_INTERFACE(IMediaPlayerService, data, reply); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid_t pid = data.readInt32(); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<IMediaMetadataRetriever> retriever = createMetadataRetriever(pid); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reply->writeStrongBinder(retriever->asBinder()); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NO_ERROR; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } break; 188784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber case GET_OMX: { 189e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber CHECK_INTERFACE(IMediaPlayerService, data, reply); 190784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber sp<IOMX> omx = getOMX(); 191e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber reply->writeStrongBinder(omx->asBinder()); 192e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber return NO_ERROR; 193e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } break; 194d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang case ADD_BATTERY_DATA: { 195d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang CHECK_INTERFACE(IMediaPlayerService, data, reply); 196d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang uint32_t params = data.readInt32(); 197d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang addBatteryData(params); 198d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang return NO_ERROR; 199d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang } break; 200d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang case PULL_BATTERY_DATA: { 201d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang CHECK_INTERFACE(IMediaPlayerService, data, reply); 202d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang pullBatteryData(reply); 203d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang return NO_ERROR; 204d211f41f764fe81fe00b10a99b4b44cb84479cbeGloria Wang } break; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 213