Sensor.cpp revision 8683fca395d01734ec7946e9f0595ec5d7b754c6
1d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* 2d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Copyright (C) 2010 The Android Open Source Project 3d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 4d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * you may not use this file except in compliance with the License. 6d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * You may obtain a copy of the License at 7d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 8d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * 10d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Unless required by applicable law or agreed to in writing, software 11d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * See the License for the specific language governing permissions and 14d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * limitations under the License. 15d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 16d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 17d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include <stdint.h> 18d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include <sys/types.h> 19d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 20d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include <utils/Errors.h> 21d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include <utils/String8.h> 22d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include <utils/Flattenable.h> 23d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include <hardware/sensors.h> 25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include <gui/Sensor.h> 27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber// ---------------------------------------------------------------------------- 29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubernamespace android { 30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber// ---------------------------------------------------------------------------- 31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberSensor::Sensor() 33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : mHandle(0), mType(0), 34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mMinValue(0), mMaxValue(0), mResolution(0), 35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mPower(0), mMinDelay(0) 36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberSensor::Sensor(struct sensor_t const* hwSensor) 40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mName = hwSensor->name; 42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mVendor = hwSensor->vendor; 43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mVersion = hwSensor->version; 44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mHandle = hwSensor->handle; 45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mType = hwSensor->type; 46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mMinValue = 0; // FIXME: minValue 47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mMaxValue = hwSensor->maxRange; // FIXME: maxValue 48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mResolution = hwSensor->resolution; 49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mPower = hwSensor->power; 50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mMinDelay = hwSensor->minDelay; 51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas HuberSensor::~Sensor() 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst String8& Sensor::getName() const { 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mName; 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberconst String8& Sensor::getVendor() const { 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mVendor; 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberint32_t Sensor::getHandle() const { 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mHandle; 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberint32_t Sensor::getType() const { 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mType; 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberfloat Sensor::getMinValue() const { 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mMinValue; 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberfloat Sensor::getMaxValue() const { 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mMaxValue; 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberfloat Sensor::getResolution() const { 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mResolution; 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberfloat Sensor::getPowerUsage() const { 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mPower; 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberint32_t Sensor::getMinDelay() const { 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mMinDelay; 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubernsecs_t Sensor::getMinDelayNs() const { 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return getMinDelay() * 1000; 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberint32_t Sensor::getVersion() const { 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return mVersion; 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubersize_t Sensor::getSize() const 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return sizeof(int32_t) + ((mName.length() + 3) & ~3) + 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sizeof(int32_t) + ((mVendor.length() + 3) & ~3) + 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sizeof(int32_t) * 3 + 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sizeof(float) * 4 + 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sizeof(int32_t); 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberstatic inline 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubersize_t write(void* buffer, size_t offset, const String8& value) { 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber memcpy(static_cast<char*>(buffer) + offset, value.string(), value.length()); 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (value.length() + 3) & ~3; 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberstatic inline 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubersize_t write(void* buffer, size_t offset, float value) { 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *reinterpret_cast<float*>(static_cast<char*>(buffer) + offset) = value; 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return sizeof(float); 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberstatic inline 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubersize_t write(void* buffer, size_t offset, int32_t value) { 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *reinterpret_cast<int32_t*>(static_cast<char*>(buffer) + offset) = value; 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return sizeof(int32_t); 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberstatus_t Sensor::flatten(void* buffer) const 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber size_t offset = 0; 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, int32_t(mName.length())); 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mName); 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, int32_t(mVendor.length())); 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mVendor); 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mVersion); 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mHandle); 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mType); 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mMinValue); 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mMaxValue); 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mResolution); 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mPower); 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += write(buffer, offset, mMinDelay); 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return NO_ERROR; 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberstatic inline 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubersize_t read(void const* buffer, size_t offset, String8* value, int32_t len) { 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber value->setTo(static_cast<char const*>(buffer) + offset, len); 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (len + 3) & ~3; 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberstatic inline 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubersize_t read(void const* buffer, size_t offset, float* value) { 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *value = *reinterpret_cast<float const*>(static_cast<char const*>(buffer) + offset); 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return sizeof(float); 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberstatic inline 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Hubersize_t read(void const* buffer, size_t offset, int32_t* value) { 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *value = *reinterpret_cast<int32_t const*>(static_cast<char const*>(buffer) + offset); 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return sizeof(int32_t); 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberstatus_t Sensor::unflatten(void const* buffer, size_t size) 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32_t len; 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber size_t offset = 0; 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &len); 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mName, len); 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &len); 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mVendor, len); 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mVersion); 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mHandle); 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mType); 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mMinValue); 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mMaxValue); 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mResolution); 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mPower); 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber offset += read(buffer, offset, &mMinDelay); 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return NO_ERROR; 181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber// ---------------------------------------------------------------------------- 184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}; // namespace android 185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber