Squash sensor device and type into interface 49/251849/1 accepted/tizen/unified/20210121.015630 submit/tizen/20210120.044228
authorBoram Bae <boram21.bae@samsung.com>
Thu, 14 Jan 2021 09:19:36 +0000 (18:19 +0900)
committerBoram Bae <boram21.bae@samsung.com>
Wed, 20 Jan 2021 02:06:42 +0000 (11:06 +0900)
* Maintain only two headers at the request of the architect of the hal layer

Change-Id: I52db09260293c617df849f602a5afef0fdd71e99
Signed-off-by: Boram Bae <boram21.bae@samsung.com>
include/hal-sensor-device-types.h [deleted file]
include/hal-sensor-device.h [deleted file]
include/hal-sensor-interface.h

diff --git a/include/hal-sensor-device-types.h b/include/hal-sensor-device-types.h
deleted file mode 100644 (file)
index 5cd1a92..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
- *
- * 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 __HAL_SENSOR_DEVICE_TYPES__
-#define __HAL_SENSOR_DEVICE_TYPES__
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <time.h>
-
-#define SENSOR_HAL_VERSION(maj, min) ((((maj)&0xFFFF) << 24) | ((min)&0xFFFF))
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/*
- * Sensor Types
- * These types are used to controll the sensors
- *
- * - base unit
- *   acceleration values : meter per second^2 (m/s^2)
- *   magnetic values     : micro-Tesla (uT)
- *   orientation values  : degrees
- *   gyroscope values    : degree/s
- *   temperature values  : degrees centigrade
- *   proximity valeus    : distance
- *   light values        : lux
- *   pressure values     : hectopascal (hPa)
- *   humidity            : relative humidity (%)
- */
-typedef enum {
-  SENSOR_DEVICE_UNKNOWN = -2,
-  SENSOR_DEVICE_ALL = -1,
-  SENSOR_DEVICE_ACCELEROMETER,
-  SENSOR_DEVICE_GRAVITY,
-  SENSOR_DEVICE_LINEAR_ACCELERATION,
-  SENSOR_DEVICE_GEOMAGNETIC,
-  SENSOR_DEVICE_ROTATION_VECTOR,
-  SENSOR_DEVICE_ORIENTATION,
-  SENSOR_DEVICE_GYROSCOPE,
-  SENSOR_DEVICE_LIGHT,
-  SENSOR_DEVICE_PROXIMITY,
-  SENSOR_DEVICE_PRESSURE,
-  SENSOR_DEVICE_ULTRAVIOLET,
-  SENSOR_DEVICE_TEMPERATURE,
-  SENSOR_DEVICE_HUMIDITY,
-  SENSOR_DEVICE_HRM,
-  SENSOR_DEVICE_HRM_LED_GREEN,
-  SENSOR_DEVICE_HRM_LED_IR,
-  SENSOR_DEVICE_HRM_LED_RED,
-  SENSOR_DEVICE_GYROSCOPE_UNCAL,
-  SENSOR_DEVICE_GEOMAGNETIC_UNCAL,
-  SENSOR_DEVICE_GYROSCOPE_RV,
-  SENSOR_DEVICE_GEOMAGNETIC_RV,
-
-  SENSOR_DEVICE_SIGNIFICANT_MOTION = 0x100,
-
-  SENSOR_DEVICE_HRM_BATCH = 0x200,
-  SENSOR_DEVICE_HRM_LED_GREEN_BATCH,
-
-  SENSOR_DEVICE_HUMAN_PEDOMETER = 0x300,
-  SENSOR_DEVICE_HUMAN_SLEEP_MONITOR,
-  SENSOR_DEVICE_HUMAN_SLEEP_DETECTOR,
-  SENSOR_DEVICE_HUMAN_STRESS_MONITOR,
-
-  SENSOR_DEVICE_EXERCISE_WALKING = 0x400,
-  SENSOR_DEVICE_EXERCISE_RUNNING,
-  SENSOR_DEVICE_EXERCISE_HIKING,
-  SENSOR_DEVICE_EXERCISE_CYCLING,
-  SENSOR_DEVICE_EXERCISE_ELLIPTICAL,
-  SENSOR_DEVICE_EXERCISE_INDOOR_CYCLING,
-  SENSOR_DEVICE_EXERCISE_ROWING,
-  SENSOR_DEVICE_EXERCISE_STEPPER,
-
-  SENSOR_DEVICE_DATA_JOURNAL = 0x500,
-
-  SENSOR_DEVICE_FUSION = 0x900,
-  SENSOR_DEVICE_AUTO_ROTATION,
-  SENSOR_DEVICE_AUTO_BRIGHTNESS,
-  SENSOR_DEVICE_MYOTEST,
-
-  SENSOR_DEVICE_GESTURE_MOVEMENT = 0x1200,
-  SENSOR_DEVICE_GESTURE_WRIST_UP,
-  SENSOR_DEVICE_GESTURE_WRIST_DOWN,
-  SENSOR_DEVICE_GESTURE_MOVEMENT_STATE,
-  SENSOR_DEVICE_GESTURE_PICK_UP,
-  SENSOR_DEVICE_GESTURE_FACE_DOWN,
-
-  SENSOR_DEVICE_ACTIVITY_TRACKER = 0x1A00,
-  SENSOR_DEVICE_ACTIVITY_LEVEL_MONITOR,
-  SENSOR_DEVICE_GPS_BATCH,
-  SENSOR_DEVICE_PPG_BATCH,
-  SENSOR_DEVICE_GPS_TIMESYNC,
-
-  SENSOR_DEVICE_HRM_CTRL = 0x1A80,
-  SENSOR_DEVICE_REG_CTRL,
-  SENSOR_DEVICE_GPS_CTRL,
-
-  SENSOR_DEVICE_WEAR_STATUS = 0x2000,
-  SENSOR_DEVICE_WEAR_ON_MONITOR,
-  SENSOR_DEVICE_NO_MOVE_DETECTOR,
-  SENSOR_DEVICE_RESTING_HR,
-  SENSOR_DEVICE_STEP_LEVEL_MONITOR,
-  SENSOR_DEVICE_EXERCISE_STANDALONE,
-  SENSOR_DEVICE_EXERCISE_HR,
-  SENSOR_DEVICE_WORKOUT,
-  SENSOR_DEVICE_CYCLE_MONITOR,
-  SENSOR_DEVICE_STAIR_TRACKER,
-  SENSOR_DEVICE_PRESSURE_INDICATOR,
-  SENSOR_DEVICE_PRESSURE_ALERT,
-  SENSOR_DEVICE_HR_CALORIE,
-  SENSOR_DEVICE_SWIMMING_TRACKER,
-  SENSOR_DEVICE_STRESS_TRACKER,
-  SENSOR_DEVICE_FAKE_MOTION,
-  SENSOR_DEVICE_GEOFENCE,
-  SENSOR_DEVICE_SWIMMING_OUTDOOR,
-  SENSOR_DEVICE_AUTO_SWIMMING,
-  SENSOR_DEVICE_INACTIVITY_DETECTOR,
-  SENSOR_DEVICE_HRM_BP,
-  SENSOR_DEVICE_ECG,
-  SENSOR_DEVICE_FALL_DETECTION,
-
-  SENSOR_DEVICE_CONTEXT = 0x7000,
-  SENSOR_DEVICE_MOTION,
-  SENSOR_DEVICE_PIR,
-  SENSOR_DEVICE_PIR_LONG,
-  SENSOR_DEVICE_DUST,
-  SENSOR_DEVICE_THERMOMETER,
-  SENSOR_DEVICE_PEDOMETER,
-  SENSOR_DEVICE_FLAT,
-  SENSOR_DEVICE_HRM_RAW,
-  SENSOR_DEVICE_TILT,
-  SENSOR_DEVICE_ROTATION_VECTOR_RAW,
-  SENSOR_DEVICE_GSR,
-  SENSOR_DEVICE_SIMSENSE,
-  SENSOR_DEVICE_PPG,
-} sensor_device_type;
-
-/*
- * A platform sensor handler is generated based on this handle
- * This id can be assigned from HAL developer. so it has to be unique in 1
- * sensor_device.
- */
-typedef struct sensor_info_t {
-  uint32_t id;
-  const char *name;
-  sensor_device_type type;
-  unsigned int event_type;  // for Internal API
-  const char *model_name;
-  const char *vendor;
-  float min_range;
-  float max_range;
-  float resolution;
-  int min_interval;
-  int max_batch_count;
-  bool wakeup_supported;
-} sensor_info_t;
-
-enum sensor_accuracy_t {
-  SENSOR_ACCURACY_UNDEFINED = -1,
-  SENSOR_ACCURACY_BAD = 0,
-  SENSOR_ACCURACY_NORMAL = 1,
-  SENSOR_ACCURACY_GOOD = 2,
-  SENSOR_ACCURACY_VERYGOOD = 3
-};
-
-#define SENSOR_DATA_VALUE_SIZE 16
-
-/* sensor_data_t */
-typedef struct sensor_data_t {
-  int accuracy;
-  unsigned long long timestamp;
-  int value_count;
-  float values[SENSOR_DATA_VALUE_SIZE];
-} sensor_data_t;
-
-#define SENSORHUB_DATA_VALUE_SIZE 4096
-
-/* sensorhub_data_t */
-typedef struct sensorhub_data_t {
-  int accuracy;
-  unsigned long long timestamp;
-
-  /*
-   *  Use "value_count" instead of "hub_data_size"
-   *  which is going to be removed soon
-   */
-  union {
-    int value_count;
-    int hub_data_size; /* deprecated */
-  };
-
-  /*
-   *  Use "values" instead of "hub_data"
-   *  which is going to be removed soon
-   */
-  union {
-    char values[SENSORHUB_DATA_VALUE_SIZE];
-    char hub_data[SENSORHUB_DATA_VALUE_SIZE]; /* deprecated */
-  };
-} sensorhub_data_t;
-
-#define SENSOR_PEDOMETER_DATA_DIFFS_SIZE 20
-
-typedef struct {
-  int accuracy;
-  unsigned long long timestamp;
-  int value_count; /* value_count == 8 */
-  float values[SENSOR_DATA_VALUE_SIZE];
-  /* values = {step count, walk step count, run step count,
-               moving distance, calorie burned, last speed,
-               last stepping frequency (steps per sec),
-               last step status (walking, running, ...)} */
-  /* Additional data attributes (not in sensor_data_t)*/
-  int diffs_count;
-  struct differences {
-    int timestamp;
-    int steps;
-    int walk_steps;
-    int run_steps;
-    int walk_up_steps;
-    int walk_down_steps;
-    int run_up_steps;
-    int run_down_steps;
-    float distance;
-    float calories;
-    float speed;
-  } diffs[SENSOR_PEDOMETER_DATA_DIFFS_SIZE];
-} sensor_pedometer_data_t;
-
-#define CONVERT_TYPE_ATTR(type, index) ((type) << 8 | 0x80 | (index))
-
-enum sensor_attribute {
-  SENSOR_ATTR_ACCELEROMETER_INJECTION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_ACCELEROMETER, 0xFF),
-  SENSOR_ATTR_ACTIVITY = CONVERT_TYPE_ATTR(SENSOR_DEVICE_ACTIVITY_TRACKER, 0x1),
-
-  SENSOR_ATTR_HRM_BATCH_OPR_MODE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x1),
-  SENSOR_ATTR_HRM_BATCH_ACTIVITY_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x2),
-  SENSOR_ATTR_HRM_BATCH_BATCH_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x3),
-  SENSOR_ATTR_HRM_BATCH_FLUSH = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x4),
-  SENSOR_ATTR_HRM_BATCH_ELEVATED_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x5),
-  SENSOR_ATTR_HRM_BATCH_ELEVATED_THR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x6),
-  SENSOR_ATTR_HRM_BATCH_BPM_RAW =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x7),
-  SENSOR_ATTR_HRM_BATCH_LOW_ALERT_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x8),
-  SENSOR_ATTR_HRM_BATCH_LOW_ALERT_THR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x9),
-
-  SENSOR_ATTR_HRM_LED_GREEN_BATCH_POLLING_INTERVAL =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_LED_GREEN_BATCH, 0x1),
-  SENSOR_ATTR_HRM_LED_GREEN_BATCH_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_LED_GREEN_BATCH, 0x2),
-  SENSOR_ATTR_HRM_LED_GREEN_BATCH_BATCH_PERIOD =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_LED_GREEN_BATCH, 0x3),
-
-  SENSOR_ATTR_PEDOMETER_HEIGHT =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x1),
-  SENSOR_ATTR_PEDOMETER_WEIGHT =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x2),
-  SENSOR_ATTR_PEDOMETER_GENDER =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x3),
-  SENSOR_ATTR_PEDOMETER_AGE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x4),
-  SENSOR_ATTR_PEDOMETER_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x2F),
-
-  SENSOR_ATTR_STRESS_MONITOR_AGE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x1),
-
-  SENSOR_ATTR_EXERCISE_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x1),
-  SENSOR_ATTR_EXERCISE_GPS =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x2),
-  SENSOR_ATTR_EXERCISE_BATCH_INTERVAL =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x3),
-  SENSOR_ATTR_EXERCISE_PSERVICE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x4),
-
-  SENSOR_ATTR_CYCLE_DURATION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x1),
-  SENSOR_ATTR_CYCLE_HOLDING_POSITION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x2),
-  SENSOR_ATTR_CYCLE_VELOCITY =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x3),
-  SENSOR_ATTR_CYCLE_GET_DATA_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x4),
-  SENSOR_ATTR_CYCLE_DATA_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x5),
-  SENSOR_ATTR_CYCLE_GPS_AGREEMENT =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x6),
-
-  SENSOR_ATTR_WORKOUT_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_WORKOUT, 0x1),
-  SENSOR_ATTR_WORKOUT_DURATION = CONVERT_TYPE_ATTR(SENSOR_DEVICE_WORKOUT, 0x2),
-
-  SENSOR_ATTR_RESTING_HR_OPR_MODE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x1),
-  SENSOR_ATTR_RESTING_HR_MAX_RHR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x2),
-  SENSOR_ATTR_RESTING_HR_MIN_RHR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x3),
-  SENSOR_ATTR_RESTING_HR_AVG_RHR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x4),
-  SENSOR_ATTR_RESTING_HR_HOUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x5),
-  SENSOR_ATTR_RESTING_HR_MIN = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x6),
-  SENSOR_ATTR_RESTING_HR_SEC = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x7),
-  SENSOR_ATTR_RESTING_HR_PROPERTY_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x10),
-  SENSOR_ATTR_RESTING_HR_PROPERTY_HR_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x11),
-  SENSOR_ATTR_RESTING_HR_PROPERTY_HR_VALUE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x12),
-  SENSOR_ATTR_RESTING_HR_PROPERTY_DURATION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x13),
-  SENSOR_ATTR_RESTING_HR_PROPERTY_ACT_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x14),
-  SENSOR_ATTR_RESTING_HR_PROPERTY_ACT_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x15),
-  SENSOR_ATTR_RESTING_HR_PROPERTY_CONT_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x16),
-  SENSOR_ATTR_RESTING_HR_DATA_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x20),
-  SENSOR_ATTR_RESTING_HR_DATA_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x21),
-
-  SENSOR_ATTR_STEP_LEVEL_MONITOR_DW_DURATION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_STEP_LEVEL_MONITOR, 0x1),
-
-  SENSOR_ATTR_EXERCISE_HR_OPR_MODE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x1),
-  SENSOR_ATTR_EXERCISE_HR_ACTIVITY_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x2),
-  SENSOR_ATTR_EXERCISE_HR_BATCH_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x3),
-  SENSOR_ATTR_EXERCISE_HR_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x4),
-  SENSOR_ATTR_EXERCISE_HR_ELEVATED_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x5),
-  SENSOR_ATTR_EXERCISE_HR_ELEVATED_THR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x6),
-  SENSOR_ATTR_EXERCISE_HR_BPM_RAW =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x7),
-  SENSOR_ATTR_EXERCISE_HR_LOW_ALERT_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x8),
-  SENSOR_ATTR_EXERCISE_HR_LOW_ALERT_THR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x9),
-
-  SENSOR_ATTR_PRESSURE_INDICATOR_START =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x1),
-  SENSOR_ATTR_PRESSURE_INDICATOR_STOP =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x2),
-  SENSOR_ATTR_PRESSURE_INDICATOR_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x3),
-  SENSOR_ATTR_PRESSURE_INDICATOR_RESTORE_TIME =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x4),
-  SENSOR_ATTR_PRESSURE_INDICATOR_RESTORE_VALUE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x5),
-  SENSOR_ATTR_PRESSURE_INDICATOR_CURRENT_TIME =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x6),
-
-  SENSOR_ATTR_PRESSURE_ALERT_START =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_ALERT, 0x1),
-  SENSOR_ATTR_PRESSURE_ALERT_STOP =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_ALERT, 0x2),
-
-  SENSOR_ATTR_HR_CALORIE_AGE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x1),
-  SENSOR_ATTR_HR_CALORIE_HEIGHT =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x2),
-  SENSOR_ATTR_HR_CALORIE_WEIGHT =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x3),
-  SENSOR_ATTR_HR_CALORIE_GENDER =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x4),
-  SENSOR_ATTR_HR_CALORIE_INST =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x10),
-  SENSOR_ATTR_HR_CALORIE_EXERCISE_TYPE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x11),
-  SENSOR_ATTR_HR_CALORIE_TARGET_CAL =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x12),
-  SENSOR_ATTR_HR_CALORIE_MAX_HEARTRATE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x13),
-  SENSOR_ATTR_HR_CALORIE_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x20),
-
-  SENSOR_ATTR_SWIMMING_TRACKER_PLACE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x1),
-  SENSOR_ATTR_SWIMMING_TRACKER_DISTANCE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x2),
-  SENSOR_ATTR_SWIMMING_TRACKER_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x3),
-  SENSOR_ATTR_SWIMMING_TRACKER_BATCH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x4),
-  SENSOR_ATTR_SWIMMING_TRACKER_GOAL_CALORIES =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x5),
-  SENSOR_ATTR_SWIMMING_TRACKER_GOAL_LAPS =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x6),
-  SENSOR_ATTR_SWIMMING_TRACKER_TIME_REST =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x7),
-  SENSOR_ATTR_SWIMMING_TRACKER_TIME_TURN =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x8),
-
-  SENSOR_ATTR_SWIMMING_OUTDOOR_SET_BATCH_LAP_COUNT =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x1),
-  SENSOR_ATTR_SWIMMING_OUTDOOR_SETGOAL_LENGTH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x2),
-  SENSOR_ATTR_SWIMMING_OUTDOOR_SETGOAL_TIME =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x3),
-  SENSOR_ATTR_SWIMMING_OUTDOOR_SET_GPS_PERMISSION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x4),
-  SENSOR_ATTR_SWIMMING_OUTDOOR_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x6),
-
-  SENSOR_ATTR_AUTO_SWIMMING_DURATION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_AUTO_SWIMMING, 0x1),
-
-  SENSOR_ATTR_INACTIVITY_DETECTOR_LEVEL =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_INACTIVITY_DETECTOR, 0x1),
-  SENSOR_ATTR_INACTIVITY_DETECTOR_DURATION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_INACTIVITY_DETECTOR, 0x2),
-
-  SENSOR_ATTR_STRESS_TRACKER_DUR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_STRESS_TRACKER, 0x1),
-  SENSOR_ATTR_STRESS_TRACKER_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_STRESS_TRACKER, 0x2),
-
-  SENSOR_ATTR_STRESS_MONITOR_BASE_HR =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x1),
-  SENSOR_ATTR_STRESS_MONITOR_HISTO_INDEX =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x2),
-  SENSOR_ATTR_STRESS_MONITOR_HISTO_VALUE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x3),
-  SENSOR_ATTR_STRESS_MONITOR_TUNE_INDEX =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x4),
-  SENSOR_ATTR_STRESS_MONITOR_TUNE_VALUE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x5),
-  SENSOR_ATTR_STRESS_MONITOR_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x6),
-  SENSOR_ATTR_STRESS_MONITOR_OPERATION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x7),
-
-  SENSOR_ATTR_SLEEP_MONITOR_STOP =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_SLEEP_MONITOR, 0x1),
-  SENSOR_ATTR_SLEEP_MONITOR_FLUSH =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_SLEEP_MONITOR, 0x2),
-
-  SENSOR_ATTR_SLEEP_DETECTOR_STOP =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_SLEEP_DETECTOR, 0x1),
-  SENSOR_ATTR_SLEEP_DETECTOR_SETTING =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_SLEEP_DETECTOR, 0x2),
-
-  SENSOR_ATTR_DATA_JOURNAL_START =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_DATA_JOURNAL, 0x1),
-  SENSOR_ATTR_DATA_JOURNAL_STOP =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_DATA_JOURNAL, 0x2),
-
-  SENSOR_ATTR_GPS_BATCH_OPR_MODE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GPS_BATCH, 0x1),
-
-  SENSOR_ATTR_PPG_BATCH_POLLING_INTERVAL =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PPG_BATCH, 0x1),
-  SENSOR_ATTR_PPG_BATCH_FLUSH = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PPG_BATCH, 0x2),
-
-  SENSOR_ATTR_REG_CTRL_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_REG_CTRL, 0x1),
-  SENSOR_ATTR_REG_CTRL_ADDRESS = CONVERT_TYPE_ATTR(SENSOR_DEVICE_REG_CTRL, 0x2),
-  SENSOR_ATTR_REG_CTRL_VALUE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_REG_CTRL, 0x3),
-  SENSOR_ATTR_REG_CTRL_MODE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_REG_CTRL, 0x4),
-
-  SENSOR_ATTR_GPS_CTRL_SETTING = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GPS_CTRL, 0x1),
-
-  SENSOR_ATTR_FAKE_MOTION_EVENT_INTERVAL =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_FAKE_MOTION, 0x1),
-  SENSOR_ATTR_FAKE_MOTION_EVENT_COUNT =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_FAKE_MOTION, 0x2),
-  SENSOR_ATTR_FAKE_MOTION_PAUSE_INTERVAL =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_FAKE_MOTION, 0x3),
-
-  SENSOR_ATTR_GEOFENCE_ID = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x1),
-  SENSOR_ATTR_GEOFENCE_LAT = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x2),
-  SENSOR_ATTR_GEOFENCE_LON = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x3),
-  SENSOR_ATTR_GEOFENCE_RADIUS = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x4),
-  SENSOR_ATTR_GEOFENCE_PROVIDER =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x5),
-  SENSOR_ATTR_GEOFENCE_ACCURACY =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x6),
-  SENSOR_ATTR_GEOFENCE_TIMESTAMP =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x7),
-  SENSOR_ATTR_GEOFENCE_CONNECT = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x8),
-  SENSOR_ATTR_GEOFENCE_START = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x10),
-  SENSOR_ATTR_GEOFENCE_STOP = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x11),
-  SENSOR_ATTR_GEOFENCE_SET_LOCATION =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x12),
-  SENSOR_ATTR_GEOFENCE_BT_CONNECT =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x13),
-
-  SENSOR_ATTR_FALL_DETECTION_OPR_MODE =
-      CONVERT_TYPE_ATTR(SENSOR_DEVICE_FALL_DETECTION, 0x1),
-};
-
-enum sensor_activity {
-  SENSOR_ACTIVITY_UNKNOWN = 1,
-  SENSOR_ACTIVITY_STILL = 2,
-  SENSOR_ACTIVITY_WALKING = 4,
-  SENSOR_ACTIVITY_RUNNING = 8,
-  SENSOR_ACTIVITY_IN_VEHICLE = 16,
-  SENSOR_ACTIVITY_ON_BICYCLE = 32,
-};
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __HAL_SENSOR_DEVICE_TYPES__ */
diff --git a/include/hal-sensor-device.h b/include/hal-sensor-device.h
deleted file mode 100644 (file)
index a13150f..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
- *
- * 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 __HAL_SENSOR_DEVICE__
-#define __HAL_SENSOR_DEVICE__
-
-#include <stdbool.h>
-#include <stdint.h>
-
-#include "hal-sensor-device-types.h"
-
-/*
- * Create devices
- */
-typedef void *sensor_device_t;
-typedef int (*create_t)(sensor_device_t **devices);
-
-/*
- * Sensor device interface
- * 1 device must be abstracted from 1 device event node
- */
-class sensor_device {
- public:
-  virtual ~sensor_device() {}
-
-  uint32_t get_hal_version(void) { return SENSOR_HAL_VERSION(1, 0); }
-
-  virtual int get_poll_fd(void) = 0;
-  virtual int get_sensors(const sensor_info_t **sensors) = 0;
-
-  virtual bool enable(uint32_t id) = 0;
-  virtual bool disable(uint32_t id) = 0;
-
-  virtual int read_fd(uint32_t **ids) = 0;
-  virtual int get_data(uint32_t id, sensor_data_t **data, int *length) = 0;
-
-  virtual bool set_interval(uint32_t id, unsigned long val) { return true; }
-  virtual bool set_batch_latency(uint32_t id, unsigned long val) {
-    return true;
-  }
-  virtual bool set_attribute_int(uint32_t id, int32_t attribute,
-                                 int32_t value) {
-    return true;
-  }
-  virtual bool set_attribute_str(uint32_t id, int32_t attribute, char *value,
-                                 int len) {
-    return true;
-  }
-  virtual bool flush(uint32_t id) { return true; }
-};
-
-#endif
index 13ed8a5267496ec0215a90769086a95d829c5ebe..7e0324a7722f20222688966fb3237ac77be8f25b 100644 (file)
 #define __HAL_SENSOR_INTERFACE__
 
 #include <hal/hal-common-interface.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <time.h>
