/*
 * Copyright (C) 2008-2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ANDROID_SENSORS_H
#define ANDROID_SENSORS_H

#include <errno.h>
#include <stdint.h>
#include <sys/cdefs.h>
#include <sys/types.h>

#include <linux/input.h>

#include <hardware/hardware.h>
#include <hardware/sensors.h>

__BEGIN_DECLS

/*****************************************************************************/

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))

#define ID_A                                        0//CW_ACCELERATION
#define ID_M                                        1//CW_MAGNETIC
#define ID_GY                                       2//CW_GYRO
#define ID_L                                        3//CW_LIGHT
#define ID_PS                                       4//CW_PRESSURE
#define ID_O                                        5//CW_ORIENTATION
#define ID_RV                                       6//CW_ROTATIONVECTOR
#define ID_LA                                       7//CW_LINEARACCELERATION
#define ID_G                                        8//CW_GRAVITY

#define ID_CW_MAGNETIC_UNCALIBRATED                 9//CW_MAGNETIC_UNCALIBRATED
#define ID_CW_GYROSCOPE_UNCALIBRATED               10//CW_GYROSCOPE_UNCALIBRATED
#define ID_CW_GAME_ROTATION_VECTOR                 11//CW_GAME_ROTATION_VECTOR
#define ID_CW_GEOMAGNETIC_ROTATION_VECTOR          12//CW_GEOMAGNETIC_ROTATION_VECTOR
#define ID_CW_SIGNIFICANT_MOTION                   13//CW_SIGNIFICANT_MOTION
#define ID_CW_STEP_DETECTOR                        14//CW_STEP_DETECTOR
#define ID_CW_STEP_COUNTER                         15//CW_STEP_COUNTER

#define ID_A_W                                     16//CW_ACCELERATION_WAKE_UP
#define ID_M_W                                     17//CW_MAGNETIC_WAKE_UP
#define ID_GY_W                                    18//CW_GYRO_WAKE_UP
#define ID_PS_W                                    19//CW_PRESSURE_WAKE_UP
#define ID_O_W                                     20//CW_ORIENTATION_WAKE_UP
#define ID_RV_W                                    21//CW_ROTATIONVECTOR_WAKE_UP
#define ID_LA_W                                    22//CW_LINEARACCELERATION_WAKE_UP
#define ID_G_W                                     23//CW_GRAVITY_WAKE_UP
#define ID_CW_MAGNETIC_UNCALIBRATED_W              24//CW_MAGNETIC_UNCALIBRATED_WAKE_UP
#define ID_CW_GYROSCOPE_UNCALIBRATED_W             25//CW_GYROSCOPE_UNCALIBRATED_WAKE_UP
#define ID_CW_GAME_ROTATION_VECTOR_W               26//CW_GAME_ROTATION_VECTOR_WAKE_UP
#define ID_CW_GEOMAGNETIC_ROTATION_VECTOR_W        27//CW_GEOMAGNETIC_ROTATION_VECTOR_WAKE_UP
#define ID_CW_STEP_DETECTOR_W                      28//CW_STEP_DETECTOR_WAKE_UP
#define ID_CW_STEP_COUNTER_W                       29//CW_STEP_COUNTER_WAKE_UP
/*****************************************************************************/

// The SENSORS Module
#define EVENT_TYPE_LIGHT           ABS_MISC

enum ABS_status {
	CW_ABS_X = 0x01,
	CW_ABS_Y,
	CW_ABS_Z,
	CW_ABS_X1,
	CW_ABS_Y1,
	CW_ABS_Z1,
	CW_ABS_TIMEDIFF,
	ABS_MAG_ACCURACY = 0x0A,
	ABS_ORI_ACCURACY = 0x0B,
	ABS_PRESSURE_X = 0x10,
	ABS_PRESSURE_Y = 0x11,
	ABS_PRESSURE_Z = 0x12,
	ABS_STEP_DETECTOR = 0x23,
	ABS_STEP_COUNTER = 0x24,
	ABS_TRANSPORT_BUFFER_FULL = 0x2E,
};

#define CONVERT_A        0.01f
#define CONVERT_M        0.01f
#define CONVERT_GYRO     0.01f
#define CONVERT_PS       1.0f
#define CONVERT_O        0.1f
#define CONVERT_ALL      0.01f
#define CONVERT_PRESSURE 100
#define CONVERT_RV       10000

#define CONVERT_1		1.0f
#define CONVERT_10		0.1f
#define CONVERT_100		0.01f
#define CONVERT_1000		0.001f
#define CONVERT_10000		0.0001f

#define RANGE_A                     (4*GRAVITY_EARTH)

#define SENSOR_STATE_MASK           (0x7FFF)

/*****************************************************************************/

__END_DECLS

#endif  // ANDROID_SENSORS_H