sensor.cpp revision b957b9d63c88efd3a961759424987b99219adeed
1/* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#define LOG_TAG "sensor" 18#include <utils/Log.h> 19 20#include <android/looper.h> 21#include <android/sensor.h> 22 23#include <utils/RefBase.h> 24#include <utils/PollLoop.h> 25#include <utils/Timers.h> 26 27#include <gui/Sensor.h> 28#include <gui/SensorManager.h> 29#include <gui/SensorEventQueue.h> 30 31#include <poll.h> 32 33using android::sp; 34using android::Sensor; 35using android::SensorManager; 36using android::SensorEventQueue; 37using android::String8; 38 39/*****************************************************************************/ 40 41ASensorManager* ASensorManager_getInstance() 42{ 43 return &SensorManager::getInstance(); 44} 45 46int ASensorManager_getSensorList(ASensorManager* manager, ASensor** list) 47{ 48 Sensor* l; 49 int c = static_cast<SensorManager*>(manager)->getSensorList(&l); 50 if (list) { 51 *list = l; 52 } 53 return c; 54} 55 56ASensor* ASensorManager_getDefaultSensor(ASensorManager* manager, int type) 57{ 58 return static_cast<SensorManager*>(manager)->getDefaultSensor(type); 59} 60 61ASensorEventQueue* ASensorManager_createEventQueue(ASensorManager* manager, 62 ALooper* looper, ALooper_callbackFunc* callback, void* data) 63{ 64 sp<SensorEventQueue> queue = 65 static_cast<SensorManager*>(manager)->createEventQueue(); 66 if (queue != 0) { 67 ALooper_addFd(looper, queue->getFd(), POLLIN, callback, data); 68 queue->looper = looper; 69 queue->incStrong(manager); 70 } 71 return static_cast<ASensorEventQueue*>(queue.get()); 72} 73 74int ASensorManager_destroyEventQueue(ASensorManager* manager, 75 ASensorEventQueue* inQueue) 76{ 77 sp<SensorEventQueue> queue = static_cast<SensorEventQueue*>(inQueue); 78 ALooper_removeFd(queue->looper, queue->getFd()); 79 queue->decStrong(manager); 80 return 0; 81} 82 83/*****************************************************************************/ 84 85int ASensorEventQueue_enableSensor(ASensorEventQueue* queue, ASensor* sensor) 86{ 87 return static_cast<SensorEventQueue*>(queue)->enableSensor( 88 static_cast<Sensor*>(sensor)); 89} 90 91int ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor* sensor) 92{ 93 return static_cast<SensorEventQueue*>(queue)->disableSensor( 94 static_cast<Sensor*>(sensor)); 95} 96 97int ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor* sensor, 98 int32_t usec) 99{ 100 return static_cast<SensorEventQueue*>(queue)->setEventRate( 101 static_cast<Sensor*>(sensor), us2ns(usec)); 102} 103 104int ASensorEventQueue_hasEvents(ASensorEventQueue* queue) 105{ 106 struct pollfd pfd; 107 pfd.fd = static_cast<SensorEventQueue*>(queue)->getFd(); 108 pfd.events = POLLIN; 109 pfd.revents = 0; 110 111 int nfd = poll(&pfd, 1, 0); 112 113 if (nfd < 0) 114 return -errno; 115 116 if (pfd.revents != POLLIN) 117 return -1; 118 119 return (nfd == 0) ? 0 : 1; 120} 121 122ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue, 123 ASensorEvent* events, size_t count) 124{ 125 return static_cast<SensorEventQueue*>(queue)->read(events, count); 126} 127 128 129/*****************************************************************************/ 130 131const char* ASensor_getName(ASensor* sensor) 132{ 133 return static_cast<Sensor*>(sensor)->getName().string(); 134} 135 136const char* ASensor_getVendor(ASensor* sensor) 137{ 138 return static_cast<Sensor*>(sensor)->getVendor().string(); 139} 140 141int ASensor_getType(ASensor* sensor) 142{ 143 return static_cast<Sensor*>(sensor)->getType(); 144} 145 146float ASensor_getResolution(ASensor* sensor) 147{ 148 return static_cast<Sensor*>(sensor)->getResolution(); 149} 150 151