1/* 2 * Copyright (C) 2015 Intel Corporation 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#include <cutils/log.h> 18#include "LSM303dOrientation.hpp" 19#include "SensorsHAL.hpp" 20#include "SensorUtils.hpp" 21 22struct sensor_t LSM303dOrientation::sensorDescription = { 23 .name = "LSM303d Orientation", 24 .vendor = "Unknown", 25 .version = 1, 26 .handle = -1, 27 .type = SENSOR_TYPE_ORIENTATION, 28 .maxRange = 12.0f, 29 .resolution = .00003f, 30 .power = 0.0003f, 31 .minDelay = 0, 32 .fifoReservedEventCount = 0, 33 .fifoMaxEventCount = 0, 34 .stringType = SENSOR_STRING_TYPE_ORIENTATION, 35 .requiredPermission = "", 36 .maxDelay = 0, 37 .flags = SENSOR_FLAG_CONTINUOUS_MODE, 38 .reserved = {}, 39}; 40 41Sensor * LSM303dOrientation::createSensor(int pollFd) { 42 return new LSM303dOrientation(pollFd, SensorUtils::getI2cBusNumber()); 43} 44 45void LSM303dOrientation::initModule() { 46 SensorContext::addSensorModule(&sensorDescription, createSensor); 47} 48 49LSM303dOrientation::LSM303dOrientation(int pollFd, 50 int bus, int address) 51 : LSM303d(bus, address), pollFd(pollFd) { 52 this->type = SENSOR_TYPE_ORIENTATION; 53 this->handle = sensorDescription.handle; 54} 55 56LSM303dOrientation::~LSM303dOrientation() {} 57 58int LSM303dOrientation::pollEvents(sensors_event_t* data, int count) { 59 getCoordinates(); 60 int16_t *rawdatap = getRawCoorData(); 61 data->orientation.x = (double)rawdatap[0]; 62 data->orientation.y = (double)rawdatap[1]; 63 data->orientation.z = (double)rawdatap[2]; 64 return 1; 65} 66 67int LSM303dOrientation::activate(int handle, int enabled) { 68 /* start or stop the acquisition thread */ 69 return activateAcquisitionThread(pollFd, handle, enabled); 70} 71