1e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko/* 2e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * Copyright (C) 2017 The Android Open Source Project 3e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * 4e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * Licensed under the Apache License, Version 2.0 (the "License"); 5e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * you may not use this file except in compliance with the License. 6e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * You may obtain a copy of the License at 7e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * 8e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * http://www.apache.org/licenses/LICENSE-2.0 9e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * 10e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * Unless required by applicable law or agreed to in writing, software 11e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * distributed under the License is distributed on an "AS IS" BASIS, 12e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * See the License for the specific language governing permissions and 14e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko * limitations under the License. 15e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko */ 16e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 17e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#define LOG_TAG "VrManager" 18e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <utils/Log.h> 19e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 20e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <vr/vr_manager/vr_manager.h> 21e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <stdint.h> 22e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <sys/types.h> 23e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <binder/Parcel.h> 24e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 25e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkonamespace android { 26e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 27e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Must be kept in sync with interface defined in IVrStateCallbacks.aidl. 28e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 29e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoclass BpVrStateCallbacks : public BpInterface<IVrStateCallbacks> { 30e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko public: 31e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko explicit BpVrStateCallbacks(const sp<IBinder>& impl) 32e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko : BpInterface<IVrStateCallbacks>(impl) {} 33e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 34e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko void onVrStateChanged(bool enabled) { 35e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Parcel data, reply; 36e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko data.writeInterfaceToken(IVrStateCallbacks::getInterfaceDescriptor()); 37e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko data.writeBool(enabled); 38e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko remote()->transact(ON_VR_STATE_CHANGED, data, &reply, IBinder::FLAG_ONEWAY); 39e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 40e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko}; 41e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 42e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoIMPLEMENT_META_INTERFACE(VrStateCallbacks, "android.service.vr.IVrStateCallbacks"); 43e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 44e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkostatus_t BnVrStateCallbacks::onTransact(uint32_t code, const Parcel& data, 45e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Parcel* reply, uint32_t flags) { 46e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko switch(code) { 47e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko case ON_VR_STATE_CHANGED: { 48e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko CHECK_INTERFACE(IVrStateCallbacks, data, reply); 49e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko onVrStateChanged(data.readBool()); 50e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return OK; 51e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 52e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 53e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return BBinder::onTransact(code, data, reply, flags); 54e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 55e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 56050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas// Must be kept in sync with interface defined in 57050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas// IPersistentVrStateCallbacks.aidl. 58050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas 59050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomasclass BpPersistentVrStateCallbacks 60050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas : public BpInterface<IPersistentVrStateCallbacks> { 61050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas public: 62050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas explicit BpPersistentVrStateCallbacks(const sp<IBinder>& impl) 63050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas : BpInterface<IPersistentVrStateCallbacks>(impl) {} 64050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas 65050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas void onPersistentVrStateChanged(bool enabled) { 66050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas Parcel data, reply; 67050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas data.writeInterfaceToken( 68050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas IPersistentVrStateCallbacks::getInterfaceDescriptor()); 69050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas data.writeBool(enabled); 70050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas remote()->transact(ON_PERSISTENT_VR_STATE_CHANGED, 71050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas data, &reply, IBinder::FLAG_ONEWAY); 72050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas } 73050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas}; 74050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas 75050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven ThomasIMPLEMENT_META_INTERFACE(PersistentVrStateCallbacks, 76050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas "android.service.vr.IPersistentVrStateCallbacks"); 77050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas 78050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomasstatus_t BnPersistentVrStateCallbacks::onTransact( 79050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { 80050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas switch(code) { 81050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas case ON_PERSISTENT_VR_STATE_CHANGED: { 82050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas CHECK_INTERFACE(IPersistentVrStateCallbacks, data, reply); 83050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas onPersistentVrStateChanged(data.readBool()); 84050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas return OK; 85050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas } 86050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas } 87050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas return BBinder::onTransact(code, data, reply, flags); 88050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas} 89050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas 90e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Must be kept in sync with interface defined in IVrManager.aidl. 91e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 92e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoclass BpVrManager : public BpInterface<IVrManager> { 93e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko public: 94e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko explicit BpVrManager(const sp<IBinder>& impl) 95e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko : BpInterface<IVrManager>(impl) {} 96e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 97e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko void registerListener(const sp<IVrStateCallbacks>& cb) override { 98e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Parcel data; 99e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); 100e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko data.writeStrongBinder(IInterface::asBinder(cb)); 101e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko remote()->transact(REGISTER_LISTENER, data, NULL); 102e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 103e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 104e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko void unregisterListener(const sp<IVrStateCallbacks>& cb) override { 105e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Parcel data; 106e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); 107e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko data.writeStrongBinder(IInterface::asBinder(cb)); 108e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko remote()->transact(UNREGISTER_LISTENER, data, NULL); 109e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 110e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 111050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas void registerPersistentVrStateListener( 112050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas const sp<IPersistentVrStateCallbacks>& cb) override { 113050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas Parcel data; 114050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); 115050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas data.writeStrongBinder(IInterface::asBinder(cb)); 116050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas remote()->transact(REGISTER_PERSISTENT_VR_STATE_LISTENER, data, NULL); 117050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas } 118050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas 119050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas void unregisterPersistentVrStateListener( 120050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas const sp<IPersistentVrStateCallbacks>& cb) override { 121050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas Parcel data; 122050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); 123050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas data.writeStrongBinder(IInterface::asBinder(cb)); 124050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas remote()->transact(UNREGISTER_PERSISTENT_VR_STATE_LISTENER, data, NULL); 125050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas } 126050b2c83304bd16ec3a838da08b6ba6acf6a3af4Steven Thomas 127e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko bool getVrModeState() override { 128e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko Parcel data, reply; 129e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko data.writeInterfaceToken(IVrManager::getInterfaceDescriptor()); 130e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko remote()->transact(GET_VR_MODE_STATE, data, &reply); 131e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int32_t ret = reply.readExceptionCode(); 132e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko if (ret != 0) { 133e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return false; 134e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 135e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return reply.readBool(); 136e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 137e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko}; 138e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 139e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoIMPLEMENT_META_INTERFACE(VrManager, "android.service.vr.IVrManager"); 140e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 141e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} // namespace android 142