/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define LOG_TAG "VrManager" #include #include #include #include #include namespace android { // Must be kept in sync with interface defined in IVrStateCallbacks.aidl. class BpVrStateCallbacks : public BpInterface { public: explicit BpVrStateCallbacks(const sp& impl) : BpInterface(impl) {} void onVrStateChanged(bool enabled) { Parcel data, reply; data.writeInterfaceToken(IVrStateCallbacks::getInterfaceDescriptor()); data.writeBool(enabled); remote()->transact(ON_VR_STATE_CHANGED, data, &reply, IBinder::FLAG_ONEWAY); } }; IMPLEMENT_META_INTERFACE(VrStateCallbacks, "android.service.vr.IVrStateCallbacks"); status_t BnVrStateCallbacks::onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch(code) { case ON_VR_STATE_CHANGED: { CHECK_INTERFACE(IVrStateCallbacks, data, reply); onVrStateChanged(data.readBool()); return OK; } } return BBinder::onTransact(code, data, reply, flags); } // Must be kept in sync with interface defined in // IPersistentVrStateCallbacks.aidl. class BpPersistentVrStateCallbacks : public BpInterface { public: explicit BpPersistentVrStateCallbacks(const sp& impl) : BpInterface(impl) {} void onPersistentVrStateChanged(bool enabled) { Parcel data, reply; data.writeInterfaceToken( IPersistentVrStateCallbacks::getInterfaceDescriptor()); data.writeBool(enabled); remote()->transact(ON_PERSISTENT_VR_STATE_CHANGED, data, &reply, IBinder::FLAG_ONEWAY); } }; IMPLEMENT_META_INTERFACE(PersistentVrStateCallbacks, "android.service.vr.IPersistentVrStateCallbacks"); status_t BnPersistentVrStateCallbacks::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch(code) { case ON_PERSISTENT_VR_STATE_CHANGED: { CHECK_INTERFACE(IPersistentVrStateCallbacks, data, reply); onPersistentVrStateChanged(data.readBool()); return OK; } } return BBinder::onTransact(code, data, reply, flags); } // Must be kept in sync with interface defined in IVrManager.aidl. class BpVrManager : public BpInterface { public: explicit BpVrManager(const sp& impl) : BpInterface(impl) {} void registerListener(const sp& cb) override { Parcel data; data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); data.writeStrongBinder(IInterface::asBinder(cb)); remote()->transact(REGISTER_LISTENER, data, NULL); } void unregisterListener(const sp& cb) override { Parcel data; data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); data.writeStrongBinder(IInterface::asBinder(cb)); remote()->transact(UNREGISTER_LISTENER, data, NULL); } void registerPersistentVrStateListener( const sp& cb) override { Parcel data; data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); data.writeStrongBinder(IInterface::asBinder(cb)); remote()->transact(REGISTER_PERSISTENT_VR_STATE_LISTENER, data, NULL); } void unregisterPersistentVrStateListener( const sp& cb) override { Parcel data; data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); data.writeStrongBinder(IInterface::asBinder(cb)); remote()->transact(UNREGISTER_PERSISTENT_VR_STATE_LISTENER, data, NULL); } bool getVrModeState() override { Parcel data, reply; data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); remote()->transact(GET_VR_MODE_STATE, data, &reply); int32_t ret = reply.readExceptionCode(); if (ret != 0) { return false; } return reply.readBool(); } }; IMPLEMENT_META_INTERFACE(VrManager, "android.service.vr.IVrManager"); } // namespace android