11a00e2d5fb819c95ade644146020c83551208af1Peng Xu/* 21a00e2d5fb819c95ade644146020c83551208af1Peng Xu * Copyright (C) 2017 The Android Open Source Project 31a00e2d5fb819c95ade644146020c83551208af1Peng Xu * 41a00e2d5fb819c95ade644146020c83551208af1Peng Xu * Licensed under the Apache License, Version 2.0 (the "License"); 51a00e2d5fb819c95ade644146020c83551208af1Peng Xu * you may not use this file except in compliance with the License. 61a00e2d5fb819c95ade644146020c83551208af1Peng Xu * You may obtain a copy of the License at 71a00e2d5fb819c95ade644146020c83551208af1Peng Xu * 81a00e2d5fb819c95ade644146020c83551208af1Peng Xu * http://www.apache.org/licenses/LICENSE-2.0 91a00e2d5fb819c95ade644146020c83551208af1Peng Xu * 101a00e2d5fb819c95ade644146020c83551208af1Peng Xu * Unless required by applicable law or agreed to in writing, software 111a00e2d5fb819c95ade644146020c83551208af1Peng Xu * distributed under the License is distributed on an "AS IS" BASIS, 121a00e2d5fb819c95ade644146020c83551208af1Peng Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131a00e2d5fb819c95ade644146020c83551208af1Peng Xu * See the License for the specific language governing permissions and 141a00e2d5fb819c95ade644146020c83551208af1Peng Xu * limitations under the License. 151a00e2d5fb819c95ade644146020c83551208af1Peng Xu */ 161a00e2d5fb819c95ade644146020c83551208af1Peng Xu 171a00e2d5fb819c95ade644146020c83551208af1Peng Xu#ifndef ANDROID_SENSOR_DEVICE_UTIL 181a00e2d5fb819c95ade644146020c83551208af1Peng Xu#define ANDROID_SENSOR_DEVICE_UTIL 191a00e2d5fb819c95ade644146020c83551208af1Peng Xu 201a00e2d5fb819c95ade644146020c83551208af1Peng Xu#include <android/hidl/manager/1.0/IServiceNotification.h> 211a00e2d5fb819c95ade644146020c83551208af1Peng Xu 221a00e2d5fb819c95ade644146020c83551208af1Peng Xu#include <condition_variable> 231a00e2d5fb819c95ade644146020c83551208af1Peng Xu#include <thread> 241a00e2d5fb819c95ade644146020c83551208af1Peng Xu 251a00e2d5fb819c95ade644146020c83551208af1Peng Xuusing ::android::hardware::hidl_string; 261a00e2d5fb819c95ade644146020c83551208af1Peng Xuusing ::android::hardware::Return; 271a00e2d5fb819c95ade644146020c83551208af1Peng Xuusing ::android::hidl::manager::V1_0::IServiceNotification; 281a00e2d5fb819c95ade644146020c83551208af1Peng Xu 291a00e2d5fb819c95ade644146020c83551208af1Peng Xunamespace android { 301a00e2d5fb819c95ade644146020c83551208af1Peng Xunamespace SensorDeviceUtils { 311a00e2d5fb819c95ade644146020c83551208af1Peng Xu 321a00e2d5fb819c95ade644146020c83551208af1Peng Xuclass HidlServiceRegistrationWaiter : public IServiceNotification { 331a00e2d5fb819c95ade644146020c83551208af1Peng Xupublic: 341a00e2d5fb819c95ade644146020c83551208af1Peng Xu 351a00e2d5fb819c95ade644146020c83551208af1Peng Xu HidlServiceRegistrationWaiter(); 361a00e2d5fb819c95ade644146020c83551208af1Peng Xu 371a00e2d5fb819c95ade644146020c83551208af1Peng Xu Return<void> onRegistration(const hidl_string &fqName, 381a00e2d5fb819c95ade644146020c83551208af1Peng Xu const hidl_string &name, 391a00e2d5fb819c95ade644146020c83551208af1Peng Xu bool preexisting) override; 401a00e2d5fb819c95ade644146020c83551208af1Peng Xu 411a00e2d5fb819c95ade644146020c83551208af1Peng Xu void reset(); 421a00e2d5fb819c95ade644146020c83551208af1Peng Xu 431a00e2d5fb819c95ade644146020c83551208af1Peng Xu /** 441a00e2d5fb819c95ade644146020c83551208af1Peng Xu * Wait for service restart 451a00e2d5fb819c95ade644146020c83551208af1Peng Xu * 461a00e2d5fb819c95ade644146020c83551208af1Peng Xu * @return true if service is restart since last reset(); false otherwise. 471a00e2d5fb819c95ade644146020c83551208af1Peng Xu */ 481a00e2d5fb819c95ade644146020c83551208af1Peng Xu bool wait(); 49a53e89d23480db1bcc166afd0179ee4856cd38b5Yifan Hongprotected: 50a53e89d23480db1bcc166afd0179ee4856cd38b5Yifan Hong void onFirstRef() override; 511a00e2d5fb819c95ade644146020c83551208af1Peng Xuprivate: 52b41e87ae680beefd0d39a127d1ea0b2614caa5f9Martijn Coenen bool mRegistered; 531a00e2d5fb819c95ade644146020c83551208af1Peng Xu 541a00e2d5fb819c95ade644146020c83551208af1Peng Xu std::mutex mLock; 551a00e2d5fb819c95ade644146020c83551208af1Peng Xu std::condition_variable mCondition; 561a00e2d5fb819c95ade644146020c83551208af1Peng Xu bool mRestartObserved; 571a00e2d5fb819c95ade644146020c83551208af1Peng Xu}; 581a00e2d5fb819c95ade644146020c83551208af1Peng Xu 591a00e2d5fb819c95ade644146020c83551208af1Peng Xu} // namespace SensorDeviceUtils 601a00e2d5fb819c95ade644146020c83551208af1Peng Xu} // namespace android; 611a00e2d5fb819c95ade644146020c83551208af1Peng Xu 621a00e2d5fb819c95ade644146020c83551208af1Peng Xu#endif // ANDROID_SENSOR_SERVICE_UTIL 63