12823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk/*
22823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * Copyright (C) 2015 The Android Open Source Project
32823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk *
42823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * Licensed under the Apache License, Version 2.0 (the "License");
52823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * you may not use this file except in compliance with the License.
62823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * You may obtain a copy of the License at
72823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk *
82823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk *      http://www.apache.org/licenses/LICENSE-2.0
92823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk *
102823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * Unless required by applicable law or agreed to in writing, software
112823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * distributed under the License is distributed on an "AS IS" BASIS,
122823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * See the License for the specific language governing permissions and
142823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk * limitations under the License.
152823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk */
162823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
172823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk#define LOG_TAG "BpCameraServiceProxy"
182823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
192823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk#include <stdint.h>
202823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
212823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk#include <binder/Parcel.h>
222823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
232823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk#include <camera/ICameraServiceProxy.h>
242823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
252823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunknamespace android {
262823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
272823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunkclass BpCameraServiceProxy: public BpInterface<ICameraServiceProxy> {
282823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunkpublic:
29090ef604f81447eab4aa0a5b45d6307482573560Chih-Hung Hsieh    explicit BpCameraServiceProxy(const sp<IBinder>& impl)
30090ef604f81447eab4aa0a5b45d6307482573560Chih-Hung Hsieh        : BpInterface<ICameraServiceProxy>(impl) {}
312823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
322823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk    virtual void pingForUserUpdate() {
33412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        Parcel data;
342823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk        data.writeInterfaceToken(ICameraServiceProxy::getInterfaceDescriptor());
35412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        remote()->transact(BnCameraServiceProxy::PING_FOR_USER_UPDATE, data, nullptr,
362823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk                IBinder::FLAG_ONEWAY);
372823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk    }
38412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala
39412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala    virtual void notifyCameraState(String16 cameraId, CameraState newCameraState) {
40412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        Parcel data;
41412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        data.writeInterfaceToken(ICameraServiceProxy::getInterfaceDescriptor());
42412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        data.writeString16(cameraId);
43412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        data.writeInt32(newCameraState);
44412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        remote()->transact(BnCameraServiceProxy::NOTIFY_CAMERA_STATE, data, nullptr,
45412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala                IBinder::FLAG_ONEWAY);
46412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala    }
47412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala
482823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk};
492823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
502823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
512823ce0ce6f9d508a07de20912c93cce9165027fRuben BrunkIMPLEMENT_META_INTERFACE(CameraServiceProxy, "android.hardware.ICameraServiceProxy");
522823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk
532823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunkstatus_t BnCameraServiceProxy::onTransact(uint32_t code, const Parcel& data, Parcel* reply,
542823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk        uint32_t flags) {
552823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk    switch(code) {
562823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk        case PING_FOR_USER_UPDATE: {
572823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk            CHECK_INTERFACE(ICameraServiceProxy, data, reply);
582823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk            pingForUserUpdate();
592823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk            return NO_ERROR;
602823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk        } break;
61412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        case NOTIFY_CAMERA_STATE: {
62412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala            CHECK_INTERFACE(ICameraServiceProxy, data, reply);
63412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala            String16 cameraId = data.readString16();
64412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala            CameraState newCameraState =
65412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala                static_cast<CameraState>(data.readInt32());
66412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala            notifyCameraState(cameraId, newCameraState);
67412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala            return NO_ERROR;
68412fe56cd7cf7d73bc5d2bcc3f635bc650d18de9Eino-Ville Talvala        } break;
692823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk        default:
702823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk            return BBinder::onTransact(code, data, reply, flags);
712823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk    }
722823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk}
732823ce0ce6f9d508a07de20912c93cce9165027fRuben Brunk}; // namespace android
74