mirror of
https://github.com/Ai-Thinker-Open/Ai-Thinker-Open_RTL8710BX_ALIOS_SDK.git
synced 2025-03-19 11:12:55 +00:00
323 lines
7.4 KiB
C
323 lines
7.4 KiB
C
|
/*
|
||
|
* Copyright (C) 2015-2017 Alibaba Group Holding Limited
|
||
|
*
|
||
|
* sensor hal
|
||
|
*/
|
||
|
|
||
|
#ifndef HAL_SENSOR_H
|
||
|
#define HAL_SENSOR_H
|
||
|
|
||
|
#include <stdint.h>
|
||
|
#include <hal/base.h>
|
||
|
#include "hal/soc/soc.h"
|
||
|
#include "hal/soc/gpio.h"
|
||
|
#include "hal/soc/i2c.h"
|
||
|
|
||
|
|
||
|
#define I2C_REG_LEN 1
|
||
|
#define I2C_DATA_LEN 1
|
||
|
#define I2C_OP_RETRIES AOS_WAIT_FOREVER
|
||
|
|
||
|
/* ioctl cmd list for sensor */
|
||
|
#define SENSOR_IOCTL_ODR_SET (0x01<<0)
|
||
|
#define SENSOR_IOCTL_RANGE_SET (0x01<<1)
|
||
|
#define SENSOR_IOCTL_GET_INFO (0x01<<2)
|
||
|
#define SENSOR_IOCTL_BIST_PROCESS (0x01<<3)
|
||
|
#define SENSOR_IOCTL_WHO_AM_I (0x01<<4)
|
||
|
#define SENSOR_IOCTL_SET_POWER (0x01<<5)
|
||
|
#define SENSOR_IOCTL_GET_SENSOR_LIST (0x01<<6)
|
||
|
|
||
|
#ifndef likely
|
||
|
#define likely(x) __builtin_expect(!!(x), 1)
|
||
|
#endif
|
||
|
#ifndef unlikely
|
||
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
||
|
#endif
|
||
|
|
||
|
/* Physical generic sensor data defs generic structs here*/
|
||
|
#define DATA_AXIS_X 0
|
||
|
#define DATA_AXIS_Y 1
|
||
|
#define DATA_AXIS_Z 2
|
||
|
|
||
|
#define dev_acc_path "/dev/acc"
|
||
|
#define dev_mag_path "/dev/mag"
|
||
|
#define dev_gyro_path "/dev/gyro"
|
||
|
#define dev_als_path "/dev/als"
|
||
|
#define dev_ps_path "/dev/ps"
|
||
|
#define dev_baro_path "/dev/baro"
|
||
|
#define dev_temp_path "/dev/temp"
|
||
|
#define dev_uv_path "/dev/uv"
|
||
|
#define dev_humi_path "/dev/humi"
|
||
|
#define dev_hall_path "/dev/hall"
|
||
|
#define dev_hr_path "/dev/hr"
|
||
|
#define dev_gps_path "/dev/gps"
|
||
|
|
||
|
#define sensor_node_path "/dev/sensor"
|
||
|
#define gps_node_path "/dev/nodegps"
|
||
|
|
||
|
#define GPS_STR "gps: "
|
||
|
#define SENSOR_STR "sensor: " /* sensor debug header */
|
||
|
#define ERROR_LINE "error on line is "
|
||
|
|
||
|
#define ACCELEROMETER_UNIT_FACTOR 1000 //mg
|
||
|
#define MAGNETOMETER_UNIT_FACTOR 1000 //mGauss
|
||
|
#define GYROSCOPE_UNIT_FACTOR 1000000 //uDPS
|
||
|
|
||
|
/* add the new sensor type into the last postion */
|
||
|
typedef enum{
|
||
|
TAG_DEV_ACC = 0, /* Accelerometer */
|
||
|
TAG_DEV_MAG, /* Magnetometer */
|
||
|
TAG_DEV_GYRO, /* Gyroscope */
|
||
|
TAG_DEV_ALS, /* Ambient light sensor */
|
||
|
TAG_DEV_PS, /* Proximity */
|
||
|
TAG_DEV_BARO, /* Barometer */
|
||
|
TAG_DEV_TEMP, /* Temperature */
|
||
|
TAG_DEV_UV, /* Ultraviolet */
|
||
|
TAG_DEV_HUMI, /* Humidity */
|
||
|
TAG_DEV_HALL, /* HALL */
|
||
|
TAG_DEV_HR, /* Heart Rate */
|
||
|
TAG_DEV_GPS,
|
||
|
TAG_DEV_SENSOR_NUM_MAX,
|
||
|
} sensor_tag_e;
|
||
|
|
||
|
|
||
|
typedef enum {
|
||
|
DEV_SENSOR_VENDOR_STM = 0,
|
||
|
DEV_SENSOR_VENDOR_SEMTECH,
|
||
|
DEV_SENSOR_VENDOR_AKM,
|
||
|
DEV_SENSOR_VENDOR_CAPELLA,
|
||
|
DEV_SENSOR_VENDOR_INVENSENSE,
|
||
|
DEV_SENSOR_VENDOR_ROHM,
|
||
|
DEV_SENSOR_VENDOR_BOSCH,
|
||
|
DEV_SENSOR_VENDOR_KIONIX,
|
||
|
DEV_SENSOR_VENDOR_LITEON,
|
||
|
DEV_SENSOR_VENDOR_AMS,
|
||
|
DEV_SENSOR_VENDOR_CNT_MAXIM,
|
||
|
} vendor_id_e;
|
||
|
|
||
|
typedef enum {
|
||
|
I2C_PORT,
|
||
|
SPI_PORT,
|
||
|
I2S_PORT,
|
||
|
UART_PORT,
|
||
|
} dev_io_port_e;
|
||
|
|
||
|
typedef enum {
|
||
|
DEV_POWER_OFF = 0,
|
||
|
DEV_POWER_ON,
|
||
|
DEV_SLEEP,
|
||
|
DEV_SUSPEND,
|
||
|
DEV_DEEP_SUSPEND,
|
||
|
} dev_power_mode_e;
|
||
|
|
||
|
typedef enum {
|
||
|
DEV_HEALTH_GOOD,
|
||
|
DEV_HEALTH_SICK,
|
||
|
} dev_health_state_e;
|
||
|
|
||
|
|
||
|
typedef enum {
|
||
|
DEV_POLLING = 0,
|
||
|
DEV_INT,
|
||
|
DEV_DATA_READY,
|
||
|
DEV_FIFO,
|
||
|
DEV_MODE_INV
|
||
|
} work_mode_e;
|
||
|
|
||
|
typedef enum {
|
||
|
mg = 0,
|
||
|
uGauss,
|
||
|
udps,
|
||
|
lux,
|
||
|
cm,
|
||
|
pa,
|
||
|
permillage,
|
||
|
bpm,
|
||
|
dCelsius,
|
||
|
} value_unit_e;
|
||
|
|
||
|
|
||
|
typedef struct _dev_accel_data_t {
|
||
|
uint64_t timestamp;
|
||
|
int32_t data[3];
|
||
|
#ifdef AOS_SENSOR_ACC_SUPPORT_STEP
|
||
|
uint32_t step;
|
||
|
#endif
|
||
|
}accel_data_t;
|
||
|
|
||
|
typedef struct _dev_gyro_data_t {
|
||
|
uint64_t timestamp;
|
||
|
int32_t data[3];
|
||
|
}gyro_data_t;
|
||
|
|
||
|
typedef struct _dev_mag_data_t {
|
||
|
uint64_t timestamp;
|
||
|
int32_t data[3];
|
||
|
}mag_data_t;
|
||
|
|
||
|
typedef struct _dev_barometer_data_t{
|
||
|
uint64_t timestamp;
|
||
|
uint32_t p;
|
||
|
}barometer_data_t;
|
||
|
|
||
|
typedef struct _dev_temperature_data_t{
|
||
|
uint64_t timestamp;
|
||
|
int32_t t;
|
||
|
}temperature_data_t;
|
||
|
|
||
|
typedef struct _dev_humidity_data_t{
|
||
|
uint64_t timestamp;
|
||
|
uint32_t h;
|
||
|
}humidity_data_t;
|
||
|
|
||
|
typedef struct _dev_als_data_t{
|
||
|
uint64_t timestamp;
|
||
|
uint32_t lux;
|
||
|
}als_data_t;
|
||
|
|
||
|
typedef struct _dev_uv_data_t{
|
||
|
uint64_t timestamp;
|
||
|
uint16_t uvi;
|
||
|
}uv_data_t;
|
||
|
|
||
|
typedef struct _dev_proximity_data_t{
|
||
|
uint64_t timestamp;
|
||
|
uint32_t present;
|
||
|
}proximity_data_t;
|
||
|
|
||
|
typedef struct _dev_hall_data_t {
|
||
|
uint64_t timestamp;
|
||
|
uint8_t hall_level;
|
||
|
}hall_data_t;
|
||
|
|
||
|
typedef struct _dev_rgb_data_t{
|
||
|
uint64_t timestamp;
|
||
|
uint32_t data[3];
|
||
|
}rgb_data_t;
|
||
|
|
||
|
typedef struct _dev_ir_data_t{
|
||
|
uint64_t timestamp;
|
||
|
uint32_t ir;
|
||
|
}ir_data_t;
|
||
|
|
||
|
typedef struct _dev_ecg_data_t{
|
||
|
uint64_t timestamp;
|
||
|
int16_t raw_data;
|
||
|
}ecg_data_t;
|
||
|
|
||
|
typedef struct _dev_heart_rate_data_t {
|
||
|
uint64_t timestamp;
|
||
|
uint8_t hear_rate;
|
||
|
}heart_rate_data_t;
|
||
|
|
||
|
typedef struct _dev_blood_pressure_data_t {
|
||
|
uint64_t timestamp;
|
||
|
uint16_t systolic;
|
||
|
uint16_t diastolic;
|
||
|
}blood_pressure_t;
|
||
|
|
||
|
typedef struct _dev_sensor_config_t {
|
||
|
uint8_t id;
|
||
|
uint32_t range;
|
||
|
uint32_t odr;
|
||
|
}dev_sensor_config_t;
|
||
|
|
||
|
typedef struct _sensor_list_t{
|
||
|
uint32_t cnt;
|
||
|
uint8_t list[TAG_DEV_SENSOR_NUM_MAX];
|
||
|
}sensor_list_t;
|
||
|
|
||
|
typedef struct _dev_sensor_info_t {
|
||
|
vendor_id_e vendor;
|
||
|
char* model;
|
||
|
value_unit_e unit;
|
||
|
uint32_t range_max;
|
||
|
uint32_t range_min;
|
||
|
dev_health_state_e health;
|
||
|
//sensor_list_t list;
|
||
|
}dev_sensor_info_t;
|
||
|
|
||
|
typedef struct _dev_sensor_full_info_t {
|
||
|
dev_sensor_info_t info;
|
||
|
dev_sensor_config_t config;
|
||
|
}dev_sensor_full_info_t;
|
||
|
|
||
|
typedef struct _dev_sensor_data_t {
|
||
|
uint64_t timestamp;
|
||
|
int32_t data[3];
|
||
|
}dev_sensor_data_t;
|
||
|
|
||
|
typedef struct _dev_sensor_pkg_t {
|
||
|
sensor_tag_e tag;
|
||
|
union{
|
||
|
dev_sensor_info_t info;
|
||
|
dev_sensor_config_t config;
|
||
|
dev_sensor_data_t data;
|
||
|
}allocator;
|
||
|
}dev_sensor_pkg_t;
|
||
|
|
||
|
typedef struct _sensor_obj_t {
|
||
|
char* path;
|
||
|
sensor_tag_e tag;
|
||
|
dev_io_port_e io_port;
|
||
|
work_mode_e mode;
|
||
|
dev_power_mode_e power;
|
||
|
gpio_dev_t gpio;
|
||
|
dev_sensor_full_info_t info;
|
||
|
uint8_t ref;
|
||
|
int (*open)(void);
|
||
|
int (*close)(void);
|
||
|
int (*read)(void *, size_t);
|
||
|
int (*write)(const void *buf, size_t len);
|
||
|
int (*ioctl)(int cmd, unsigned long arg);
|
||
|
void(*irq_handle)(void);
|
||
|
}sensor_obj_t;
|
||
|
|
||
|
typedef struct _sensor_node_t{
|
||
|
sensor_tag_e tag;
|
||
|
char *path;
|
||
|
int fd;
|
||
|
} sensor_node_t;
|
||
|
|
||
|
typedef enum{
|
||
|
ACC_RANGE_2G,
|
||
|
ACC_RANGE_4G,
|
||
|
ACC_RANGE_8G,
|
||
|
ACC_RANGE_16G,
|
||
|
ACC_RANGE_MAX
|
||
|
}acc_range_e;
|
||
|
|
||
|
typedef enum{
|
||
|
GYRO_RANGE_125DPS,
|
||
|
GYRO_RANGE_250DPS,
|
||
|
GYRO_RANGE_500DPS,
|
||
|
GYRO_RANGE_1000DPS,
|
||
|
GYRO_RANGE_2000DPS,
|
||
|
GYRO_RANGE_MAX
|
||
|
}gyro_range_e;
|
||
|
|
||
|
|
||
|
typedef struct _gps_time
|
||
|
{
|
||
|
int year;
|
||
|
int mon;
|
||
|
int day;
|
||
|
int hour;
|
||
|
int min;
|
||
|
int sec;
|
||
|
int hsec;
|
||
|
} gps_time_t;
|
||
|
|
||
|
|
||
|
typedef struct _dev_gps_data_t {
|
||
|
uint64_t timestamp;
|
||
|
gps_time_t utc;
|
||
|
float lat;
|
||
|
float lon;
|
||
|
float elv;
|
||
|
}gps_data_t;
|
||
|
|
||
|
|
||
|
#endif /* HAL_SENSOR_H */
|
||
|
|