diff --git a/zh-cn/device-dev/driver/driver-peripherals-motion-des.md b/zh-cn/device-dev/driver/driver-peripherals-motion-des.md index 4c1ec039ffb202693714d4b688515a3e27fd62e0..123d0a05db0f610bb1b2ae1051c151376d66d72a 100644 --- a/zh-cn/device-dev/driver/driver-peripherals-motion-des.md +++ b/zh-cn/device-dev/driver/driver-peripherals-motion-des.md @@ -25,7 +25,7 @@ Motion驱动框架如图1所示,上层为Framework层,提供MSDP服务,通 1. MSDP:上层综合传感信息处理平台服务层,当HDI接口服务实例获取成功后可以直接调用Motion HDI接口。 2. IDL:接口抽象层。MSDP服务层首先从Motion Proxy获取到Motion HDI接口服务实例。而Motion Proxy获取到的接口实例是由IService Manager进行分配。当MSDP服务层成功获取到Motion HDI接口服务实例后,MSDP服务层就可以直接调用Motion Proxy中的HDI接口,然后通过IPC(Inter-Process Communication)调用到Motion Stub,从而调用到Motion Service的接口。这部分是由工具自动生成的代码,不用器件厂商自己开发。 -3. HD IService:HDI Service中包括Motion Interface Driver、Motion Service和Motion Impl三个部分。其中Motion Interface Driver为手势识别接口的驱动代码,在这部分驱动代码中通过定义一个struct HdfDriverEntry类型的结构体变量,实现此变量中的的Init、Bind和Release函数描述驱动能力,函数内部通过HDF_INIT宏加载驱动。Motion Service为手势识别服务接口类,具体的实现在Motion Impl中描述。此部分代码需要器件厂商根据自己器件来开发。 +3. HDI Service:HDI Service中包括Motion Interface Driver、Motion Service和Motion Impl三个部分。其中Motion Interface Driver为手势识别接口的驱动代码,在这部分驱动代码中通过定义一个struct HdfDriverEntry类型的结构体变量,实现此变量中的的Init、Bind和Release函数描述驱动能力,函数内部通过HDF_INIT宏加载驱动。Motion Service为手势识别服务接口类,具体的实现在Motion Impl中描述。此部分代码需要器件厂商根据自己器件来开发。 ## 开发指导 @@ -60,9 +60,9 @@ Motion驱动的主要工作是为上层MSDP服务提供稳定的使能/去使能 │ └── unittest\hdi # 手势识别模块HDI单元测试代码 ``` -下面结合DEMO实例,介绍如何基于HDF驱动框架,手势识别用户态驱动开发。具体实现请参考 [motion_interface_driver.cpp](https://gitee.com/openharmony/drivers_peripheral/blob/master/motion/hdi_service/motion_interface_driver.cpp)。 +下面结合DEMO实例,介绍如何基于HDF驱动框架,进行手势识别用户态驱动开发。具体实现请参考[motion_interface_driver.cpp](https://gitee.com/openharmony/drivers_peripheral/blob/master/motion/hdi_service/motion_interface_driver.cpp)。 -手势识别用户态驱动开发, 主要完成Bind、Init、Release、Dispatch函数接口实现。其中Bind函数为驱动对外提供的服务能力,Init函数为系统加载驱动前需要的一些初始化的操作,Release函数的主要作用为当系统加载驱动调用Init函数失败时对资源进行回收操作。 +手势识别用户态驱动开发, 主要完成Bind、Init、Release、Dispatch函数接口实现。其中Bind函数为驱动绑定对外提供的服务能力,Init函数为系统加载驱动前需要的一些初始化的操作,Release函数的主要作用为当系统加载驱动调用Init函数失败时对资源进行回收操作,Dispatch函数为服务能力的具体实现,在Bind函数中进行绑定。 ```c++ // 自定义的HdfMotionInterfaceHost对象 @@ -154,7 +154,6 @@ struct HdfDriverEntry g_motioninterfaceDriverEntry = { HDF_INIT(g_userAuthInterfaceDriverEntry); ``` - ### 调测验证 测试代码开发步骤: diff --git a/zh-cn/device-dev/driver/driver-peripherals-sensor-des.md b/zh-cn/device-dev/driver/driver-peripherals-sensor-des.md index 26620ea9c30f099379e0312d8fbcb20566d4a53e..7884dda328d4b84431493f80deb034ff28b83a71 100755 --- a/zh-cn/device-dev/driver/driver-peripherals-sensor-des.md +++ b/zh-cn/device-dev/driver/driver-peripherals-sensor-des.md @@ -29,23 +29,23 @@ Sensor驱动模型屏蔽硬件器件差异,为上层Sensor服务系统提供 Sensor驱动模型以标准系统Hi3516DV300产品中的加速度传感器驱动为例,介绍整个驱动加载及运行流程: -1. 从device_info.hcs配置文件的Sensor Host读取Sensor设备管理配置信息。 -2. HDF配置框架从HCB数据库解析Sensor设备管理配置信息,并关联对应设备驱动。 +1. 从device_info.hcs配置文件中的Sensor Host读取到Sensor设备管理配置信息。 +2. HDF配置框架从HCB数据库中解析Sensor设备管理配置信息,并关联对应设备驱动。 3. 加载并初始化Sensor设备管理驱动。 4. Sensor设备管理驱动向HDI发布Sensor基础能力接口。 -5. 从device_info.hcs配置文件的Sensor Host读取加速度传感器驱动配置信息。 -6. 加载加速度传感器抽象驱动,调用初始化接口,完成Sensor器件驱动资源分配和数据处理队列创建。 -7. 从accel_xxx_config.hcs配置文件读取加速度传感器差异化驱动配置和私有化配置信息。 -8. 加速度传感器差异化驱动,调用通用配置解析接口,完成器件属性信息解析,器件寄存器解析。 -9. 加速度传感器差异化驱动完成器件探测,并分配加速度传感器配置资源,完成加速度传感器差异化接口注册。 -10. 加速度传感器探测成功之后,加速度传感器差异化驱动通知加速度传感器抽象驱动,注册加速度传感器设备到Sensor设备管理中。 +5. 从device_info.hcs配置文件中的Sensor Host读取到加速度传感器驱动配置信息。 +6. 加载加速度传感器抽象驱动,调用初始化接口,完成Sensor器件的驱动资源分配和数据处理队列的创建。 +7. 从accel_xxx_config.hcs配置文件中读取到加速度传感器差异化驱动配置和私有化配置信息。 +8. 加速度传感器芯片差异化驱动,调用通用配置解析接口,完成器件属性信息解析,器件寄存器解析。 +9. 加速度传感器芯片差异化驱动完成器件的探测,并分配加速度传感器配置资源和加速度传感器差异化接口注册。 +10. 加速度传感器成功探测到器件之后,加速度传感器芯片差异化驱动通知加速度传感器抽象驱动,注册加速度传感器设备到Sensor设备管理中。 ## 开发指导 ### 场景介绍 - 通过重力和陀螺仪传感器数据,能感知设备倾斜和旋转量,提高用户在游戏场景中的体验。 -- 通过距离光传感器数据,感知距离遮挡物的距离,使设备能够自动亮灭屏,达到防误触目的。例如,手机通话时,如屏幕距离人脸过近,则自动关闭屏幕,防止误触的同时降低功耗。 +- 通过接近光传感器数据,感知距离遮挡物的距离,使设备能够自动亮灭屏,达到防误触目的。例如,手机通话时,如屏幕距离人脸过近,则自动关闭屏幕,防止误触的同时降低功耗。 - 通过气压计传感器数据,可以准确的判断设备当前所处的海拔。 - 通过环境光传感器数据,设备能够实现背光自动调节。 - 通过霍尔传感器数据,设备可以实现皮套功能,皮套合上,手机上开一个小窗口,可降低功耗。 @@ -56,8 +56,8 @@ Sensor驱动模型对外开放的API接口能力如下: - 提供Sensor HDI(Hardware Device Interface)能力接口,简化服务开发。 - 提供Sensor驱动模型能力接口: - - 依赖HDF驱动框架实现Sensor器件驱动的注册、加载、去注册、器件探测等能力。 - - 提供同一类型Sensor器件驱动归一接口、寄存器配置解析操作接口、总线访问抽象接口、平台抽象接口。 + - 依赖HDF驱动框架实现Sensor器件驱动的加载、器件探测、注册和去注册等能力。 + - 提供同一类型Sensor器件驱动归一接口、寄存器配置解析操作接口、总线访问抽象接口和平台抽象接口。 - 提供开发者实现的能力接口:依赖HDF驱动框架的HCS(HDF Configuration Source)配置管理,根据同类型Sensor差异化配置,实现Sensor器件参数序列化配置和器件部分操作接口,简化Sensor器件驱动开发。 Sensor驱动模型对外开放的API接口能力的具体实现请参考: @@ -122,11 +122,11 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考: ```c /* 注册加速度计传感器入口数据结构体对象 */ struct HdfDriverEntry g_sensorAccelDevEntry = { - .moduleVersion = 1, // 加速度计传感器模块版本号 - .moduleName = "HDF_SENSOR_ACCEL", // 加速度计传感器模块名,要与device_info.hcs文件里的加速度计moduleName字段值一样 - .Bind = BindAccelDriver, // 加速度计传感器绑定函数 - .Init = InitAccelDriver, // 加速度计传感器初始化函数 - .Release = ReleaseAccelDriver, // 加速度计传感器资源释放函数 + .moduleVersion = 1, // 加速度计传感器模块版本号 + .moduleName = "HDF_SENSOR_ACCEL", // 加速度计传感器模块名,要与device_info.hcs文件里的加速度计moduleName字段值一样 + .Bind = BindAccelDriver, // 加速度计传感器绑定函数 + .Init = InitAccelDriver, // 加速度计传感器初始化函数 + .Release = ReleaseAccelDriver, // 加速度计传感器资源释放函数 }; /* 调用HDF_INIT将驱动入口注册到HDF框架中。在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出 */ @@ -272,16 +272,16 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考: 加速度传感器模型使用HCS作为配置描述源码,HCS配置字段请参考[配置管理](driver-hdf-manage.md)介绍。 - ``` + ```hcs /* 加速度计传感器设备HCS配置 */ device_sensor_accel :: device { device0 :: deviceNode { - policy = 1; // 驱动服务发布的策略 - priority = 110; // 驱动启动优先级(0-200),值越大优先级越低,建议配置为100,优先级相同则不保证device的加载顺序 - preload = 0; // 驱动按需加载字段,0表示加载,2表示不加载 - permission = 0664; // 驱动创建设备节点权限 - moduleName = "HDF_SENSOR_ACCEL"; // 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致 - serviceName = "sensor_accel"; // 驱动对外发布服务的名称,必须唯一 + policy = 1; // 驱动服务发布的策略 + priority = 110; // 驱动启动优先级(0-200),值越大优先级越低,建议配置为100,优先级相同则不保证device的加载顺序 + preload = 0; // 驱动按需加载字段,0表示加载,2表示不加载 + permission = 0664; // 驱动创建设备节点权限 + moduleName = "HDF_SENSOR_ACCEL"; // 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致 + serviceName = "sensor_accel"; // 驱动对外发布服务的名称,必须唯一 deviceMatchAttr = "hdf_sensor_accel_driver"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等 } } @@ -512,18 +512,12 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考: } ``` ->![](../public_sys-resources/icon-note.gif) **说明:** -> ->- 传感器驱动模型已经提供一部分能力集,包括驱动设备管理能力、抽象总线和平台操作接口能力、通用配置操作接口能力、配置解析操作接口能力,相关接口请参考表2。 ->- 需要开发人员实现部分有:传感器部分操作接口(请参考表3)和传感器HCS差异化数据配置。 ->- 驱动基本功能验证。 - ### 调测验证 驱动开发完成后,在传感器单元测试里面开发自测试用例,验证驱动基本功能。测试环境采用开发者自测试平台。 -``` -static int32_t g_sensorDataFlag = 0; // 标识是否上报传感器数据 +```c++ +static int32_t g_sensorDataFlag = 0; // 标识是否上报传感器数据 static const struct SensorInterface *g_sensorDev = nullptr; // 保持获取的传感器接口实例地址 /* 订阅者注册数据上报函数 */ @@ -559,9 +553,9 @@ void HdfSensorTest::TearDownTestCase() /* 传感器驱动测试验证 */ HWTEST_F(HdfSensorTest,TestAccelDriver_001, TestSize.Level0) { - int32_t sensorInterval = 1000000000; // 数据采样率单位纳秒 - int32_t pollTime = 5; // 数据采样时间单位秒 - int32_t accelSensorId = 1; // 加速度传感器类型标识为1 + int32_t sensorInterval = 1000000000; // 数据采样率单位纳秒 + int32_t pollTime = 5; // 数据采样时间单位秒 + int32_t accelSensorId = 1; // 加速度传感器类型标识为1 int32_t count = 0; int ret; struct SensorInformation *sensorInfo = nullptr;