+
+#define SENSOR_HAL_VERSION(maj, min) ((((maj)&0xFFFF) << 24) | ((min)&0xFFFF))
 
 #ifdef __cplusplus
 extern "C" {
@@ -29,7 +34,546 @@ typedef struct _hal_backend_sensor_funcs {
   int (*create)(void ***devices);
 } hal_backend_sensor_funcs;
 
+/*
+ * Sensor Types
+ * These types are used to controll the sensors
+ *
+ * - base unit
+ *   acceleration values : meter per second^2 (m/s^2)
+ *   magnetic values     : micro-Tesla (uT)
+ *   orientation values  : degrees
+ *   gyroscope values    : degree/s
+ *   temperature values  : degrees centigrade
+ *   proximity valeus    : distance
+ *   light values        : lux
+ *   pressure values     : hectopascal (hPa)
+ *   humidity            : relative humidity (%)
+ */
+typedef enum {
+  SENSOR_DEVICE_UNKNOWN = -2,
+  SENSOR_DEVICE_ALL = -1,
+  SENSOR_DEVICE_ACCELEROMETER,
+  SENSOR_DEVICE_GRAVITY,
+  SENSOR_DEVICE_LINEAR_ACCELERATION,
+  SENSOR_DEVICE_GEOMAGNETIC,
+  SENSOR_DEVICE_ROTATION_VECTOR,
+  SENSOR_DEVICE_ORIENTATION,
+  SENSOR_DEVICE_GYROSCOPE,
+  SENSOR_DEVICE_LIGHT,
+  SENSOR_DEVICE_PROXIMITY,
+  SENSOR_DEVICE_PRESSURE,
+  SENSOR_DEVICE_ULTRAVIOLET,
+  SENSOR_DEVICE_TEMPERATURE,
+  SENSOR_DEVICE_HUMIDITY,
+  SENSOR_DEVICE_HRM,
+  SENSOR_DEVICE_HRM_LED_GREEN,
+  SENSOR_DEVICE_HRM_LED_IR,
+  SENSOR_DEVICE_HRM_LED_RED,
+  SENSOR_DEVICE_GYROSCOPE_UNCAL,
+  SENSOR_DEVICE_GEOMAGNETIC_UNCAL,
+  SENSOR_DEVICE_GYROSCOPE_RV,
+  SENSOR_DEVICE_GEOMAGNETIC_RV,
+
+  SENSOR_DEVICE_SIGNIFICANT_MOTION = 0x100,
+
+  SENSOR_DEVICE_HRM_BATCH = 0x200,
+  SENSOR_DEVICE_HRM_LED_GREEN_BATCH,
+
+  SENSOR_DEVICE_HUMAN_PEDOMETER = 0x300,
+  SENSOR_DEVICE_HUMAN_SLEEP_MONITOR,
+  SENSOR_DEVICE_HUMAN_SLEEP_DETECTOR,
+  SENSOR_DEVICE_HUMAN_STRESS_MONITOR,
+
+  SENSOR_DEVICE_EXERCISE_WALKING = 0x400,
+  SENSOR_DEVICE_EXERCISE_RUNNING,
+  SENSOR_DEVICE_EXERCISE_HIKING,
+  SENSOR_DEVICE_EXERCISE_CYCLING,
+  SENSOR_DEVICE_EXERCISE_ELLIPTICAL,
+  SENSOR_DEVICE_EXERCISE_INDOOR_CYCLING,
+  SENSOR_DEVICE_EXERCISE_ROWING,
+  SENSOR_DEVICE_EXERCISE_STEPPER,
+
+  SENSOR_DEVICE_DATA_JOURNAL = 0x500,
+
+  SENSOR_DEVICE_FUSION = 0x900,
+  SENSOR_DEVICE_AUTO_ROTATION,
+  SENSOR_DEVICE_AUTO_BRIGHTNESS,
+  SENSOR_DEVICE_MYOTEST,
+
+  SENSOR_DEVICE_GESTURE_MOVEMENT = 0x1200,
+  SENSOR_DEVICE_GESTURE_WRIST_UP,
+  SENSOR_DEVICE_GESTURE_WRIST_DOWN,
+  SENSOR_DEVICE_GESTURE_MOVEMENT_STATE,
+  SENSOR_DEVICE_GESTURE_PICK_UP,
+  SENSOR_DEVICE_GESTURE_FACE_DOWN,
+
+  SENSOR_DEVICE_ACTIVITY_TRACKER = 0x1A00,
+  SENSOR_DEVICE_ACTIVITY_LEVEL_MONITOR,
+  SENSOR_DEVICE_GPS_BATCH,
+  SENSOR_DEVICE_PPG_BATCH,
+  SENSOR_DEVICE_GPS_TIMESYNC,
+
+  SENSOR_DEVICE_HRM_CTRL = 0x1A80,
+  SENSOR_DEVICE_REG_CTRL,
+  SENSOR_DEVICE_GPS_CTRL,
+
+  SENSOR_DEVICE_WEAR_STATUS = 0x2000,
+  SENSOR_DEVICE_WEAR_ON_MONITOR,
+  SENSOR_DEVICE_NO_MOVE_DETECTOR,
+  SENSOR_DEVICE_RESTING_HR,
+  SENSOR_DEVICE_STEP_LEVEL_MONITOR,
+  SENSOR_DEVICE_EXERCISE_STANDALONE,
+  SENSOR_DEVICE_EXERCISE_HR,
+  SENSOR_DEVICE_WORKOUT,
+  SENSOR_DEVICE_CYCLE_MONITOR,
+  SENSOR_DEVICE_STAIR_TRACKER,
+  SENSOR_DEVICE_PRESSURE_INDICATOR,
+  SENSOR_DEVICE_PRESSURE_ALERT,
+  SENSOR_DEVICE_HR_CALORIE,
+  SENSOR_DEVICE_SWIMMING_TRACKER,
+  SENSOR_DEVICE_STRESS_TRACKER,
+  SENSOR_DEVICE_FAKE_MOTION,
+  SENSOR_DEVICE_GEOFENCE,
+  SENSOR_DEVICE_SWIMMING_OUTDOOR,
+  SENSOR_DEVICE_AUTO_SWIMMING,
+  SENSOR_DEVICE_INACTIVITY_DETECTOR,
+  SENSOR_DEVICE_HRM_BP,
+  SENSOR_DEVICE_ECG,
+  SENSOR_DEVICE_FALL_DETECTION,
+
+  SENSOR_DEVICE_CONTEXT = 0x7000,
+  SENSOR_DEVICE_MOTION,
+  SENSOR_DEVICE_PIR,
+  SENSOR_DEVICE_PIR_LONG,
+  SENSOR_DEVICE_DUST,
+  SENSOR_DEVICE_THERMOMETER,
+  SENSOR_DEVICE_PEDOMETER,
+  SENSOR_DEVICE_FLAT,
+  SENSOR_DEVICE_HRM_RAW,
+  SENSOR_DEVICE_TILT,
+  SENSOR_DEVICE_ROTATION_VECTOR_RAW,
+  SENSOR_DEVICE_GSR,
+  SENSOR_DEVICE_SIMSENSE,
+  SENSOR_DEVICE_PPG,
+} sensor_device_type;
+
+/*
+ * A platform sensor handler is generated based on this handle
+ * This id can be assigned from HAL developer. so it has to be unique in 1
+ * sensor_device.
+ */
+typedef struct sensor_info_t {
+  uint32_t id;
+  const char *name;
+  sensor_device_type type;
+  unsigned int event_type;  // for Internal API
+  const char *model_name;
+  const char *vendor;
+  float min_range;
+  float max_range;
+  float resolution;
+  int min_interval;
+  int max_batch_count;
+  bool wakeup_supported;
+} sensor_info_t;
+
+enum sensor_accuracy_t {
+  SENSOR_ACCURACY_UNDEFINED = -1,
+  SENSOR_ACCURACY_BAD = 0,
+  SENSOR_ACCURACY_NORMAL = 1,
+  SENSOR_ACCURACY_GOOD = 2,
+  SENSOR_ACCURACY_VERYGOOD = 3
+};
+
+#define SENSOR_DATA_VALUE_SIZE 16
+
+/* sensor_data_t */
+typedef struct sensor_data_t {
+  int accuracy;
+  unsigned long long timestamp;
+  int value_count;
+  float values[SENSOR_DATA_VALUE_SIZE];
+} sensor_data_t;
+
+#define SENSORHUB_DATA_VALUE_SIZE 4096
+
+/* sensorhub_data_t */
+typedef struct sensorhub_data_t {
+  int accuracy;
+  unsigned long long timestamp;
+
+  /*
+   *  Use "value_count" instead of "hub_data_size"
+   *  which is going to be removed soon
+   */
+  union {
+    int value_count;
+    int hub_data_size; /* deprecated */
+  };
+
+  /*
+   *  Use "values" instead of "hub_data"
+   *  which is going to be removed soon
+   */
+  union {
+    char values[SENSORHUB_DATA_VALUE_SIZE];
+    char hub_data[SENSORHUB_DATA_VALUE_SIZE]; /* deprecated */
+  };
+} sensorhub_data_t;
+
+#define SENSOR_PEDOMETER_DATA_DIFFS_SIZE 20
+
+typedef struct {
+  int accuracy;
+  unsigned long long timestamp;
+  int value_count; /* value_count == 8 */
+  float values[SENSOR_DATA_VALUE_SIZE];
+  /* values = {step count, walk step count, run step count,
+               moving distance, calorie burned, last speed,
+               last stepping frequency (steps per sec),
+               last step status (walking, running, ...)} */
+  /* Additional data attributes (not in sensor_data_t)*/
+  int diffs_count;
+  struct differences {
+    int timestamp;
+    int steps;
+    int walk_steps;
+    int run_steps;
+    int walk_up_steps;
+    int walk_down_steps;
+    int run_up_steps;
+    int run_down_steps;
+    float distance;
+    float calories;
+    float speed;
+  } diffs[SENSOR_PEDOMETER_DATA_DIFFS_SIZE];
+} sensor_pedometer_data_t;
+
+#define CONVERT_TYPE_ATTR(type, index) ((type) << 8 | 0x80 | (index))
+
+enum sensor_attribute {
+  SENSOR_ATTR_ACCELEROMETER_INJECTION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_ACCELEROMETER, 0xFF),
+  SENSOR_ATTR_ACTIVITY = CONVERT_TYPE_ATTR(SENSOR_DEVICE_ACTIVITY_TRACKER, 0x1),
+
+  SENSOR_ATTR_HRM_BATCH_OPR_MODE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x1),
+  SENSOR_ATTR_HRM_BATCH_ACTIVITY_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x2),
+  SENSOR_ATTR_HRM_BATCH_BATCH_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x3),
+  SENSOR_ATTR_HRM_BATCH_FLUSH = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x4),
+  SENSOR_ATTR_HRM_BATCH_ELEVATED_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x5),
+  SENSOR_ATTR_HRM_BATCH_ELEVATED_THR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x6),
+  SENSOR_ATTR_HRM_BATCH_BPM_RAW =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x7),
+  SENSOR_ATTR_HRM_BATCH_LOW_ALERT_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x8),
+  SENSOR_ATTR_HRM_BATCH_LOW_ALERT_THR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_BATCH, 0x9),
+
+  SENSOR_ATTR_HRM_LED_GREEN_BATCH_POLLING_INTERVAL =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_LED_GREEN_BATCH, 0x1),
+  SENSOR_ATTR_HRM_LED_GREEN_BATCH_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_LED_GREEN_BATCH, 0x2),
+  SENSOR_ATTR_HRM_LED_GREEN_BATCH_BATCH_PERIOD =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HRM_LED_GREEN_BATCH, 0x3),
+
+  SENSOR_ATTR_PEDOMETER_HEIGHT =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x1),
+  SENSOR_ATTR_PEDOMETER_WEIGHT =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x2),
+  SENSOR_ATTR_PEDOMETER_GENDER =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x3),
+  SENSOR_ATTR_PEDOMETER_AGE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x4),
+  SENSOR_ATTR_PEDOMETER_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_PEDOMETER, 0x2F),
+
+  SENSOR_ATTR_STRESS_MONITOR_AGE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x1),
+
+  SENSOR_ATTR_EXERCISE_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x1),
+  SENSOR_ATTR_EXERCISE_GPS =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x2),
+  SENSOR_ATTR_EXERCISE_BATCH_INTERVAL =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x3),
+  SENSOR_ATTR_EXERCISE_PSERVICE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_STANDALONE, 0x4),
+
+  SENSOR_ATTR_CYCLE_DURATION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x1),
+  SENSOR_ATTR_CYCLE_HOLDING_POSITION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x2),
+  SENSOR_ATTR_CYCLE_VELOCITY =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x3),
+  SENSOR_ATTR_CYCLE_GET_DATA_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x4),
+  SENSOR_ATTR_CYCLE_DATA_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x5),
+  SENSOR_ATTR_CYCLE_GPS_AGREEMENT =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_CYCLE_MONITOR, 0x6),
+
+  SENSOR_ATTR_WORKOUT_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_WORKOUT, 0x1),
+  SENSOR_ATTR_WORKOUT_DURATION = CONVERT_TYPE_ATTR(SENSOR_DEVICE_WORKOUT, 0x2),
+
+  SENSOR_ATTR_RESTING_HR_OPR_MODE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x1),
+  SENSOR_ATTR_RESTING_HR_MAX_RHR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x2),
+  SENSOR_ATTR_RESTING_HR_MIN_RHR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x3),
+  SENSOR_ATTR_RESTING_HR_AVG_RHR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x4),
+  SENSOR_ATTR_RESTING_HR_HOUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x5),
+  SENSOR_ATTR_RESTING_HR_MIN = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x6),
+  SENSOR_ATTR_RESTING_HR_SEC = CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x7),
+  SENSOR_ATTR_RESTING_HR_PROPERTY_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x10),
+  SENSOR_ATTR_RESTING_HR_PROPERTY_HR_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x11),
+  SENSOR_ATTR_RESTING_HR_PROPERTY_HR_VALUE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x12),
+  SENSOR_ATTR_RESTING_HR_PROPERTY_DURATION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x13),
+  SENSOR_ATTR_RESTING_HR_PROPERTY_ACT_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x14),
+  SENSOR_ATTR_RESTING_HR_PROPERTY_ACT_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x15),
+  SENSOR_ATTR_RESTING_HR_PROPERTY_CONT_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x16),
+  SENSOR_ATTR_RESTING_HR_DATA_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x20),
+  SENSOR_ATTR_RESTING_HR_DATA_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_RESTING_HR, 0x21),
+
+  SENSOR_ATTR_STEP_LEVEL_MONITOR_DW_DURATION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_STEP_LEVEL_MONITOR, 0x1),
+
+  SENSOR_ATTR_EXERCISE_HR_OPR_MODE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x1),
+  SENSOR_ATTR_EXERCISE_HR_ACTIVITY_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x2),
+  SENSOR_ATTR_EXERCISE_HR_BATCH_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x3),
+  SENSOR_ATTR_EXERCISE_HR_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x4),
+  SENSOR_ATTR_EXERCISE_HR_ELEVATED_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x5),
+  SENSOR_ATTR_EXERCISE_HR_ELEVATED_THR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x6),
+  SENSOR_ATTR_EXERCISE_HR_BPM_RAW =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x7),
+  SENSOR_ATTR_EXERCISE_HR_LOW_ALERT_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x8),
+  SENSOR_ATTR_EXERCISE_HR_LOW_ALERT_THR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_EXERCISE_HR, 0x9),
+
+  SENSOR_ATTR_PRESSURE_INDICATOR_START =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x1),
+  SENSOR_ATTR_PRESSURE_INDICATOR_STOP =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x2),
+  SENSOR_ATTR_PRESSURE_INDICATOR_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x3),
+  SENSOR_ATTR_PRESSURE_INDICATOR_RESTORE_TIME =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x4),
+  SENSOR_ATTR_PRESSURE_INDICATOR_RESTORE_VALUE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x5),
+  SENSOR_ATTR_PRESSURE_INDICATOR_CURRENT_TIME =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_INDICATOR, 0x6),
+
+  SENSOR_ATTR_PRESSURE_ALERT_START =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_ALERT, 0x1),
+  SENSOR_ATTR_PRESSURE_ALERT_STOP =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PRESSURE_ALERT, 0x2),
+
+  SENSOR_ATTR_HR_CALORIE_AGE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x1),
+  SENSOR_ATTR_HR_CALORIE_HEIGHT =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x2),
+  SENSOR_ATTR_HR_CALORIE_WEIGHT =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x3),
+  SENSOR_ATTR_HR_CALORIE_GENDER =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x4),
+  SENSOR_ATTR_HR_CALORIE_INST =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x10),
+  SENSOR_ATTR_HR_CALORIE_EXERCISE_TYPE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x11),
+  SENSOR_ATTR_HR_CALORIE_TARGET_CAL =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x12),
+  SENSOR_ATTR_HR_CALORIE_MAX_HEARTRATE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x13),
+  SENSOR_ATTR_HR_CALORIE_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HR_CALORIE, 0x20),
+
+  SENSOR_ATTR_SWIMMING_TRACKER_PLACE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x1),
+  SENSOR_ATTR_SWIMMING_TRACKER_DISTANCE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x2),
+  SENSOR_ATTR_SWIMMING_TRACKER_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x3),
+  SENSOR_ATTR_SWIMMING_TRACKER_BATCH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x4),
+  SENSOR_ATTR_SWIMMING_TRACKER_GOAL_CALORIES =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x5),
+  SENSOR_ATTR_SWIMMING_TRACKER_GOAL_LAPS =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x6),
+  SENSOR_ATTR_SWIMMING_TRACKER_TIME_REST =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x7),
+  SENSOR_ATTR_SWIMMING_TRACKER_TIME_TURN =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_TRACKER, 0x8),
+
+  SENSOR_ATTR_SWIMMING_OUTDOOR_SET_BATCH_LAP_COUNT =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x1),
+  SENSOR_ATTR_SWIMMING_OUTDOOR_SETGOAL_LENGTH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x2),
+  SENSOR_ATTR_SWIMMING_OUTDOOR_SETGOAL_TIME =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x3),
+  SENSOR_ATTR_SWIMMING_OUTDOOR_SET_GPS_PERMISSION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x4),
+  SENSOR_ATTR_SWIMMING_OUTDOOR_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_SWIMMING_OUTDOOR, 0x6),
+
+  SENSOR_ATTR_AUTO_SWIMMING_DURATION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_AUTO_SWIMMING, 0x1),
+
+  SENSOR_ATTR_INACTIVITY_DETECTOR_LEVEL =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_INACTIVITY_DETECTOR, 0x1),
+  SENSOR_ATTR_INACTIVITY_DETECTOR_DURATION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_INACTIVITY_DETECTOR, 0x2),
+
+  SENSOR_ATTR_STRESS_TRACKER_DUR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_STRESS_TRACKER, 0x1),
+  SENSOR_ATTR_STRESS_TRACKER_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_STRESS_TRACKER, 0x2),
+
+  SENSOR_ATTR_STRESS_MONITOR_BASE_HR =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x1),
+  SENSOR_ATTR_STRESS_MONITOR_HISTO_INDEX =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x2),
+  SENSOR_ATTR_STRESS_MONITOR_HISTO_VALUE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x3),
+  SENSOR_ATTR_STRESS_MONITOR_TUNE_INDEX =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x4),
+  SENSOR_ATTR_STRESS_MONITOR_TUNE_VALUE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x5),
+  SENSOR_ATTR_STRESS_MONITOR_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x6),
+  SENSOR_ATTR_STRESS_MONITOR_OPERATION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_STRESS_MONITOR, 0x7),
+
+  SENSOR_ATTR_SLEEP_MONITOR_STOP =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_SLEEP_MONITOR, 0x1),
+  SENSOR_ATTR_SLEEP_MONITOR_FLUSH =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_SLEEP_MONITOR, 0x2),
+
+  SENSOR_ATTR_SLEEP_DETECTOR_STOP =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_SLEEP_DETECTOR, 0x1),
+  SENSOR_ATTR_SLEEP_DETECTOR_SETTING =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_HUMAN_SLEEP_DETECTOR, 0x2),
+
+  SENSOR_ATTR_DATA_JOURNAL_START =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_DATA_JOURNAL, 0x1),
+  SENSOR_ATTR_DATA_JOURNAL_STOP =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_DATA_JOURNAL, 0x2),
+
+  SENSOR_ATTR_GPS_BATCH_OPR_MODE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GPS_BATCH, 0x1),
+
+  SENSOR_ATTR_PPG_BATCH_POLLING_INTERVAL =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_PPG_BATCH, 0x1),
+  SENSOR_ATTR_PPG_BATCH_FLUSH = CONVERT_TYPE_ATTR(SENSOR_DEVICE_PPG_BATCH, 0x2),
+
+  SENSOR_ATTR_REG_CTRL_TYPE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_REG_CTRL, 0x1),
+  SENSOR_ATTR_REG_CTRL_ADDRESS = CONVERT_TYPE_ATTR(SENSOR_DEVICE_REG_CTRL, 0x2),
+  SENSOR_ATTR_REG_CTRL_VALUE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_REG_CTRL, 0x3),
+  SENSOR_ATTR_REG_CTRL_MODE = CONVERT_TYPE_ATTR(SENSOR_DEVICE_REG_CTRL, 0x4),
+
+  SENSOR_ATTR_GPS_CTRL_SETTING = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GPS_CTRL, 0x1),
+
+  SENSOR_ATTR_FAKE_MOTION_EVENT_INTERVAL =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_FAKE_MOTION, 0x1),
+  SENSOR_ATTR_FAKE_MOTION_EVENT_COUNT =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_FAKE_MOTION, 0x2),
+  SENSOR_ATTR_FAKE_MOTION_PAUSE_INTERVAL =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_FAKE_MOTION, 0x3),
+
+  SENSOR_ATTR_GEOFENCE_ID = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x1),
+  SENSOR_ATTR_GEOFENCE_LAT = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x2),
+  SENSOR_ATTR_GEOFENCE_LON = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x3),
+  SENSOR_ATTR_GEOFENCE_RADIUS = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x4),
+  SENSOR_ATTR_GEOFENCE_PROVIDER =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x5),
+  SENSOR_ATTR_GEOFENCE_ACCURACY =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x6),
+  SENSOR_ATTR_GEOFENCE_TIMESTAMP =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x7),
+  SENSOR_ATTR_GEOFENCE_CONNECT = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x8),
+  SENSOR_ATTR_GEOFENCE_START = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x10),
+  SENSOR_ATTR_GEOFENCE_STOP = CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x11),
+  SENSOR_ATTR_GEOFENCE_SET_LOCATION =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x12),
+  SENSOR_ATTR_GEOFENCE_BT_CONNECT =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_GEOFENCE, 0x13),
+
+  SENSOR_ATTR_FALL_DETECTION_OPR_MODE =
+      CONVERT_TYPE_ATTR(SENSOR_DEVICE_FALL_DETECTION, 0x1),
+};
+
+enum sensor_activity {
+  SENSOR_ACTIVITY_UNKNOWN = 1,
+  SENSOR_ACTIVITY_STILL = 2,
+  SENSOR_ACTIVITY_WALKING = 4,
+  SENSOR_ACTIVITY_RUNNING = 8,
+  SENSOR_ACTIVITY_IN_VEHICLE = 16,
+  SENSOR_ACTIVITY_ON_BICYCLE = 32,
+};
+
 #ifdef __cplusplus
 }
