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_LOOPER_H_
186f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
196f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#define A_LOOPER_H_
206f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
216f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android-base/macros.h>
226f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <utils/Condition.h>
236f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <utils/Mutex.h>
246f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
256f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <set>
266f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
276f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstruct ASensorEventQueue;
286f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
296f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstruct ALooper {
306f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    ALooper();
316f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
326f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    void signalSensorEvents(ASensorEventQueue *queue);
336f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    void wake();
346f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
356f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    int pollOnce(int timeoutMillis, int *outFd, int *outEvents, void **outData);
366f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
376f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    void invalidateSensorQueue(ASensorEventQueue *queue);
386f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
396f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberprivate:
406f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::Mutex mLock;
416f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    android::Condition mCondition;
426f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
436f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    std::set<ASensorEventQueue *> mReadyQueues;
446f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    bool mAwoken;
456f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
466f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber    DISALLOW_COPY_AND_ASSIGN(ALooper);
476f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber};
486f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber
496f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#endif  // A_LOOPER_H_
50