1bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin/* 2bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** 3bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** Copyright 2013, The Android Open Source Project 4bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** 5bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** Licensed under the Apache License, Version 2.0 (the "License"); 6bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** you may not use this file except in compliance with the License. 7bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** You may obtain a copy of the License at 8bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** 9bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** http://www.apache.org/licenses/LICENSE-2.0 10bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** 11bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** Unless required by applicable law or agreed to in writing, software 12bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** distributed under the License is distributed on an "AS IS" BASIS, 13bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** See the License for the specific language governing permissions and 15bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin** limitations under the License. 16bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin*/ 17bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 18bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <stdint.h> 19bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <sys/types.h> 20bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 21bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <binder/Parcel.h> 22bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <binder/IPCThreadState.h> 23bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <binder/IServiceManager.h> 24bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 25bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin#include <camera/ICameraServiceListener.h> 26bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 27bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinnamespace android { 28bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 29bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinnamespace { 30bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin enum { 31bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin STATUS_CHANGED = IBinder::FIRST_CALL_TRANSACTION, 32bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin }; 33bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin}; // namespace anonymous 34bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 35bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinclass BpCameraServiceListener: public BpInterface<ICameraServiceListener> 36bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin{ 37bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 38bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinpublic: 39bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin BpCameraServiceListener(const sp<IBinder>& impl) 40bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin : BpInterface<ICameraServiceListener>(impl) 41bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin { 42bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin } 43bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 44bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin virtual void onStatusChanged(Status status, int32_t cameraId) 45bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin { 46bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin Parcel data, reply; 47bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin data.writeInterfaceToken( 48bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin ICameraServiceListener::getInterfaceDescriptor()); 49bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 50bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin data.writeInt32(static_cast<int32_t>(status)); 51bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin data.writeInt32(cameraId); 52bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 53bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin remote()->transact(STATUS_CHANGED, 54bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin data, 55bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin &reply, 56bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin IBinder::FLAG_ONEWAY); 57bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin 58bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin reply.readExceptionCode(); 59bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin } 60bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin}; 61bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 62bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor MurashkinIMPLEMENT_META_INTERFACE(CameraServiceListener, 63bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin "android.hardware.ICameraServiceListener"); 64bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 65bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin// ---------------------------------------------------------------------- 66bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 67bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkinstatus_t BnCameraServiceListener::onTransact( 68bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 69bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin{ 70bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin switch(code) { 71bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin case STATUS_CHANGED: { 72bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin CHECK_INTERFACE(ICameraServiceListener, data, reply); 73bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 74bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin Status status = static_cast<Status>(data.readInt32()); 75bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin int32_t cameraId = data.readInt32(); 76bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 77bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin onStatusChanged(status, cameraId); 78bef3f23f16f2fc575b3f425febcfcc436a7db70fIgor Murashkin reply->writeNoException(); 79bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 80bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin return NO_ERROR; 81bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin } break; 82bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin default: 83bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin return BBinder::onTransact(code, data, reply, flags); 84bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin } 85bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin} 86bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 87bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin// ---------------------------------------------------------------------------- 88bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 89bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin}; // namespace android 90