/* * Copyright (C) 2020 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. */ #ifndef ANDROID_HARDWARE_SENSORS_V2_1_ISENSORSCALLBACKWRAPPER_H #define ANDROID_HARDWARE_SENSORS_V2_1_ISENSORSCALLBACKWRAPPER_H #include "convertV2_1.h" #include "android/hardware/sensors/1.0/ISensors.h" #include "android/hardware/sensors/1.0/types.h" #include "android/hardware/sensors/2.0/ISensors.h" #include "android/hardware/sensors/2.0/ISensorsCallback.h" #include "android/hardware/sensors/2.1/ISensors.h" #include "android/hardware/sensors/2.1/ISensorsCallback.h" #include "android/hardware/sensors/2.1/types.h" #include #include namespace android { namespace hardware { namespace sensors { namespace V2_1 { namespace implementation { /** * The ISensorsCallbackWrapper classes below abstract away the common logic between both the V2.0 * and V2.1 versions of the Sensors HAL interface. This allows users of these classes to only care * about the HAL version at init time and then interact with either version of the callback without * worrying about the class type by utilizing the base class. */ class ISensorsCallbackWrapperBase : public VirtualLightRefBase { public: virtual Return onDynamicSensorsConnected( const hidl_vec& sensorInfos) = 0; virtual Return onDynamicSensorsDisconnected(const hidl_vec& sensorHandles) = 0; }; template class SensorsCallbackWrapperBase : public ISensorsCallbackWrapperBase { public: SensorsCallbackWrapperBase(sp sensorsCallback) : mSensorsCallback(sensorsCallback){}; virtual Return onDynamicSensorsConnected( const hidl_vec& sensorInfos) override { return mSensorsCallback->onDynamicSensorsConnected(convertToOldSensorInfos(sensorInfos)); } Return onDynamicSensorsDisconnected(const hidl_vec& sensorHandles) { return mSensorsCallback->onDynamicSensorsDisconnected(sensorHandles); } protected: sp mSensorsCallback; }; class ISensorsCallbackWrapperV2_0 : public SensorsCallbackWrapperBase { public: ISensorsCallbackWrapperV2_0(sp sensorsCallback) : SensorsCallbackWrapperBase(sensorsCallback){}; }; class ISensorsCallbackWrapperV2_1 : public SensorsCallbackWrapperBase { public: ISensorsCallbackWrapperV2_1(sp sensorsCallback) : SensorsCallbackWrapperBase(sensorsCallback) {} Return onDynamicSensorsConnected(const hidl_vec& sensorInfos) override { return mSensorsCallback->onDynamicSensorsConnected_2_1(sensorInfos); } }; } // namespace implementation } // namespace V2_1 } // namespace sensors } // namespace hardware } // namespace android #endif // ANDROID_HARDWARE_SENSORS_V2_1_ISENSORSCALLBACKWRAPPER_H