Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
876ce506
D
Docs
项目概览
OpenHarmony
/
Docs
12 个月 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
876ce506
编写于
10月 28, 2022
作者:
O
openharmony_ci
提交者:
Gitee
10月 28, 2022
浏览文件
操作
浏览文件
下载
差异文件
!10735 docs: Update the sensor and motion development documentation
Merge pull request !10735 from chenchong_666/master
上级
62a7cd05
4673cb7d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
31 addition
and
38 deletion
+31
-38
zh-cn/device-dev/driver/driver-peripherals-motion-des.md
zh-cn/device-dev/driver/driver-peripherals-motion-des.md
+3
-4
zh-cn/device-dev/driver/driver-peripherals-sensor-des.md
zh-cn/device-dev/driver/driver-peripherals-sensor-des.md
+28
-34
未找到文件。
zh-cn/device-dev/driver/driver-peripherals-motion-des.md
浏览文件 @
876ce506
...
@@ -25,7 +25,7 @@ Motion驱动框架如图1所示,上层为Framework层,提供MSDP服务,通
...
@@ -25,7 +25,7 @@ Motion驱动框架如图1所示,上层为Framework层,提供MSDP服务,通
1.
MSDP:上层综合传感信息处理平台服务层,当HDI接口服务实例获取成功后可以直接调用Motion HDI接口。
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的接口。这部分是由工具自动生成的代码,不用器件厂商自己开发。
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
I
Service:HDI Service中包括Motion Interface Driver、Motion Service和Motion Impl三个部分。其中Motion Interface Driver为手势识别接口的驱动代码,在这部分驱动代码中通过定义一个struct HdfDriverEntry类型的结构体变量,实现此变量中的的Init、Bind和Release函数描述驱动能力,函数内部通过HDF_INIT宏加载驱动。Motion Service为手势识别服务接口类,具体的实现在Motion Impl中描述。此部分代码需要器件厂商根据自己器件来开发。
3.
HD
I
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服务提供稳定的使能/去使能
...
@@ -60,9 +60,9 @@ Motion驱动的主要工作是为上层MSDP服务提供稳定的使能/去使能
│ └── unittest\hdi # 手势识别模块HDI单元测试代码
│ └── 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++
```
c++
// 自定义的HdfMotionInterfaceHost对象
// 自定义的HdfMotionInterfaceHost对象
...
@@ -154,7 +154,6 @@ struct HdfDriverEntry g_motioninterfaceDriverEntry = {
...
@@ -154,7 +154,6 @@ struct HdfDriverEntry g_motioninterfaceDriverEntry = {
HDF_INIT
(
g_userAuthInterfaceDriverEntry
);
HDF_INIT
(
g_userAuthInterfaceDriverEntry
);
```
```
### 调测验证
### 调测验证
测试代码开发步骤:
测试代码开发步骤:
...
...
zh-cn/device-dev/driver/driver-peripherals-sensor-des.md
浏览文件 @
876ce506
...
@@ -29,23 +29,23 @@ Sensor驱动模型屏蔽硬件器件差异,为上层Sensor服务系统提供
...
@@ -29,23 +29,23 @@ Sensor驱动模型屏蔽硬件器件差异,为上层Sensor服务系统提供
Sensor驱动模型以标准系统Hi3516DV300产品中的加速度传感器驱动为例,介绍整个驱动加载及运行流程:
Sensor驱动模型以标准系统Hi3516DV300产品中的加速度传感器驱动为例,介绍整个驱动加载及运行流程:
1.
从device_info.hcs配置文件
的Sensor Host读取
Sensor设备管理配置信息。
1.
从device_info.hcs配置文件
中的Sensor Host读取到
Sensor设备管理配置信息。
2.
HDF配置框架从HCB数据库解析Sensor设备管理配置信息,并关联对应设备驱动。
2.
HDF配置框架从HCB数据库
中
解析Sensor设备管理配置信息,并关联对应设备驱动。
3.
加载并初始化Sensor设备管理驱动。
3.
加载并初始化Sensor设备管理驱动。
4.
Sensor设备管理驱动向HDI发布Sensor基础能力接口。
4.
Sensor设备管理驱动向HDI发布Sensor基础能力接口。
5.
从device_info.hcs配置文件
的Sensor Host读取
加速度传感器驱动配置信息。
5.
从device_info.hcs配置文件
中的Sensor Host读取到
加速度传感器驱动配置信息。
6.
加载加速度传感器抽象驱动,调用初始化接口,完成Sensor器件
驱动资源分配和数据处理队列
创建。
6.
加载加速度传感器抽象驱动,调用初始化接口,完成Sensor器件
的驱动资源分配和数据处理队列的
创建。
7.
从accel_xxx_config.hcs配置文件
读取
加速度传感器差异化驱动配置和私有化配置信息。
7.
从accel_xxx_config.hcs配置文件
中读取到
加速度传感器差异化驱动配置和私有化配置信息。
8.
加速度传感器差异化驱动,调用通用配置解析接口,完成器件属性信息解析,器件寄存器解析。
8.
加速度传感器
芯片
差异化驱动,调用通用配置解析接口,完成器件属性信息解析,器件寄存器解析。
9.
加速度传感器
差异化驱动完成器件探测,并分配加速度传感器配置资源,完成
加速度传感器差异化接口注册。
9.
加速度传感器
芯片差异化驱动完成器件的探测,并分配加速度传感器配置资源和
加速度传感器差异化接口注册。
10.
加速度传感器
探测成功之后,加速度传感器
差异化驱动通知加速度传感器抽象驱动,注册加速度传感器设备到Sensor设备管理中。
10.
加速度传感器
成功探测到器件之后,加速度传感器芯片
差异化驱动通知加速度传感器抽象驱动,注册加速度传感器设备到Sensor设备管理中。
## 开发指导
## 开发指导
### 场景介绍
### 场景介绍
-
通过重力和陀螺仪传感器数据,能感知设备倾斜和旋转量,提高用户在游戏场景中的体验。
-
通过重力和陀螺仪传感器数据,能感知设备倾斜和旋转量,提高用户在游戏场景中的体验。
-
通过
距离
光传感器数据,感知距离遮挡物的距离,使设备能够自动亮灭屏,达到防误触目的。例如,手机通话时,如屏幕距离人脸过近,则自动关闭屏幕,防止误触的同时降低功耗。
-
通过
接近
光传感器数据,感知距离遮挡物的距离,使设备能够自动亮灭屏,达到防误触目的。例如,手机通话时,如屏幕距离人脸过近,则自动关闭屏幕,防止误触的同时降低功耗。
-
通过气压计传感器数据,可以准确的判断设备当前所处的海拔。
-
通过气压计传感器数据,可以准确的判断设备当前所处的海拔。
-
通过环境光传感器数据,设备能够实现背光自动调节。
-
通过环境光传感器数据,设备能够实现背光自动调节。
-
通过霍尔传感器数据,设备可以实现皮套功能,皮套合上,手机上开一个小窗口,可降低功耗。
-
通过霍尔传感器数据,设备可以实现皮套功能,皮套合上,手机上开一个小窗口,可降低功耗。
...
@@ -56,8 +56,8 @@ Sensor驱动模型对外开放的API接口能力如下:
...
@@ -56,8 +56,8 @@ Sensor驱动模型对外开放的API接口能力如下:
-
提供Sensor HDI(Hardware Device Interface)能力接口,简化服务开发。
-
提供Sensor HDI(Hardware Device Interface)能力接口,简化服务开发。
-
提供Sensor驱动模型能力接口:
-
提供Sensor驱动模型能力接口:
-
依赖HDF驱动框架实现Sensor器件驱动的
注册、加载、去注册、器件探测
等能力。
-
依赖HDF驱动框架实现Sensor器件驱动的
加载、器件探测、注册和去注册
等能力。
-
提供同一类型Sensor器件驱动归一接口、寄存器配置解析操作接口、总线访问抽象接口
、
平台抽象接口。
-
提供同一类型Sensor器件驱动归一接口、寄存器配置解析操作接口、总线访问抽象接口
和
平台抽象接口。
-
提供开发者实现的能力接口:依赖HDF驱动框架的HCS(HDF Configuration Source)配置管理,根据同类型Sensor差异化配置,实现Sensor器件参数序列化配置和器件部分操作接口,简化Sensor器件驱动开发。
-
提供开发者实现的能力接口:依赖HDF驱动框架的HCS(HDF Configuration Source)配置管理,根据同类型Sensor差异化配置,实现Sensor器件参数序列化配置和器件部分操作接口,简化Sensor器件驱动开发。
Sensor驱动模型对外开放的API接口能力的具体实现请参考:
Sensor驱动模型对外开放的API接口能力的具体实现请参考:
...
@@ -122,11 +122,11 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考:
...
@@ -122,11 +122,11 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考:
```c
```c
/* 注册加速度计传感器入口数据结构体对象 */
/* 注册加速度计传感器入口数据结构体对象 */
struct HdfDriverEntry g_sensorAccelDevEntry = {
struct HdfDriverEntry g_sensorAccelDevEntry = {
.moduleVersion = 1, // 加速度计传感器模块版本号
.moduleVersion = 1,
// 加速度计传感器模块版本号
.moduleName = "HDF_SENSOR_ACCEL", // 加速度计传感器模块名,要与device_info.hcs文件里的加速度计moduleName字段值一样
.moduleName = "HDF_SENSOR_ACCEL",
// 加速度计传感器模块名,要与device_info.hcs文件里的加速度计moduleName字段值一样
.Bind = BindAccelDriver, // 加速度计传感器绑定函数
.Bind = BindAccelDriver,
// 加速度计传感器绑定函数
.Init = InitAccelDriver, // 加速度计传感器初始化函数
.Init = InitAccelDriver,
// 加速度计传感器初始化函数
.Release = ReleaseAccelDriver, // 加速度计传感器资源释放函数
.Release = ReleaseAccelDriver,
// 加速度计传感器资源释放函数
};
};
/* 调用HDF_INIT将驱动入口注册到HDF框架中。在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出 */
/* 调用HDF_INIT将驱动入口注册到HDF框架中。在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出 */
...
@@ -272,16 +272,16 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考:
...
@@ -272,16 +272,16 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考:
加速度传感器模型使用HCS作为配置描述源码,HCS配置字段请参考
[
配置管理
](
driver-hdf-manage.md
)
介绍。
加速度传感器模型使用HCS作为配置描述源码,HCS配置字段请参考
[
配置管理
](
driver-hdf-manage.md
)
介绍。
```
```
hcs
/* 加速度计传感器设备HCS配置 */
/* 加速度计传感器设备HCS配置 */
device_sensor_accel :: device {
device_sensor_accel :: device {
device0 :: deviceNode {
device0 :: deviceNode {
policy = 1; // 驱动服务发布的策略
policy = 1;
// 驱动服务发布的策略
priority = 110; // 驱动启动优先级(0-200),值越大优先级越低,建议配置为100,优先级相同则不保证device的加载顺序
priority = 110;
// 驱动启动优先级(0-200),值越大优先级越低,建议配置为100,优先级相同则不保证device的加载顺序
preload = 0; // 驱动按需加载字段,0表示加载,2表示不加载
preload = 0;
// 驱动按需加载字段,0表示加载,2表示不加载
permission = 0664; // 驱动创建设备节点权限
permission = 0664;
// 驱动创建设备节点权限
moduleName = "HDF_SENSOR_ACCEL"; // 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致
moduleName = "HDF_SENSOR_ACCEL";
// 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致
serviceName = "sensor_accel"; // 驱动对外发布服务的名称,必须唯一
serviceName = "sensor_accel";
// 驱动对外发布服务的名称,必须唯一
deviceMatchAttr = "hdf_sensor_accel_driver"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等
deviceMatchAttr = "hdf_sensor_accel_driver"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等
}
}
}
}
...
@@ -512,18 +512,12 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考:
...
@@ -512,18 +512,12 @@ Sensor驱动模型要求驱动开发者实现的接口功能,请参考:
}
}
```
```
>![](../public_sys-resources/icon-note.gif) **说明:**
>
>- 传感器驱动模型已经提供一部分能力集,包括驱动设备管理能力、抽象总线和平台操作接口能力、通用配置操作接口能力、配置解析操作接口能力,相关接口请参考表2。
>- 需要开发人员实现部分有:传感器部分操作接口(请参考表3)和传感器HCS差异化数据配置。
>- 驱动基本功能验证。
### 调测验证
### 调测验证
驱动开发完成后,在传感器单元测试里面开发自测试用例,验证驱动基本功能。测试环境采用开发者自测试平台。
驱动开发完成后,在传感器单元测试里面开发自测试用例,验证驱动基本功能。测试环境采用开发者自测试平台。
```
```
c++
static int32_t g_sensorDataFlag = 0; // 标识是否上报传感器数据
static
int32_t
g_sensorDataFlag
=
0
;
// 标识是否上报传感器数据
static
const
struct
SensorInterface
*
g_sensorDev
=
nullptr
;
// 保持获取的传感器接口实例地址
static
const
struct
SensorInterface
*
g_sensorDev
=
nullptr
;
// 保持获取的传感器接口实例地址
/* 订阅者注册数据上报函数 */
/* 订阅者注册数据上报函数 */
...
@@ -559,9 +553,9 @@ void HdfSensorTest::TearDownTestCase()
...
@@ -559,9 +553,9 @@ void HdfSensorTest::TearDownTestCase()
/* 传感器驱动测试验证 */
/* 传感器驱动测试验证 */
HWTEST_F
(
HdfSensorTest
,
TestAccelDriver_001
,
TestSize
.
Level0
)
HWTEST_F
(
HdfSensorTest
,
TestAccelDriver_001
,
TestSize
.
Level0
)
{
{
int32_t sensorInterval = 1000000000; // 数据采样率单位纳秒
int32_t
sensorInterval
=
1000000000
;
// 数据采样率单位纳秒
int32_t pollTime = 5; // 数据采样时间单位秒
int32_t
pollTime
=
5
;
// 数据采样时间单位秒
int32_t accelSensorId = 1; // 加速度传感器类型标识为1
int32_t
accelSensorId
=
1
;
// 加速度传感器类型标识为1
int32_t
count
=
0
;
int32_t
count
=
0
;
int
ret
;
int
ret
;
struct
SensorInformation
*
sensorInfo
=
nullptr
;
struct
SensorInformation
*
sensorInfo
=
nullptr
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录