ASensorManager.cpp revision 6f96cb345a8ebfd9fef5f32931373776a798a193
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#include "ALooper.h" 186f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include "ASensorEventQueue.h" 196f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include "ASensorManager.h" 206f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 216f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#define LOG_TAG "libsensorndkbridge" 226f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android-base/logging.h> 236f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <android/looper.h> 246f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#include <sensors/convert.h> 256f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 266f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::hardware::sensors::V1_0::SensorInfo; 276f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::frameworks::sensorservice::V1_0::IEventQueue; 286f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::frameworks::sensorservice::V1_0::ISensorManager; 296f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::frameworks::sensorservice::V1_0::Result; 306f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::hardware::sensors::V1_0::SensorType; 316f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::sp; 326f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::Mutex; 336f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::status_t; 346f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::OK; 356f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::NO_INIT; 366f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::BAD_VALUE; 376f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::hardware::hidl_vec; 386f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberusing android::hardware::Return; 396f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 406f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstatic Mutex gLock; 416f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 426f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber// static 436f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorManager *ASensorManager::sInstance = NULL; 446f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 456f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber// static 466f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorManager *ASensorManager::getInstance() { 476f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber Mutex::Autolock autoLock(gLock); 486f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (sInstance == NULL) { 496f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber sInstance = new ASensorManager; 506f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (sInstance->initCheck() != OK) { 516f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber delete sInstance; 526f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber sInstance = NULL; 536f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 546f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 556f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return sInstance; 566f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 576f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 586f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorManager::ASensorManager() 596f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber : mInitCheck(NO_INIT) { 606f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber mManager = ISensorManager::getService(); 616f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (mManager != NULL) { 626f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber mInitCheck = OK; 636f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 646f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 656f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 666f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstatus_t ASensorManager::initCheck() const { 676f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return mInitCheck; 686f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 696f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 706f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorManager::getSensorList(ASensorList *out) { 716f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ASensorManager::getSensorList"; 726f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 736f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber Mutex::Autolock autoLock(mLock); 746f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 756f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (mSensorList == NULL) { 766f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber Return<void> ret = 776f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber mManager->getSensorList([&](const auto &list, auto result) { 786f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (result != Result::OK) { 796f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return; 806f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 816f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 826f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber mSensors = list; 836f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber }); 846f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 856f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber (void)ret.isOk(); 866f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 876f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber mSensorList.reset(new ASensorRef[mSensors.size()]); 886f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber for (size_t i = 0; i < mSensors.size(); ++i) { 896f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber mSensorList.get()[i] = 906f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber reinterpret_cast<ASensorRef>(&mSensors[i]); 916f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 926f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 936f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 946f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (out) { 956f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber *out = reinterpret_cast<ASensorList>(mSensorList.get()); 966f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 976f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 986f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return mSensors.size(); 996f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 1006f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1016f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorRef ASensorManager::getDefaultSensor(int type) { 1026f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber (void)getSensorList(NULL /* list */); 1036f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1046f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorRef defaultSensor = NULL; 1056f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1066f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber Return<void> ret = mManager->getDefaultSensor( 1076f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber static_cast<SensorType>(type), 1086f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber [&](const auto &sensor, auto result) { 1096f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (result != Result::OK) { 1106f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return; 1116f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 1126f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1136f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber for (size_t i = 0; i < mSensors.size(); ++i) { 1146f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (sensor == mSensors[i]) { 1156f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber defaultSensor = 1166f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber reinterpret_cast<ASensorRef>(&mSensors[i]); 1176f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1186f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber break; 1196f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 1206f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 1216f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber }); 1226f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1236f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber (void)ret.isOk(); 1246f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1256f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return defaultSensor; 1266f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 1276f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1286f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorRef ASensorManager::getDefaultSensorEx( 1296f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber int /* type */, bool /* wakeup */) { 1306f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber // XXX ISensorManager's getDefaultSensorEx() lacks a "wakeup" parameter. 1316f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return NULL; 1326f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 1336f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1346f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorEventQueue *ASensorManager::createEventQueue( 1356f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ALooper *looper, int ident, ALooper_callbackFunc callback, void *data) { 1366f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ASensorManager::createEventQueue"; 1376f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1386f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber sp<ASensorEventQueue> queue = 1396f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber new ASensorEventQueue(looper, ident, callback, data); 1406f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1416f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber Result result; 1426f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber Return<void> ret = 1436f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber mManager->createEventQueue( 1446f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber queue, [&](const sp<IEventQueue> &queueImpl, auto tmpResult) { 1456f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber result = tmpResult; 1466f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (result != Result::OK) { 1476f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return; 1486f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 1496f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1506f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber queue->setImpl(queueImpl); 1516f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber }); 1526f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1536f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (!ret.isOk() || result != Result::OK) { 1546f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(ERROR) << "FAILED to create event queue"; 1556f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return NULL; 1566f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 1576f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1586f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber queue->incStrong(NULL); 1596f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1606f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "Returning event queue " << queue.get(); 1616f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return queue.get(); 1626f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 1636f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1646f96cb345a8ebfd9fef5f32931373776a798a193Andreas Hubervoid ASensorManager::destroyEventQueue(ASensorEventQueue *queue) { 1656f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ASensorManager::destroyEventQueue(" << queue << ")"; 1666f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1676f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber queue->invalidate(); 1686f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1696f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber delete queue; 1706f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber queue = NULL; 1716f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 1726f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1736f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber//////////////////////////////////////////////////////////////////////////////// 1746f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1756f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorManager *ASensorManager_getInstance() { 1766f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return ASensorManager::getInstance(); 1776f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 1786f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1796f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorManager *ASensorManager_getInstanceForPackage( 1806f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber const char* /* packageName */) { 1816f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return ASensorManager::getInstance(); 1826f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 1836f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1846f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#define RETURN_IF_MANAGER_IS_NULL(x) \ 1856f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber do { \ 1866f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (manager == NULL) { \ 1876f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return x; \ 1886f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } \ 1896f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } while (0) 1906f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1916f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#define RETURN_IF_QUEUE_IS_NULL(x) \ 1926f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber do { \ 1936f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (queue == NULL) { \ 1946f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return x; \ 1956f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } \ 1966f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } while (0) 1976f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 1986f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#define RETURN_IF_SENSOR_IS_NULL(x) \ 1996f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber do { \ 2006f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (sensor == NULL) { \ 2016f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return x; \ 2026f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } \ 2036f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } while (0) 2046f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2056f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list) { 2066f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_MANAGER_IS_NULL(BAD_VALUE); 2076f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return manager->getSensorList(list); 2086f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2096f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2106f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensor const* ASensorManager_getDefaultSensor( 2116f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorManager* manager, int type) { 2126f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_MANAGER_IS_NULL(NULL); 2136f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2146f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return manager->getDefaultSensor(type); 2156f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2166f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2176f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#if 0 2186f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensor const* ASensorManager_getDefaultSensorEx( 2196f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorManager* manager, int type, bool wakeUp) { 2206f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_MANAGER_IS_NULL(NULL); 2216f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2226f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return manager->getDefaultSensorEx(type, wakeUp); 2236f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2246f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#endif 2256f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2266f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberASensorEventQueue* ASensorManager_createEventQueue( 2276f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorManager* manager, 2286f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ALooper* looper, 2296f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber int ident, 2306f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ALooper_callbackFunc callback, 2316f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber void* data) { 2326f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_MANAGER_IS_NULL(NULL); 2336f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2346f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (looper == NULL) { 2356f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return NULL; 2366f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 2376f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2386f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return manager->createEventQueue(looper, ident, callback, data); 2396f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2406f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2416f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorManager_destroyEventQueue( 2426f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorManager* manager, ASensorEventQueue* queue) { 2436f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_MANAGER_IS_NULL(BAD_VALUE); 2446f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_QUEUE_IS_NULL(BAD_VALUE); 2456f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2466f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber manager->destroyEventQueue(queue); 2476f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber queue = NULL; 2486f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2496f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return OK; 2506f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2516f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2526f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#if 0 2536f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorManager_createSharedMemoryDirectChannel( 2546f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorManager* manager, int fd, size_t size) { 2556f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_MANAGER_IS_NULL(BAD_VALUE); 2566f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2576f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return OK; 2586f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2596f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2606f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorManager_createHardwareBufferDirectChannel( 2616f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorManager* manager, AHardwareBuffer const * buffer, size_t size) { 2626f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_MANAGER_IS_NULL(BAD_VALUE); 2636f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2646f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return OK; 2656f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2666f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2676f96cb345a8ebfd9fef5f32931373776a798a193Andreas Hubervoid ASensorManager_destroyDirectChannel( 2686f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorManager* manager, int channelId) { 2696f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2706f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2716f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorManager_configureDirectReport( 2726f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorManager* manager, 2736f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensor const* sensor, 2746f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber int channelId,int rate) { 2756f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_MANAGER_IS_NULL(BAD_VALUE); 2766f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return OK; 2776f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2786f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#endif 2796f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2806f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorEventQueue_registerSensor( 2816f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorEventQueue* queue, 2826f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensor const* sensor, 2836f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber int32_t samplingPeriodUs, 2846f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber int64_t maxBatchReportLatencyUs) { 2856f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ASensorEventQueue_registerSensor"; 2866f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_QUEUE_IS_NULL(BAD_VALUE); 2876f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return queue->registerSensor( 2886f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber sensor, samplingPeriodUs, maxBatchReportLatencyUs); 2896f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2906f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2916f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorEventQueue_enableSensor( 2926f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorEventQueue* queue, ASensor const* sensor) { 2936f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ASensorEventQueue_enableSensor(queue " << queue << ")"; 2946f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_QUEUE_IS_NULL(BAD_VALUE); 2956f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return queue->enableSensor(sensor); 2966f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 2976f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 2986f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorEventQueue_disableSensor( 2996f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorEventQueue* queue, ASensor const* sensor) { 3006f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ASensorEventQueue_disableSensor"; 3016f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_QUEUE_IS_NULL(BAD_VALUE); 3026f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return queue->disableSensor(sensor); 3036f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3046f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3056f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorEventQueue_setEventRate( 3066f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorEventQueue* queue, 3076f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensor const* sensor, 3086f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber int32_t usec) { 3096f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_QUEUE_IS_NULL(BAD_VALUE); 3106f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return queue->setEventRate(sensor, usec); 3116f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3126f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3136f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensorEventQueue_hasEvents(ASensorEventQueue* queue) { 3146f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_QUEUE_IS_NULL(BAD_VALUE); 3156f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return queue->hasEvents(); 3166f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3176f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3186f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberssize_t ASensorEventQueue_getEvents( 3196f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensorEventQueue* queue, ASensorEvent* events, size_t count) { 3206f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ASensorEventQueue_getEvents"; 3216f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_QUEUE_IS_NULL(BAD_VALUE); 3226f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return queue->getEvents(events, count); 3236f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3246f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3256f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberconst char *ASensor_getName(ASensor const* sensor) { 3266f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(NULL); 3276f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return reinterpret_cast<const SensorInfo *>(sensor)->name.c_str(); 3286f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3296f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3306f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberconst char *ASensor_getVendor(ASensor const* sensor) { 3316f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(NULL); 3326f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return reinterpret_cast<const SensorInfo *>(sensor)->vendor.c_str(); 3336f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3346f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3356f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensor_getType(ASensor const* sensor) { 3366f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(ASENSOR_TYPE_INVALID); 3376f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return static_cast<int>( 3386f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber reinterpret_cast<const SensorInfo *>(sensor)->type); 3396f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3406f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3416f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberfloat ASensor_getResolution(ASensor const* sensor) { 3426f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(ASENSOR_RESOLUTION_INVALID); 3436f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return reinterpret_cast<const SensorInfo *>(sensor)->resolution; 3446f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3456f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3466f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensor_getMinDelay(ASensor const* sensor) { 3476f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(ASENSOR_DELAY_INVALID); 3486f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return reinterpret_cast<const SensorInfo *>(sensor)->minDelay; 3496f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3506f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3516f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensor_getFifoMaxEventCount(ASensor const* sensor) { 3526f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(ASENSOR_FIFO_COUNT_INVALID); 3536f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return reinterpret_cast<const SensorInfo *>(sensor)->fifoMaxEventCount; 3546f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3556f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3566f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensor_getFifoReservedEventCount(ASensor const* sensor) { 3576f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(ASENSOR_FIFO_COUNT_INVALID); 3586f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return reinterpret_cast<const SensorInfo *>(sensor)->fifoReservedEventCount; 3596f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3606f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3616f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberconst char* ASensor_getStringType(ASensor const* sensor) { 3626f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(NULL); 3636f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return reinterpret_cast<const SensorInfo *>(sensor)->typeAsString.c_str(); 3646f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3656f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3666f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#if 0 3676f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensor_getReportingMode(ASensor const* sensor) { 3686f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(AREPORTING_MODE_INVALID); 3696f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return 0; 3706f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3716f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3726f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberbool ASensor_isWakeUpSensor(ASensor const* sensor) { 3736f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(false); 3746f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return false; 3756f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3766f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3776f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberbool ASensor_isDirectChannelTypeSupported( 3786f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber ASensor const* sensor, int channelType) { 3796f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(false); 3806f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return false; 3816f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3826f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3836f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ASensor_getHighestDirectReportRateLevel(ASensor const* sensor) { 3846f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber RETURN_IF_SENSOR_IS_NULL(ASENSOR_DIRECT_RATE_STOP); 3856f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return 0; 3866f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3876f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber#endif 3886f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3896f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberstatic ALooper *getTheLooper() { 3906f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber static ALooper *sLooper = NULL; 3916f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3926f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber Mutex::Autolock autoLock(gLock); 3936f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber if (sLooper == NULL) { 3946f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber sLooper = new ALooper; 3956f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber } 3966f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 3976f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return sLooper; 3986f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 3996f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 4006f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 4016f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberALooper *ALooper_forThread() { 4026f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ALooper_forThread"; 4036f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return getTheLooper(); 4046f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 4056f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 4066f96cb345a8ebfd9fef5f32931373776a798a193Andreas HuberALooper *ALooper_prepare(int /* opts */) { 4076f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ALooper_prepare"; 4086f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return getTheLooper(); 4096f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 4106f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 4116f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huberint ALooper_pollOnce( 4126f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber int timeoutMillis, int* outFd, int* outEvents, void** outData) { 4136f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber int res = getTheLooper()->pollOnce(timeoutMillis, outFd, outEvents, outData); 4146f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ALooper_pollOnce => " << res; 4156f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber return res; 4166f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 4176f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber 4186f96cb345a8ebfd9fef5f32931373776a798a193Andreas Hubervoid ALooper_wake(ALooper* looper) { 4196f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber LOG(VERBOSE) << "ALooper_wake"; 4206f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber looper->wake(); 4216f96cb345a8ebfd9fef5f32931373776a798a193Andreas Huber} 422