Sensor.cpp revision 589ce85ee4174829cfedce91b6b2509d2a4002eb
1589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian/*
2589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * Copyright (C) 2010 The Android Open Source Project
3589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian *
4589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
5589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * you may not use this file except in compliance with the License.
6589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * You may obtain a copy of the License at
7589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian *
8589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
9589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian *
10589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * Unless required by applicable law or agreed to in writing, software
11589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
12589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * See the License for the specific language governing permissions and
14589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian * limitations under the License.
15589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian */
16589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
17589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <stdint.h>
18589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <sys/types.h>
19589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
20589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <utils/Errors.h>
21589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <utils/String8.h>
22589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <utils/Flattenable.h>
23589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
24589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <hardware/sensors.h>
25589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
26589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian#include <gui/Sensor.h>
27589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
28589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian// ----------------------------------------------------------------------------
29589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiannamespace android {
30589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian// ----------------------------------------------------------------------------
31589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
32589ce85ee4174829cfedce91b6b2509d2a4002ebMathias AgopianSensor::Sensor()
33589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    : mHandle(0), mType(0),
34589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian      mMinValue(0), mMaxValue(0), mResolution(0),
35589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian      mPower(0)
36589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian{
37589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
38589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
39589ce85ee4174829cfedce91b6b2509d2a4002ebMathias AgopianSensor::~Sensor()
40589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian{
41589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
42589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
43589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianconst String8& Sensor::getName() const {
44589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return mName;
45589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
46589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
47589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianconst String8& Sensor::getVendor() const {
48589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return mVendor;
49589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
50589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
51589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianint32_t Sensor::getHandle() const {
52589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return mHandle;
53589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
54589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
55589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianint32_t Sensor::getType() const {
56589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return mType;
57589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
58589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
59589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianfloat Sensor::getMinValue() const {
60589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return mMinValue;
61589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
62589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
63589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianfloat Sensor::getMaxValue() const {
64589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return mMaxValue;
65589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
66589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
67589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianfloat Sensor::getResolution() const {
68589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return mResolution;
69589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
70589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
71589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianfloat Sensor::getPowerUsage() const {
72589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return mPower;
73589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
74589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
75589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiansize_t Sensor::getFlattenedSize() const
76589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian{
77589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return  sizeof(int32_t) + ((mName.length() + 3) & ~3) +
78589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            sizeof(int32_t) + ((mVendor.length() + 3) & ~3) +
79589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            sizeof(int32_t) * 2 +
80589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian            sizeof(float) * 3;
81589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
82589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
83589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiansize_t Sensor::getFdCount() const
84589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian{
85589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return 0;
86589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
87589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
88589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatic inline
89589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiansize_t write(void* buffer, size_t offset, const String8& value) {
90589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    memcpy(static_cast<char*>(buffer) + offset, value.string(), value.length());
91589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return (value.length() + 3) & ~3;
92589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
93589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
94589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatic inline
95589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiansize_t write(void* buffer, size_t offset, float value) {
96589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    *reinterpret_cast<float*>(static_cast<char*>(buffer) + offset) = value;
97589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return sizeof(float);
98589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
99589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
100589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatic inline
101589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiansize_t write(void* buffer, size_t offset, int32_t value) {
102589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    *reinterpret_cast<int32_t*>(static_cast<char*>(buffer) + offset) = value;
103589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return sizeof(int32_t);
104589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
105589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
106589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatus_t Sensor::flatten(void* buffer, size_t size,
107589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        int fds[], size_t count) const
108589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian{
109589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    if (size < Sensor::getFlattenedSize())
110589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        return -ENOMEM;
111589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
112589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    size_t offset = 0;
113589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, int32_t(mName.length()));
114589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, mName);
115589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, int32_t(mVendor.length()));
116589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, mVendor);
117589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, mHandle);
118589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, mType);
119589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, mMinValue);
120589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, mMaxValue);
121589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, mResolution);
122589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += write(buffer, offset, mPower);
123589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
124589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return NO_ERROR;
125589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
126589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
127589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatic inline
128589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiansize_t read(void const* buffer, size_t offset, String8* value, int32_t len) {
129589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    value->setTo(static_cast<char const*>(buffer) + offset, len);
130589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return (len + 3) & ~3;
131589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
132589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
133589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatic inline
134589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiansize_t read(void const* buffer, size_t offset, float* value) {
135589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    *value = *reinterpret_cast<float const*>(static_cast<char const*>(buffer) + offset);
136589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return sizeof(float);
137589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
138589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
139589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatic inline
140589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopiansize_t read(void const* buffer, size_t offset, int32_t* value) {
141589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    *value = *reinterpret_cast<int32_t const*>(static_cast<char const*>(buffer) + offset);
142589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return sizeof(int32_t);
143589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
144589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
145589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopianstatus_t Sensor::unflatten(void const* buffer, size_t size,
146589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian        int fds[], size_t count)
147589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian{
148589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    int32_t len;
149589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    size_t offset = 0;
150589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &len);
151589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &mName, len);
152589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &len);
153589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &mVendor, len);
154589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &mHandle);
155589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &mType);
156589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &mMinValue);
157589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &mMaxValue);
158589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &mResolution);
159589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    offset += read(buffer, offset, &mPower);
160589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
161589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian    return NO_ERROR;
162589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}
163589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian
164589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian// ----------------------------------------------------------------------------
165589ce85ee4174829cfedce91b6b2509d2a4002ebMathias Agopian}; // namespace android
166