+
+/*
+ * Create devices
+ */
+typedef void *sensor_device_t;
+typedef int (*create_t)(sensor_device_t **devices);
+
+/*
+ * Sensor device interface
+ * 1 device must be abstracted from 1 device event node
+ */
+class sensor_device {
+ public:
+  virtual ~sensor_device() {}
+
+  uint32_t get_hal_version(void) { return SENSOR_HAL_VERSION(1, 0); }
+
+  virtual int get_poll_fd(void) = 0;
+  virtual int get_sensors(const sensor_info_t **sensors) = 0;
+
+  virtual bool enable(uint32_t id) = 0;
+  virtual bool disable(uint32_t id) = 0;
+
+  virtual int read_fd(uint32_t **ids) = 0;
+  virtual int get_data(uint32_t id, sensor_data_t **data, int *length) = 0;
+
+  virtual bool set_interval(uint32_t id, unsigned long val) { return true; }
+  virtual bool set_batch_latency(uint32_t id, unsigned long val) {
+    return true;
+  }
+  virtual bool set_attribute_int(uint32_t id, int32_t attribute,
+                                 int32_t value) {
+    return true;
+  }
+  virtual bool set_attribute_str(uint32_t id, int32_t attribute, char *value,
+                                 int len) {
+    return true;
+  }
+  virtual bool flush(uint32_t id) { return true; }
+};
+
 #endif
 #endif /* __HAL_SENSOR_INTERFACE__ */