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