19d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare/* 29d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * Copyright (C) 2015 Intel Corporation 39d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * 49d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * Licensed under the Apache License, Version 2.0 (the "License"); 59d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * you may not use this file except in compliance with the License. 69d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * You may obtain a copy of the License at 79d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * 89d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * http://www.apache.org/licenses/LICENSE-2.0 99d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * 109d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * Unless required by applicable law or agreed to in writing, software 119d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * distributed under the License is distributed on an "AS IS" BASIS, 129d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * See the License for the specific language governing permissions and 149d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * limitations under the License. 159d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare */ 169d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 179d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare#ifndef LSM303d_ORIENTATION_HPP 189d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare#define LSM303d_ORIENTATION_HPP 199d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 209d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare#include <hardware/sensors.h> 219d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare#include "Sensor.hpp" 229d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare#include "lsm303d.h" 239d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 249d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Bearestruct sensors_event_t; 259d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 269d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare/** 279d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * LSM303dOrientation exposes the LSM303d orientation sensor 289d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * 299d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * Overrides the pollEvents & activate Sensor methods. 309d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare */ 319d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beareclass LSM303dOrientation : public Sensor, public upm::LSM303d { 329d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare public: 339d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare /** 349d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * LSM303dOrientation constructor 359d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * @param pollFd poll file descriptor 369d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * @param bus number of the bus 379d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * @param address device address 389d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare */ 399d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare LSM303dOrientation(int pollFd, 409d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare int bus=0, 419d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare int address = LSM303d_ADDR); 429d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 439d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare /** 449d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * LSM303dOrientation destructor 459d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare */ 469d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare ~LSM303dOrientation() override; 479d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 489d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare /** 499d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * Poll for events 509d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * @param data where to store the events 519d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * @param count the number of events returned must be <= to the count 529178ce05cb05831817580fc11fb7b20bc2031319Constantin Musca * @return number of events returned in data on success and a negative error number otherwise 539d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare */ 549d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare int pollEvents(sensors_event_t* data, int count) override; 559d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 569d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare /** 579d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * Activate the sensor 589d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * @param handle sensor identifier 599d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * @param enabled 1 for enabling and 0 for disabling 609d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare * @return 0 on success and a negative error number otherwise 619d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare */ 629d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare int activate(int handle, int enabled); 639d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 649d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare private: 659d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare static Sensor * createSensor(int pollFd); 669d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare static void initModule() __attribute__((constructor)); 679d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 689d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare int pollFd; 699d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare static struct sensor_t sensorDescription; 709d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare}; 719d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare 729d6eda0d35d9fef0ffd58d7061f0d5f509c212d4Bruce Beare#endif // LSM303d_ORIENTATION_HPP 73