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