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