ICommonClock.cpp revision e5167f88f3734a048dc44199f3fff0432589db43
146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato/* 246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * Copyright (C) 2012 The Android Open Source Project 346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * 446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * you may not use this file except in compliance with the License. 646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * You may obtain a copy of the License at 746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * 846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * http://www.apache.org/licenses/LICENSE-2.0 946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * 1046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * Unless required by applicable law or agreed to in writing, software 1146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 1246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * See the License for the specific language governing permissions and 1446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * limitations under the License. 1546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato */ 1646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato#include <sys/socket.h> 1846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1980a44401a22344f7eabce6976372ab144ef22893Joe Onorato#include <common_time/ICommonClock.h> 2080a44401a22344f7eabce6976372ab144ef22893Joe Onorato#include <binder/Parcel.h> 218d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 2246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato#include "utils.h" 2346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 2446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onoratonamespace android { 2546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 2646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato/***** ICommonClock *****/ 2746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 2846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onoratoenum { 2946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato IS_COMMON_TIME_VALID = IBinder::FIRST_CALL_TRANSACTION, 3046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato COMMON_TIME_TO_LOCAL_TIME, 318d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato LOCAL_TIME_TO_COMMON_TIME, 3246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato GET_COMMON_TIME, 3346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato GET_COMMON_FREQ, 3446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato GET_LOCAL_TIME, 35b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler GET_LOCAL_FREQ, 368d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato GET_ESTIMATED_ERROR, 3746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato GET_TIMELINE_ID, 3846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato GET_STATE, 3946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato GET_MASTER_ADDRESS, 408d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato REGISTER_LISTENER, 418d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato UNREGISTER_LISTENER, 428d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato}; 438d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 4446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onoratoconst String16 ICommonClock::kServiceName("common_time.clock"); 4546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onoratoconst uint64_t ICommonClock::kInvalidTimelineID = 0; 4646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onoratoconst int32_t ICommonClock::kErrorEstimateUnknown = 0x7FFFFFFF; 478d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 4846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onoratoclass BpCommonClock : public BpInterface<ICommonClock> 4946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato{ 5046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public: 5146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato BpCommonClock(const sp<IBinder>& impl) 5246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato : BpInterface<ICommonClock>(impl) {} 5346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 548d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t isCommonTimeValid(bool* valid, uint32_t* timelineID) { 558d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 568d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 578d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(IS_COMMON_TIME_VALID, 588d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data, 598d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato &reply); 608d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 618d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 628d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 638d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *valid = reply.readInt32(); 648d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *timelineID = reply.readInt32(); 658d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 668d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 678d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 688d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 698d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 708d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t commonTimeToLocalTime(int64_t commonTime, 718d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato int64_t* localTime) { 728d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 738d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 748d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInt64(commonTime); 758d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(COMMON_TIME_TO_LOCAL_TIME, 768d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data, &reply); 778d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 788d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 798d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 808d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *localTime = reply.readInt64(); 818d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 828d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 838d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 848d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 858d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 868d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t localTimeToCommonTime(int64_t localTime, 8746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato int64_t* commonTime) { 8846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato Parcel data, reply; 898d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 908d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInt64(localTime); 918d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(LOCAL_TIME_TO_COMMON_TIME, 928d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data, &reply); 938d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 948d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 958d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 968d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *commonTime = reply.readInt64(); 978d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 988d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 998d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 1008d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1018d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 1028d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t getCommonTime(int64_t* commonTime) { 1038d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 1048d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 10546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato status_t status = remote()->transact(GET_COMMON_TIME, data, &reply); 10646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (status == OK) { 1078d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 1088d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1098d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *commonTime = reply.readInt64(); 1108d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1118d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1128d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 1138d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1148d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 1158d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t getCommonFreq(uint64_t* freq) { 1168d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 1178d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 1188d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(GET_COMMON_FREQ, data, &reply); 1198d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1208d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 1218d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1228d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *freq = reply.readInt64(); 1238d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1248d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1258d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 1268d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1278d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 1288d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t getLocalTime(int64_t* localTime) { 1298d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 1308d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 1318d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(GET_LOCAL_TIME, data, &reply); 1328d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1338d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 1348d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1358d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *localTime = reply.readInt64(); 1368d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1378d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1388d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 1398d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1408d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 1418d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t getLocalFreq(uint64_t* freq) { 1428d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 1438d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 1448d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(GET_LOCAL_FREQ, data, &reply); 1458d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1468d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 1478d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1488d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *freq = reply.readInt64(); 1498d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1508d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1518d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 1528d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1538d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 1548d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t getEstimatedError(int32_t* estimate) { 1558d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 1568d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 1578d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(GET_ESTIMATED_ERROR, data, &reply); 1588d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1598d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 1608d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1618d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *estimate = reply.readInt32(); 1628d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1638d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1648d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 1658d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1668d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 1678d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t getTimelineID(uint64_t* id) { 1688d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 1698d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 1708d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(GET_TIMELINE_ID, data, &reply); 1718d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1728d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 1738d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1748d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *id = static_cast<uint64_t>(reply.readInt64()); 1758d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1768d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1778d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 1788d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1798d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 1808d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t getState(State* state) { 1818d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 18246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 1838d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(GET_STATE, data, &reply); 1848d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 18546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato status = reply.readInt32(); 1868d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 1878d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato *state = static_cast<State>(reply.readInt32()); 1888d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 1898d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 19046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return status; 191b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler } 192b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler 193b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler virtual status_t getMasterAddr(struct sockaddr_storage* addr) { 194b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler Parcel data, reply; 195b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 196b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler status_t status = remote()->transact(GET_MASTER_ADDRESS, data, &reply); 197b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler if (status == OK) { 198b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler status = reply.readInt32(); 199b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler if (status == OK) 200b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler deserializeSockaddr(&reply, addr); 201b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler } 202b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler return status; 203b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler } 204b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler 2058d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t registerListener( 2068d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato const sp<ICommonClockListener>& listener) { 207561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato Parcel data, reply; 2088d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 2098d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeStrongBinder(listener->asBinder()); 21080a44401a22344f7eabce6976372ab144ef22893Joe Onorato 21180a44401a22344f7eabce6976372ab144ef22893Joe Onorato status_t status = remote()->transact(REGISTER_LISTENER, data, &reply); 21280a44401a22344f7eabce6976372ab144ef22893Joe Onorato 21380a44401a22344f7eabce6976372ab144ef22893Joe Onorato if (status == OK) { 21480a44401a22344f7eabce6976372ab144ef22893Joe Onorato status = reply.readInt32(); 21580a44401a22344f7eabce6976372ab144ef22893Joe Onorato } 2168d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 21780a44401a22344f7eabce6976372ab144ef22893Joe Onorato return status; 2188d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 2198d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 2208d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual status_t unregisterListener( 2218d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato const sp<ICommonClockListener>& listener) { 2228d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 2238d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken(ICommonClock::getInterfaceDescriptor()); 2248d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeStrongBinder(listener->asBinder()); 2258d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = remote()->transact(UNREGISTER_LISTENER, data, &reply); 22646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 2278d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 2288d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = reply.readInt32(); 2298d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 2308d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 2318d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return status; 2328d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 2338d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato}; 2348d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 2358d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe OnoratoIMPLEMENT_META_INTERFACE(CommonClock, "android.os.ICommonClock"); 2368d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 2378d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onoratostatus_t BnCommonClock::onTransact(uint32_t code, 2388d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato const Parcel& data, 23946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato Parcel* reply, 2408d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato uint32_t flags) { 241b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler switch(code) { 2428d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case IS_COMMON_TIME_VALID: { 2438d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 2448d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato bool valid; 2458595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato uint32_t timelineID; 2468d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = isCommonTimeValid(&valid, &timelineID); 247b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler reply->writeInt32(status); 2488d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 249b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler reply->writeInt32(valid); 250b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler reply->writeInt32(timelineID); 251b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler } 252b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler return OK; 253b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler } break; 254b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler 255b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler case COMMON_TIME_TO_LOCAL_TIME: { 2568d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 2573f76aa7755fbb2e77ca6a648bbfa1f75680788c9Joe Onorato int64_t commonTime = data.readInt64(); 2588d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato int64_t localTime; 259b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler status_t status = commonTimeToLocalTime(commonTime, &localTime); 2608d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 2618d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 2628d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt64(localTime); 2633f76aa7755fbb2e77ca6a648bbfa1f75680788c9Joe Onorato } 2648d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 2658d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 2663f76aa7755fbb2e77ca6a648bbfa1f75680788c9Joe Onorato 2678d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case LOCAL_TIME_TO_COMMON_TIME: { 2688d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 2698d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato int64_t localTime = data.readInt64(); 2708d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato int64_t commonTime; 2718d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = localTimeToCommonTime(localTime, &commonTime); 2728d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 2738d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 2748d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt64(commonTime); 2758595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato } 2768d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 2778d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 2788d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 2798d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case GET_COMMON_TIME: { 2808d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 2818d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato int64_t commonTime; 2828d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = getCommonTime(&commonTime); 2838d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 2848595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato if (status == OK) { 2858d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt64(commonTime); 2868595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato } 2878d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 2888d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 2898d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 2908d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case GET_COMMON_FREQ: { 2918d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 2928d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato uint64_t freq; 2938d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = getCommonFreq(&freq); 2948d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 2958d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 296b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler reply->writeInt64(freq); 297b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler } 298b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler return OK; 299b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler } break; 300b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler 3018d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case GET_LOCAL_TIME: { 3028d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 3038d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato int64_t localTime; 3048d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = getLocalTime(&localTime); 30546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato reply->writeInt32(status); 3068d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 3078d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt64(localTime); 3088d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 3098d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 3108d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 3118d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3128d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case GET_LOCAL_FREQ: { 31380a44401a22344f7eabce6976372ab144ef22893Joe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 31480a44401a22344f7eabce6976372ab144ef22893Joe Onorato uint64_t freq; 31580a44401a22344f7eabce6976372ab144ef22893Joe Onorato status_t status = getLocalFreq(&freq); 316a3850b68399ab49032e1fc2a2eab129fe3a7e69eDaniel Sandler reply->writeInt32(status); 317a3850b68399ab49032e1fc2a2eab129fe3a7e69eDaniel Sandler if (status == OK) { 318a3850b68399ab49032e1fc2a2eab129fe3a7e69eDaniel Sandler reply->writeInt64(freq); 3198d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 320561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato return OK; 3218d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 322561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato 3238d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case GET_ESTIMATED_ERROR: { 3248d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 3258d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato int32_t error; 3268d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = getEstimatedError(&error); 3278d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 3288d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 3298d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(error); 3308d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 3318d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 3328d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 3338d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3348d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case GET_TIMELINE_ID: { 3358d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 3368d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato uint64_t id; 3378d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = getTimelineID(&id); 3388d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 3398d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 3408d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt64(static_cast<int64_t>(id)); 3418d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 3428d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 3438d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 3448d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3458d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case GET_STATE: { 3468d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 3478d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato State state; 3488d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = getState(&state); 3498d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 3508d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 3518d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(static_cast<int32_t>(state)); 3528d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 3538d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 3548d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 3558d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3568d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case GET_MASTER_ADDRESS: { 3578d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 3588d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato struct sockaddr_storage addr; 3598d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = getMasterAddr(&addr); 3608d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3618d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if ((status == OK) && !canSerializeSockaddr(&addr)) { 3628d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status = UNKNOWN_ERROR; 3638d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 3648d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3658d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 3668d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3678d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (status == OK) { 3688d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato serializeSockaddr(reply, &addr); 3698d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 3708d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3718d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 3728d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 3738d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3748d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case REGISTER_LISTENER: { 3758d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 3768d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato sp<ICommonClockListener> listener = 3778d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato interface_cast<ICommonClockListener>(data.readStrongBinder()); 3788d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato status_t status = registerListener(listener); 3798d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato reply->writeInt32(status); 3808d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 3818d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 3828d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3838d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case UNREGISTER_LISTENER: { 3848d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClock, data, reply); 3858d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato sp<ICommonClockListener> listener = 3868d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato interface_cast<ICommonClockListener>(data.readStrongBinder()); 387561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato status_t status = unregisterListener(listener); 388561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato reply->writeInt32(status); 3898d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return OK; 3908d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } break; 3918d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 3928d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato return BBinder::onTransact(code, data, reply, flags); 3938d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato} 3948d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3958d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato/***** ICommonClockListener *****/ 3968d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 3978d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onoratoenum { 3988d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato ON_TIMELINE_CHANGED = IBinder::FIRST_CALL_TRANSACTION, 399b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler}; 4008d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 4018d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onoratoclass BpCommonClockListener : public BpInterface<ICommonClockListener> 402b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler{ 4038d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato public: 4048d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato BpCommonClockListener(const sp<IBinder>& impl) 4058d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato : BpInterface<ICommonClockListener>(impl) {} 406b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler 4078d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato virtual void onTimelineChanged(uint64_t timelineID) { 4088d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato Parcel data, reply; 4098d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato data.writeInterfaceToken( 4108d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato ICommonClockListener::getInterfaceDescriptor()); 411b9d36649ca458cb5326a144fd88e26b92efba728Daniel Sandler data.writeInt64(timelineID); 4128d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato remote()->transact(ON_TIMELINE_CHANGED, data, &reply); 4138d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 4148d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato}; 4158d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 4168d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe OnoratoIMPLEMENT_META_INTERFACE(CommonClockListener, 4178d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato "android.os.ICommonClockListener"); 4188d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato 4198d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onoratostatus_t BnCommonClockListener::onTransact( 4208d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { 4218d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato switch(code) { 4228d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato case ON_TIMELINE_CHANGED: { 4238d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato CHECK_INTERFACE(ICommonClockListener, data, reply); 4248d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato uint32_t timelineID = data.readInt64(); 4258d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato onTimelineChanged(timelineID); 42646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return NO_ERROR; 42746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } break; 42846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 42946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 43046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return BBinder::onTransact(code, data, reply, flags); 43146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato} 43246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 43346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato}; // namespace android 43446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato