sensor.cpp revision cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247
1b957b9d63c88efd3a961759424987b99219adeedMathias Agopian/* 2b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * Copyright (C) 2009 The Android Open Source Project 3b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * 4b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * you may not use this file except in compliance with the License. 6b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * You may obtain a copy of the License at 7b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * 8b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * 10b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * Unless required by applicable law or agreed to in writing, software 11b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * See the License for the specific language governing permissions and 14b957b9d63c88efd3a961759424987b99219adeedMathias Agopian * limitations under the License. 15b957b9d63c88efd3a961759424987b99219adeedMathias Agopian */ 16b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 17b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#define LOG_TAG "sensor" 18b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <utils/Log.h> 19b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 20b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <android/looper.h> 21b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <android/sensor.h> 22b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 23b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <utils/RefBase.h> 244fe6c3e51be77e35f40872cdbca6c80f8f8b7ecbJeff Brown#include <utils/Looper.h> 25b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <utils/Timers.h> 26b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 27b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <gui/Sensor.h> 28b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <gui/SensorManager.h> 29b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <gui/SensorEventQueue.h> 30b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 31b957b9d63c88efd3a961759424987b99219adeedMathias Agopian#include <poll.h> 32b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 33b957b9d63c88efd3a961759424987b99219adeedMathias Agopianusing android::sp; 34b957b9d63c88efd3a961759424987b99219adeedMathias Agopianusing android::Sensor; 35b957b9d63c88efd3a961759424987b99219adeedMathias Agopianusing android::SensorManager; 36b957b9d63c88efd3a961759424987b99219adeedMathias Agopianusing android::SensorEventQueue; 37b957b9d63c88efd3a961759424987b99219adeedMathias Agopianusing android::String8; 38b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 39b957b9d63c88efd3a961759424987b99219adeedMathias Agopian/*****************************************************************************/ 40b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 41b957b9d63c88efd3a961759424987b99219adeedMathias AgopianASensorManager* ASensorManager_getInstance() 42b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 43b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return &SensorManager::getInstance(); 44b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 45b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 461bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopianint ASensorManager_getSensorList(ASensorManager* manager, 471bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian ASensorList* list) 48b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 491bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian Sensor const* const* l; 50b957b9d63c88efd3a961759424987b99219adeedMathias Agopian int c = static_cast<SensorManager*>(manager)->getSensorList(&l); 51b957b9d63c88efd3a961759424987b99219adeedMathias Agopian if (list) { 521bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian *list = reinterpret_cast<ASensorList>(l); 53b957b9d63c88efd3a961759424987b99219adeedMathias Agopian } 54b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return c; 55b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 56b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 571bf797857e025e8a71db86fb9e79765a767ec1ebMathias AgopianASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type) 58b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 59b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return static_cast<SensorManager*>(manager)->getDefaultSensor(type); 60b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 61b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 62b957b9d63c88efd3a961759424987b99219adeedMathias AgopianASensorEventQueue* ASensorManager_createEventQueue(ASensorManager* manager, 634fe6c3e51be77e35f40872cdbca6c80f8f8b7ecbJeff Brown ALooper* looper, int ident, ALooper_callbackFunc callback, void* data) 64b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 65b957b9d63c88efd3a961759424987b99219adeedMathias Agopian sp<SensorEventQueue> queue = 66b957b9d63c88efd3a961759424987b99219adeedMathias Agopian static_cast<SensorManager*>(manager)->createEventQueue(); 67b957b9d63c88efd3a961759424987b99219adeedMathias Agopian if (queue != 0) { 684fe6c3e51be77e35f40872cdbca6c80f8f8b7ecbJeff Brown ALooper_addFd(looper, queue->getFd(), ident, ALOOPER_EVENT_INPUT, callback, data); 69b957b9d63c88efd3a961759424987b99219adeedMathias Agopian queue->looper = looper; 70b957b9d63c88efd3a961759424987b99219adeedMathias Agopian queue->incStrong(manager); 71b957b9d63c88efd3a961759424987b99219adeedMathias Agopian } 72b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return static_cast<ASensorEventQueue*>(queue.get()); 73b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 74b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 75b957b9d63c88efd3a961759424987b99219adeedMathias Agopianint ASensorManager_destroyEventQueue(ASensorManager* manager, 76b957b9d63c88efd3a961759424987b99219adeedMathias Agopian ASensorEventQueue* inQueue) 77b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 78b957b9d63c88efd3a961759424987b99219adeedMathias Agopian sp<SensorEventQueue> queue = static_cast<SensorEventQueue*>(inQueue); 79b957b9d63c88efd3a961759424987b99219adeedMathias Agopian ALooper_removeFd(queue->looper, queue->getFd()); 80b957b9d63c88efd3a961759424987b99219adeedMathias Agopian queue->decStrong(manager); 81b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return 0; 82b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 83b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 84b957b9d63c88efd3a961759424987b99219adeedMathias Agopian/*****************************************************************************/ 85b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 861bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopianint ASensorEventQueue_enableSensor(ASensorEventQueue* queue, ASensor const* sensor) 87b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 88b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return static_cast<SensorEventQueue*>(queue)->enableSensor( 891bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian static_cast<Sensor const*>(sensor)); 90b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 91b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 921bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopianint ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor const* sensor) 93b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 94b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return static_cast<SensorEventQueue*>(queue)->disableSensor( 951bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian static_cast<Sensor const*>(sensor)); 96b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 97b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 981bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopianint ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor const* sensor, 99b957b9d63c88efd3a961759424987b99219adeedMathias Agopian int32_t usec) 100b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 101b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return static_cast<SensorEventQueue*>(queue)->setEventRate( 1021bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian static_cast<Sensor const*>(sensor), us2ns(usec)); 103b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 104b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 105b957b9d63c88efd3a961759424987b99219adeedMathias Agopianint ASensorEventQueue_hasEvents(ASensorEventQueue* queue) 106b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 107b957b9d63c88efd3a961759424987b99219adeedMathias Agopian struct pollfd pfd; 108b957b9d63c88efd3a961759424987b99219adeedMathias Agopian pfd.fd = static_cast<SensorEventQueue*>(queue)->getFd(); 109b957b9d63c88efd3a961759424987b99219adeedMathias Agopian pfd.events = POLLIN; 110b957b9d63c88efd3a961759424987b99219adeedMathias Agopian pfd.revents = 0; 111b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 112b957b9d63c88efd3a961759424987b99219adeedMathias Agopian int nfd = poll(&pfd, 1, 0); 113b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 114b957b9d63c88efd3a961759424987b99219adeedMathias Agopian if (nfd < 0) 115b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return -errno; 116b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 117b957b9d63c88efd3a961759424987b99219adeedMathias Agopian if (pfd.revents != POLLIN) 118b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return -1; 119b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 120b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return (nfd == 0) ? 0 : 1; 121b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 122b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 123b957b9d63c88efd3a961759424987b99219adeedMathias Agopianssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue, 124b957b9d63c88efd3a961759424987b99219adeedMathias Agopian ASensorEvent* events, size_t count) 125b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 126b957b9d63c88efd3a961759424987b99219adeedMathias Agopian return static_cast<SensorEventQueue*>(queue)->read(events, count); 127b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 128b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 129b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 130b957b9d63c88efd3a961759424987b99219adeedMathias Agopian/*****************************************************************************/ 131b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 1321bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopianconst char* ASensor_getName(ASensor const* sensor) 133b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 1341bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian return static_cast<Sensor const*>(sensor)->getName().string(); 135b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 136b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 1371bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopianconst char* ASensor_getVendor(ASensor const* sensor) 138b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 1391bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian return static_cast<Sensor const*>(sensor)->getVendor().string(); 140b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 141b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 1421bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopianint ASensor_getType(ASensor const* sensor) 143b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 1441bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian return static_cast<Sensor const*>(sensor)->getType(); 145b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 146b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 1471bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopianfloat ASensor_getResolution(ASensor const* sensor) 148b957b9d63c88efd3a961759424987b99219adeedMathias Agopian{ 1491bf797857e025e8a71db86fb9e79765a767ec1ebMathias Agopian return static_cast<Sensor const*>(sensor)->getResolution(); 150b957b9d63c88efd3a961759424987b99219adeedMathias Agopian} 151b957b9d63c88efd3a961759424987b99219adeedMathias Agopian 152050b56244ff46d43e4886018d7cd20f0b1dc02b9Mathias Agopianint ASensor_getMinDelay(ASensor const* sensor) 153050b56244ff46d43e4886018d7cd20f0b1dc02b9Mathias Agopian{ 154050b56244ff46d43e4886018d7cd20f0b1dc02b9Mathias Agopian return static_cast<Sensor const*>(sensor)->getMinDelay(); 155050b56244ff46d43e4886018d7cd20f0b1dc02b9Mathias Agopian} 156cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella 157cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akellaint ASensor_getFifoMaxEventCount(ASensor const* sensor) 158cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella{ 159cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella return static_cast<Sensor const*>(sensor)->getFifoMaxEventCount(); 160cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella} 161cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella 162cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akellaint ASensor_getFifoReservedEventCount(ASensor const* sensor) 163cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella{ 164cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella return static_cast<Sensor const*>(sensor)->getFifoReservedEventCount(); 165cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella} 166cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella 167cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akellaconst char* ASensor_getStringType(ASensor const* sensor) 168cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella{ 169cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella return static_cast<Sensor const*>(sensor)->getStringType().string(); 170cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella} 171cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella 172cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akellaconst char* ASensor_getRequiredPermission(ASensor const* sensor) 173cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella{ 174cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella return static_cast<Sensor const*>(sensor)->getRequiredPermission().string(); 175cd9a7bb3ba742606f93dcbd549d6d6eeb1cb5247Aravind Akella} 176