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#ifndef ANDROID_ROTATION_VECTOR_SENSOR_H
18671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#define ANDROID_ROTATION_VECTOR_SENSOR_H
19671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian
20671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include <stdint.h>
21671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include <sys/types.h>
22671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian
23671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include <gui/Sensor.h>
24671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian
25671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include "SensorDevice.h"
26671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#include "SensorInterface.h"
27671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian
2873e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian#include "Fusion.h"
2973e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian#include "SensorFusion.h"
3073e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian
31671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian// ---------------------------------------------------------------------------
32671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopiannamespace android {
33671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian// ---------------------------------------------------------------------------
34671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian
35671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopianclass RotationVectorSensor : public SensorInterface {
36671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian    SensorDevice& mSensorDevice;
3773e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian    SensorFusion& mSensorFusion;
38671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian
39671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopianpublic:
4073e0bc805a143d8cc2202fccb73230459edc6869Mathias Agopian    RotationVectorSensor();
41671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian    virtual bool process(sensors_event_t* outEvent,
42671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian            const sensors_event_t& event);
43671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian    virtual status_t activate(void* ident, bool enabled);
44671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian    virtual status_t setDelay(void* ident, int handle, int64_t ns);
45671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian    virtual Sensor getSensor() const;
46671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian    virtual bool isVirtual() const { return true; }
47671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian};
48671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian
496043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopianclass GyroDriftSensor : public SensorInterface {
506043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian    SensorDevice& mSensorDevice;
516043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian    SensorFusion& mSensorFusion;
526043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian
536043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopianpublic:
546043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian    GyroDriftSensor();
556043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian    virtual bool process(sensors_event_t* outEvent,
566043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian            const sensors_event_t& event);
576043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian    virtual status_t activate(void* ident, bool enabled);
586043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian    virtual status_t setDelay(void* ident, int handle, int64_t ns);
596043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian    virtual Sensor getSensor() const;
606043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian    virtual bool isVirtual() const { return true; }
616043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian};
626043e5329cc023ae1bf6c0b7b750e584c1ebfbf4Mathias Agopian
63671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian// ---------------------------------------------------------------------------
64671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian}; // namespace android
65671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian
66671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8Mathias Agopian#endif // ANDROID_ROTATION_VECTOR_SENSOR_H
67