/* * Copyright (C) 2017 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 A_SENSOR_EVENT_QUEUE_H_ #define A_SENSOR_EVENT_QUEUE_H_ #include <android/frameworks/sensorservice/1.0/IEventQueue.h> #include <android/frameworks/sensorservice/1.0/IEventQueueCallback.h> #include <android/looper.h> #include <android/sensor.h> #include <sensors/convert.h> #include <utils/Mutex.h> struct ALooper; struct ASensorEventQueue : public android::frameworks::sensorservice::V1_0::IEventQueueCallback { using Event = android::hardware::sensors::V1_0::Event; using IEventQueue = android::frameworks::sensorservice::V1_0::IEventQueue; ASensorEventQueue( ALooper *looper, int ident, ALooper_callbackFunc callback, void *data); android::hardware::Return<void> onEvent(const Event &event) override; void setImpl(const android::sp<IEventQueue> &queueImpl); int registerSensor( ASensorRef sensor, int32_t samplingPeriodUs, int64_t maxBatchReportLatencyUs); int enableSensor(ASensorRef sensor); int disableSensor(ASensorRef sensor); int setEventRate(ASensorRef sensor, int32_t samplingPeriodUs); ssize_t getEvents(ASensorEvent *events, size_t count); int hasEvents() const; void dispatchCallback(); void invalidate(); private: ALooper *mLooper; int mIdent; ALooper_callbackFunc mCallback; void *mData; android::sp<IEventQueue> mQueueImpl; android::Mutex mLock; std::vector<sensors_event_t> mQueue; DISALLOW_COPY_AND_ASSIGN(ASensorEventQueue); }; #endif // A_SENSOR_EVENT_QUEUE_H_