rt_sensor_device 结构

UML

image.png

Mind map

向SENSOR 设备框架添加传感器 - 图2

接口实现

int rt_hw_xxx_init(const char name, struct rt_sensor_config cfg)

1.查找设备

根据cfg->intf->dev_name查找设备,cfg->intf->user_data可以根据实际需求传入参数,如可将IIC从机地址通过user_data传入,供底层读取数据时使用

2.设置传感器信息

struct rt_sensor_info info

3.设置传感器ops接口

ops中需要实现两个接口:

  1. rt_size_t(* fetch_data )(struct rt_sensor_device *sensor, void *buf, rt_size_t len)
  2. rt_err_t(*control )(struct rt_sensor_device *sensor, int cmd, void *arg)

4.注册传感器

user_data一般为第一步中获取到的传感器读取数据的设备的句柄,如IIC,SPI等

static rt_err_t xxx_control(struct rt_sensor_device psensor, int cmd, void args)

该接口对应ops->control,主要作用是修改传感器当前状态或获取数据方式

  1. /* Sensor control cmd types */
  2. #define RT_SENSOR_CTRL_GET_ID (0) /* Get device id */
  3. #define RT_SENSOR_CTRL_GET_INFO (1) /* Get sensor info */
  4. #define RT_SENSOR_CTRL_SET_RANGE (2) /* Set the measure range of sensor. unit is info of sensor */
  5. #define RT_SENSOR_CTRL_SET_ODR (3) /* Set output date rate. unit is HZ */
  6. #define RT_SENSOR_CTRL_SET_MODE (4) /* Set sensor's work mode. ex. RT_SENSOR_MODE_POLLING,RT_SENSOR_MODE_INT */
  7. #define RT_SENSOR_CTRL_SET_POWER (5) /* Set power mode. args type of sensor power mode. ex. RT_SENSOR_POWER_DOWN,RT_SENSOR_POWER_NORMAL */
  8. #define RT_SENSOR_CTRL_SELF_TEST (6) /* Take a self test */


static rt_size_t xxx_fetch_data(struct rt_sensor_device psensor, void buf, rt_size_t len)

该接口对应ops->fetch,主要用来获取传感器数据 向SENSOR 设备框架添加传感器 - 图3