blob: 9f5a5573b7c7000611fe366698deebf5d0472ebb [file] [log] [blame]
/*
* Copyright (C) 2013-2015 STMicroelectronics
* Author: Denis Ciocca - <denis.ciocca@st.com>
*
* 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 ST_SENSOR_HAL_H
#define ST_SENSOR_HAL_H
#include <hardware/hardware.h>
#include <hardware/sensors.h>
#include <poll.h>
#include "SWSensorBase.h"
#include "common_data.h"
#define ARRAY_SIZE(a) (int)((sizeof(a) / sizeof(*(a))) / \
static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
/*
* Android string version
*/
#define ST_HAL_KITKAT_VERSION 0
#define ST_HAL_LOLLIPOP_VERSION 1
/*
* IIO driver sensors names
*/
#define ST_SENSORS_LIST_1 "lsm6ds3"
/*
* IIO driver sensors suffix for sensors
*/
#define ACCEL_NAME_SUFFIX_IIO "_accel"
#define MAGN_NAME_SUFFIX_IIO "_magn"
#define GYRO_NAME_SUFFIX_IIO "_gyro"
#define SIGN_MOTION_NAME_SUFFIX_IIO "_sign_motion"
#define STEP_DETECTOR_NAME_SUFFIX_IIO "_step_d"
#define STEP_COUNTER_NAME_SUFFIX_IIO "_step_c"
#define TILT_NAME_SUFFIX_IIO "_tilt"
#define PRESSURE_NAME_SUFFIX_IIO "_press"
#define ST_HAL_WAKEUP_SUFFIX_IIO "_wk"
#define CONCATENATE_STRING(x, y) (x y)
#if (CONFIG_ST_HAL_ANDROID_VERSION == ST_HAL_LOLLIPOP_VERSION)
#define ST_HAL_IIO_DEVICE_API_VERSION SENSORS_DEVICE_API_VERSION_1_3
#else /* CONFIG_ST_HAL_ANDROID_VERSION */
#define ST_HAL_IIO_DEVICE_API_VERSION SENSORS_DEVICE_API_VERSION_1_1
#endif /* CONFIG_ST_HAL_ANDROID_VERSION */
#if defined(CONFIG_ST_HAL_HAS_GEOMAG_FUSION) && \
(defined(CONFIG_ST_HAL_GEOMAG_ROT_VECTOR_AP_ENABLED))
#define ST_HAL_NEEDS_GEOMAG_FUSION 1
#endif /* CONFIG_ST_HAL_GAME_ROT_VECTOR_AP_ENABLED */
#if defined(CONFIG_ST_HAL_HAS_6AX_FUSION) && \
(defined(CONFIG_ST_HAL_GAME_ROT_VECTOR_AP_ENABLED) || \
defined(CONFIG_ST_HAL_GRAVITY_AP_ENABLED) || \
defined(CONFIG_ST_HAL_LINEAR_AP_ENABLED))
#define ST_HAL_NEEDS_6AX_FUSION 1
#endif /* CONFIG_ST_HAL_GAME_ROT_VECTOR_AP_ENABLED */
#if defined(CONFIG_ST_HAL_HAS_9AX_FUSION) && \
(defined(CONFIG_ST_HAL_ROT_VECTOR_AP_ENABLED) || \
defined(CONFIG_ST_HAL_ORIENTATION_AP_ENABLED) || \
defined(CONFIG_ST_HAL_GRAVITY_AP_ENABLED) || \
defined(CONFIG_ST_HAL_LINEAR_AP_ENABLED))
#define ST_HAL_NEEDS_9AX_FUSION 1
#endif /* CONFIG_ST_HAL_GAME_ROT_VECTOR_AP_ENABLED */
struct tmp_dicovery_data {
char *driver_name;
char *trigger_name;
char *dev_buffer_path;
char *iio_sysfs_path;
char *iio_sysfs_custom_trigger_path;
};
struct STSensorHAL_data {
struct sensors_poll_device_1 poll_device;
pthread_t *threads;
SensorBase *sensor_classes[ST_HAL_IIO_MAX_DEVICES];
unsigned int sensor_available;
struct sensor_t *sensor_t_list;
struct pollfd android_pollfd;
} typedef STSensorHAL_data;
#endif /* ST_SENSOR_HAL_H */