1671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian/* 2671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * Copyright (C) 2010 The Android Open Source Project 3671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * 4671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * you may not use this file except in compliance with the License. 6671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * You may obtain a copy of the License at 7671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * 8671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * 10671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * See the License for the specific language governing permissions and 14671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian * limitations under the License. 15671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian */ 16671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 17671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include <stdint.h> 18671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include <math.h> 19671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include <sys/types.h> 20671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 21671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include <utils/Errors.h> 22671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 23671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include <hardware/sensors.h> 24671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 25671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include "LinearAccelerationSensor.h" 2673e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian#include "SensorDevice.h" 2773e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian#include "SensorFusion.h" 28671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 29671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopiannamespace android { 30671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian// --------------------------------------------------------------------------- 31671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 32671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias AgopianLinearAccelerationSensor::LinearAccelerationSensor(sensor_t const* list, size_t count) 33671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian : mSensorDevice(SensorDevice::getInstance()), 34671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian mGravitySensor(list, count) 35671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian{ 36671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian} 37671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 38671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopianbool LinearAccelerationSensor::process(sensors_event_t* outEvent, 39671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian const sensors_event_t& event) 40671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian{ 41671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian bool result = mGravitySensor.process(outEvent, event); 4273e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian if (result && event.type == SENSOR_TYPE_ACCELEROMETER) { 4373e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian outEvent->data[0] = event.acceleration.x - outEvent->data[0]; 4473e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian outEvent->data[1] = event.acceleration.y - outEvent->data[1]; 4573e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian outEvent->data[2] = event.acceleration.z - outEvent->data[2]; 46671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian outEvent->sensor = '_lin'; 47671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian outEvent->type = SENSOR_TYPE_LINEAR_ACCELERATION; 4873e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian return true; 49671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian } 5073e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian return false; 51671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian} 52671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 53671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopianstatus_t LinearAccelerationSensor::activate(void* ident, bool enabled) { 5473e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian return mGravitySensor.activate(this, enabled); 55671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian} 56671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 57671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopianstatus_t LinearAccelerationSensor::setDelay(void* ident, int handle, int64_t ns) { 5873e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian return mGravitySensor.setDelay(this, handle, ns); 59671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian} 60671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 61671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias AgopianSensor LinearAccelerationSensor::getSensor() const { 62671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian Sensor gsensor(mGravitySensor.getSensor()); 63671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian sensor_t hwSensor; 64671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian hwSensor.name = "Linear Acceleration Sensor"; 65671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian hwSensor.vendor = "Google Inc."; 6673e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian hwSensor.version = gsensor.getVersion(); 67671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian hwSensor.handle = '_lin'; 68671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian hwSensor.type = SENSOR_TYPE_LINEAR_ACCELERATION; 69671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian hwSensor.maxRange = gsensor.getMaxValue(); 70671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian hwSensor.resolution = gsensor.getResolution(); 71671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian hwSensor.power = gsensor.getPowerUsage(); 72671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian hwSensor.minDelay = gsensor.getMinDelay(); 73671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian Sensor sensor(&hwSensor); 74671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian return sensor; 75671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian} 76671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 77671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian// --------------------------------------------------------------------------- 78671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian}; // namespace android 79671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian 80