传感器驱动开发概述
简介
Sensor(传感器)驱动模块为上层Sensor服务系统提供稳定的Sensor基础能力API,包括Sensor列表查询、Sensor启停、Sensor订阅及去订阅,Sensor参数配置等功能;基于HDF(Hardware Driver Foundation)驱动框架开发的Sensor驱动模型,实现跨操作系统迁移,器件差异配置等功能。Sensor驱动模型如下图1所示:
图 1 Sensor驱动模型图
Sensor驱动模型对外开放的API接口能力如下:
- 提供Sensor HDI(Hardware Driver Interface)能力接口,简化服务开发。
- 提供Sensor驱动模型能力接口:依赖HDF驱动框架实现Sensor器件驱动的注册,加载,去注册,器件探测等能力,提供同一类型Sensor器件驱动归一接口, 寄存器配置解析操作接口,总线访问抽象接口,平台抽象接口。
- 提供开发者实现的能力接口:依赖HDF驱动框架的HCS(HDF Configuration Source)配置管理,根据同类型Sensor差异化配置,实现Sensor器件参数序列化配置和器件部分操作接口,简化Sensor器件驱动开发。
接口说明
Sensor驱动模型对HDI开放的API接口功能,参考表1。
表 1 Sensor驱动模型对外API接口功能介绍
功能分类
|
接口名
|
功能描述
|
查询操作
|
int32_t GetAllSensors(struct SensorInformation **sensorInfo, int32_t *count)
|
获取系统中注册的所有传感器信息,一种类型传感器信息包括传感器名字、设备厂商、固件版本号、硬件版本号、传感器类型编号、传感器标识、最大量程、精度、功耗。
|
配置操作
|
int32_t Enable(int32_t sensorId)
|
使能一种传感器设备,只有数据订阅者使能传感器后,才能获取订阅的传感器数据。
|
int32_t Disable(int32_t sensorId)
|
去使能一种传感器设备。
|
int32_t SetBatch(iint32_t sensorId, int64_t samplingInterval, int64_t reportInterval)
|
设置一种传感器的数据采样间隔和数据上报间隔。
|
int32_t SetMode(int32_t sensorTypeId, SensorUser *user, int32_t mode)
|
设置一种传感器的工作模式,不同的工作模式,上报数据方式不同。
|
int32_t SetOption(int32_t sensorId, uint32_t option)
|
设置一种传感器量程,精度等可选配置。
|
数据订阅操作
|
int32_t Register(RecordDataCallback cb)
|
订阅者注册传感器数据回调函数,系统会将获取到的传感器数据上报给订阅者。
|
int32_t Unregister(void)
|
订阅者去注册传感器数据回调函数。
|
接口实例
|
const struct SensorInterface *NewSensorInterfaceInstance(void)
|
创建传感器接口实例。
|
int32_t FreeSensorInterfaceInstance(void)
|
释放传感器接口实例。
|
Sensor驱动模型对驱动开发者开放的功能接口,驱动开发者无需实现,直接使用,参考表2:
表 2 Sensor驱动模型对驱动开发者开放的功能接口列表
功能分类
|
接口名
|
功能描述
|
设备管理操作接口
|
int32_t AddSensorDevice(const struct SensorDeviceInfo *deviceInfo)
|
添加当前类型的传感器设备到传感器设备管理。
|
int32_t DeleteSensorDevice(int32_t sensorId)
|
删除传感器设备管理里指定的传感器设备。
|
int32_t ReportSensorEvent(const struct SensorReportEvent *events)
|
上报指定类型传感器的数据到用户侧。
|
Sensor抽象总线和平台操作接口
|
int32_t ReadSensor(struct SensorBusCfg *busCfg, uint16_t regAddr, uint8_t *data, uint16_t dataLen)
|
按照配置的总线方式,读取传感器寄存器配置数据。
|
int32_t WriteSensor(struct SensorBusCfg *busCfg, uint8_t *writeData, uint16_t len)
|
按照配置的总线方式,传感器配置数据写入寄存器。
|
int32_t CreateSensorThread(struct OsalThread *thread, OsalThreadEntry threadEntry, char *name, void *entryPara)
|
创建指定传感器的定时线程,用于传感器数据上报处理。
|
void DestroySensorThread(struct OsalThread *thread, uint8_t *status);
|
销毁传感器创建的定时线程。
|
通用配置操作接口
|
int32_t SetSensorRegCfgArray(struct SensorBusCfg *busCfg, const struct SensorRegCfgGroupNode *group);
|
根据传感器总线类型信息,下发寄存器分组配置。
|
配置解析操作接口
|
int32_t GetSensorBaseConfigData(const struct DeviceResourceNode *node, struct SensorCfgData *config)
|
根据传感器设备HCS资源配置,获取传感器信息,总线配置信息,属性配置等基本配置信息,并初始化对应的基本配置数据结构体。
|
int32_t ParseSensorRegConfig(struct SensorCfgData *config)
|
根据传感器设备HCS资源配置,解析寄存器分组信息,并初始化配置数据结构体。
|
void ReleaseSensorAllRegConfig(struct SensorCfgData *config)
|
释放传感器配置数据结构体里分配的资源。
|
int32_t GetSensorBusHandle(struct SensorBusCfg *busCfg)
|
获取传感器总线句柄信息。
|
int32_t ReleaseSensorBusHandle(struct SensorBusCfg *busCfg)
|
释放传感器句柄信息。
|
Sensor驱动模型要求驱动开发者实现的接口功能,参考表3
表 3 Sensor驱动模型要求驱动开发者实现的接口列表
功能分类
|
接口名
|
功能描述
|
基本功能操作
|
int32_t init(void)
|
传感器器设备探测成功后,需要对传感器器设备初始化配置。
|
int32_t GetInfo(struct SensorBasicInfo *info)
|
从传感器器设备的HCS配置里,获取当前传感器设备的基本信息。
|
int32_t Enable(void)
|
根据当前传感器器设备的HCS配置,下发传感器设备使能操作组的寄存器配置。
|
int32_t Disable(void)
|
根据当前传感器器设备的HCS配置,下发传感器设备去使能操作组的寄存器配置。
|
int32_t SetBatch(int64_t samplingInterval, int64_t reportInterval)
|
根据数据采样率和数据上报间隔,配置当前传感器设备的数据上报线程处理时间。
|
int32_t SetMode(int32_t mode)
|
配置当前传感器设备数据上报方式。
|
int32_t SetOption(uint32_t option)
|
根据可选配置,下发量程,精度等寄存器配置。
|
void ReadSensorData(void)
|
实现传感器的数据读取函数。
|
接口实现参考SENSOR章节。