16f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber/*
26f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * Copyright (C) 2017 The Android Open Source Project
36f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber *
46f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
56f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * you may not use this file except in compliance with the License.
66f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * You may obtain a copy of the License at
76f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber *
86f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
96f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber *
106f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * Unless required by applicable law or agreed to in writing, software
116f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
126f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * See the License for the specific language governing permissions and
146f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber * limitations under the License.
156f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber */
166f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
176f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#ifndef A_SENSOR_MANAGER_H_
186f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
196f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#define A_SENSOR_MANAGER_H_
206f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
216f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android/frameworks/sensorservice/1.0/ISensorManager.h>
226f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android/sensor.h>
236f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <utils/Mutex.h>
246f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <utils/RefBase.h>
256f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
266f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstruct ALooper;
276f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
286f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstruct ASensorManager {
296f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    static ASensorManager *getInstance();
306f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
316f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ASensorManager();
326f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::status_t initCheck() const;
336f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
346f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    // Returns error or number of sensors returned.
356f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    int getSensorList(ASensorList *list);
366f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
376f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ASensorRef getDefaultSensor(int type);
386f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ASensorRef getDefaultSensorEx(int type, bool wakeup);
396f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
406f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ASensorEventQueue *createEventQueue(
416f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            ALooper *looper,
426f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            int ident,
436f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            ALooper_callbackFunc callback,
446f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            void *data);
456f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
466f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    void destroyEventQueue(ASensorEventQueue *queue);
476f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
486f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberprivate:
499b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh
509b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh    struct SensorDeathRecipient : public android::hardware::hidl_death_recipient
519b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh    {
529b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh        // hidl_death_recipient interface
539b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh        virtual void serviceDied(uint64_t cookie,
549b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh                const ::android::wp<::android::hidl::base::V1_0::IBase>& who) override;
559b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh    };
569b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh
576f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    using ISensorManager = android::frameworks::sensorservice::V1_0::ISensorManager;
586f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    using SensorInfo = android::hardware::sensors::V1_0::SensorInfo;
596f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
606f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    static ASensorManager *sInstance;
619b8dd60f0d4cc2503266fa49b1ae74ad78051c2bYin-Chia Yeh    android::sp<SensorDeathRecipient> mDeathRecipient = nullptr;
626f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
636f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::status_t mInitCheck;
646f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::sp<ISensorManager> mManager;
656f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
666f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    mutable android::Mutex mLock;
676f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::hardware::hidl_vec<SensorInfo> mSensors;
686f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    std::unique_ptr<ASensorRef[]> mSensorList;
696f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
706f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    DISALLOW_COPY_AND_ASSIGN(ASensorManager);
716f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber};
726f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
736f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#endif  // A_SENSOR_MANAGER_H_
74