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_EVENT_QUEUE_H_
186f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
196f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#define A_SENSOR_EVENT_QUEUE_H_
206f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
216f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android/frameworks/sensorservice/1.0/IEventQueue.h>
226f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android/frameworks/sensorservice/1.0/IEventQueueCallback.h>
236f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android/looper.h>
246f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android/sensor.h>
256f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <sensors/convert.h>
266f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <utils/Mutex.h>
276f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
286f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstruct ALooper;
296f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
306f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstruct ASensorEventQueue
316f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    : public android::frameworks::sensorservice::V1_0::IEventQueueCallback {
326f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    using Event = android::hardware::sensors::V1_0::Event;
336f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    using IEventQueue = android::frameworks::sensorservice::V1_0::IEventQueue;
346f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
356f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ASensorEventQueue(
366f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            ALooper *looper,
376f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            int ident,
386f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            ALooper_callbackFunc callback,
396f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            void *data);
406f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
416f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::hardware::Return<void> onEvent(const Event &event) override;
426f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
436f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    void setImpl(const android::sp<IEventQueue> &queueImpl);
446f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
456f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    int registerSensor(
466f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            ASensorRef sensor,
476f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            int32_t samplingPeriodUs,
486f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber            int64_t maxBatchReportLatencyUs);
496f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
506f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    int enableSensor(ASensorRef sensor);
516f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    int disableSensor(ASensorRef sensor);
526f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
536f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    int setEventRate(ASensorRef sensor, int32_t samplingPeriodUs);
546f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
556f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ssize_t getEvents(ASensorEvent *events, size_t count);
566f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    int hasEvents() const;
576f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
586f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    void dispatchCallback();
596f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
606f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    void invalidate();
616f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
626f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberprivate:
636f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ALooper *mLooper;
646f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    int mIdent;
656f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ALooper_callbackFunc mCallback;
666f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    void *mData;
676f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::sp<IEventQueue> mQueueImpl;
686f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
696f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::Mutex mLock;
706f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    std::vector<sensors_event_t> mQueue;
716f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
726f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    DISALLOW_COPY_AND_ASSIGN(ASensorEventQueue);
736f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber};
746f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
756f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#endif  // A_SENSOR_EVENT_QUEUE_H_
766f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
77