Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
6d958c98
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
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看板
提交
6d958c98
编写于
3月 17, 2022
作者:
S
sunxuejiao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify sensor/vibrator/light file
Signed-off-by:
N
sunxuejiao
<
sunxuejiao5@huawei.com
>
上级
32d0bfc9
变更
3
展开全部
隐藏空白更改
内联
并排
Showing
3 changed file
with
255 addition
and
456 deletion
+255
-456
zh-cn/device-dev/driver/driver-peripherals-light-des.md
zh-cn/device-dev/driver/driver-peripherals-light-des.md
+36
-74
zh-cn/device-dev/driver/driver-peripherals-sensor-des.md
zh-cn/device-dev/driver/driver-peripherals-sensor-des.md
+208
-363
zh-cn/device-dev/driver/driver-peripherals-vibrator-des.md
zh-cn/device-dev/driver/driver-peripherals-vibrator-des.md
+11
-19
未找到文件。
zh-cn/device-dev/driver/driver-peripherals-light-des.md
浏览文件 @
6d958c98
...
@@ -10,7 +10,6 @@
...
@@ -10,7 +10,6 @@
-
[
接口说明
](
###接口说明
)
-
[
接口说明
](
###接口说明
)
-
[
开发步骤
](
###开发步骤
)
-
[
开发步骤
](
###开发步骤
)
-
[
开发实例
](
###开发实例
)
-
[
调测验证
](
###调测验证
)
-
[
调测验证
](
###调测验证
)
...
@@ -60,20 +59,12 @@ Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模
...
@@ -60,20 +59,12 @@ Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模
| int32_t (
*
TurnOffLight)(uint32_t type) | 根据指定的灯类型关闭灯列表中可用的灯。 |
| int32_t (
*
TurnOffLight)(uint32_t type) | 根据指定的灯类型关闭灯列表中可用的灯。 |
### 开发步骤
### 开发步骤
1.
基于HDF驱动框架,按照驱动Driver Entry程序,完成Light抽象驱动开发(主要由Bind、Init、Release、Dispatch函数接口实现),资源配置及HCS解析。完成Light驱动的设备信息配置。
1.
基于HDF驱动框架,按照驱动Driver Entry程序,完成Light抽象驱动开发(主要由Bind、Init、Release、Dispatch函数接口实现),资源配置及HCS解析。完成Light驱动的设备信息配置。
3.
调用配置解析接口,完成器件属性信息解析,器件寄存器解析,并注册到Light设备管理中。
3.
完成Light获取类型、闪烁和停止接口开发,会根据闪烁模式创建和销毁定时器。
### 开发实例
基于HDF驱动模型,加载启动Light驱动,代码形式如下,具体原理可参考
[
HDF驱动开发指南
](
driver-hdf-development.md
)
。本例中Light驱动通讯接口方式选择GPIO。
1.
Light驱动的初始化和去初始化
-
调用HDF_INIT将驱动入口注册到HDF框架中。在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。
-
调用HDF_INIT将驱动入口注册到HDF框架中。在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。
Light驱动模型使用HCS作为配置描述源码,HCS配置字段详细介绍请参考
[
配置管理
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md
)
。
Light驱动模型使用HCS作为配置描述源码,HCS配置字段详细介绍请参考
[
配置管理
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md
)
。
其Driver Entry入口函数定义如下:
其Driver Entry入口函数定义如下:
```c
```c
/* 注册灯入口数据结构体对象 */
/* 注册灯入口数据结构体对象 */
struct HdfDriverEntry g_lightDriverEntry = {
struct HdfDriverEntry g_lightDriverEntry = {
...
@@ -86,7 +77,7 @@ Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模
...
@@ -86,7 +77,7 @@ Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模
/* 调用HDF_INIT将驱动入口注册到HDF框架中。在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release函数释放驱动资源并退出 */
/* 调用HDF_INIT将驱动入口注册到HDF框架中。在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release函数释放驱动资源并退出 */
HDF_INIT(g_lightDriverEntry);
HDF_INIT(g_lightDriverEntry);
```
```
-
基于HDF驱动框架,按照驱动Driver Entry程序,完成Light抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现。
-
基于HDF驱动框架,按照驱动Driver Entry程序,完成Light抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现。
```c
```c
...
@@ -172,12 +163,11 @@ Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模
...
@@ -172,12 +163,11 @@ Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模
(void)OsalMemFree(drvData);
(void)OsalMemFree(drvData);
g_lightDrvData = NULL;
g_lightDrvData = NULL;
}
}
```
```
-
Light设备管理模块负责系统中Light器件接口发布,在系统启动过程中,HDF框架机制通过灯Host里设备HCS配置信息,加载设备管理驱动。
-
Light设备管理模块负责系统中Light器件接口发布,在系统启动过程中,HDF框架机制通过灯Host里设备HCS配置信息,加载设备管理驱动。
```
hcs
```
/* 灯设备HCS配置 */
/* 灯设备HCS配置 */
device_light :: device {
device_light :: device {
device0 :: deviceNode {
device0 :: deviceNode {
...
@@ -189,70 +179,42 @@ Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模
...
@@ -189,70 +179,42 @@ Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模
serviceName = "hdf_light"; // Light驱动对外发布服务的名称,必须唯一
serviceName = "hdf_light"; // Light驱动对外发布服务的名称,必须唯一
deviceMatchAttr = "hdf_light_driver"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等
deviceMatchAttr = "hdf_light_driver"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等
}
}
}
```
```
2.
分配资源,解析灯HCS配置
。
2.
调用配置解析接口,完成器件属性信息解析,器件寄存器解析,并注册到Light设备管理中
。
-
解析HCS配置文件。
```
c
/* 分配资源,解析灯HCS配置 */
```c
static
int32_t
ParseLightInfo
(
const
struct
DeviceResourceNode
*
node
)
/* 分配资源,解析灯HCS配置 */
{
static int32_t ParseLightInfo(const struct DeviceResourceNode *node)
.....
{
/* 从HCS获取支持灯的类型个数 */
.....
drvData
->
lightNum
=
parser
->
GetElemNum
(
light
,
"lightType"
);
/* 从HCS获取支持灯的类型个数 */
....
drvData->lightNum = parser->GetElemNum(light, "lightType");
for
(
i
=
0
;
i
<
drvData
->
lightNum
;
++
i
)
{
....
/* 获取类型 */
for (i = 0; i < drvData->lightNum; ++i) {
ret
=
parser
->
GetUint32ArrayElem
(
light
,
"lightType"
,
i
,
&
temp
,
0
);
/* 获取类型 */
CHECK_LIGHT_PARSER_RESULT_RETURN_VALUE
(
ret
,
"lightType"
);
ret = parser->GetUint32ArrayElem(light, "lightType", i, &temp, 0);
}
CHECK_LIGHT_PARSER_RESULT_RETURN_VALUE(ret, "lightType");
}
for
(
i
=
0
;
i
<
drvData
->
lightNum
;
++
i
)
{
.....
for (i = 0; i < drvData->lightNum; ++i) {
/* 类型作为下标开辟空间 */
.....
drvData
->
info
[
temp
]
=
(
struct
LightDeviceInfo
*
)
OsalMemCalloc
(
sizeof
(
struct
LightDeviceInfo
));
/* 类型作为下标开辟空间 */
.....
drvData->info[temp] = (struct LightDeviceInfo *)OsalMemCalloc(sizeof(struct LightDeviceInfo));
/* 将Light设备信息进行填充 */
.....
ret
=
parser
->
GetUint32
(
light
,
"busRNum"
,
&
drvData
->
info
[
temp
]
->
busRNum
,
0
);
/* 将Light设备信息进行填充 */
CHECK_LIGHT_PARSER_RESULT_RETURN_VALUE
(
ret
,
"busRNum"
);
ret = parser->GetUint32(light, "busRNum", &drvData->info[temp]->busRNum, 0);
ret
=
parser
->
GetUint32
(
light
,
"busGNum"
,
&
drvData
->
info
[
temp
]
->
busGNum
,
0
);
CHECK_LIGHT_PARSER_RESULT_RETURN_VALUE(ret, "busRNum");
CHECK_LIGHT_PARSER_RESULT_RETURN_VALUE
(
ret
,
"busGNum"
);
ret = parser->GetUint32(light, "busGNum", &drvData->info[temp]->busGNum, 0);
ret
=
parser
->
GetUint32
(
light
,
"busBNum"
,
&
drvData
->
info
[
temp
]
->
busBNum
,
0
);
CHECK_LIGHT_PARSER_RESULT_RETURN_VALUE(ret, "busGNum");
CHECK_LIGHT_PARSER_RESULT_RETURN_VALUE
(
ret
,
"busBNum"
);
ret = parser->GetUint32(light, "busBNum", &drvData->info[temp]->busBNum, 0);
.....
CHECK_LIGHT_PARSER_RESULT_RETURN_VALUE(ret, "busBNum");
return
HDF_SUCCESS
;
.....
}
return HDF_SUCCESS;
```
}
```
-
灯效果模型使用HCS作为配置描述源码,HCS配置字段详细介绍参考
[
配置管理
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md
)
介绍。
```hcs
/* 灯数据配置模板(light_config.hcs) */
root {
lightConfig {
boardConfig {
match_attr = "hdf_light_driver";
lightAttr {
light01 {
lightType = [1, 2]; // 灯类型
busRNum = 31; // 红色对应的GPIO管脚
busGNum = 30; // 绿色对应的GPIO管脚
busBNum = 29; // 蓝色对应的GPIO管脚
lightBrightness = 0X80000000;// RGB: R:16-31bit、G:8-15bit、B:0-7bit
onTime = 50; // 一个闪烁周期内亮灯时长(ms)
offTime = 50; // 一个闪烁周期内熄灯时长(ms)
}
}
}
}
}
```
3.
完成
获取灯类型,
闪烁和停止接口开发,会根据闪烁模式创建和销毁定时器。
3.
完成
Light获取类型、
闪烁和停止接口开发,会根据闪烁模式创建和销毁定时器。
```
c
```
c
/* Light驱动服务调用GetAllLightInfo获取灯类型,Enable接口启动闪烁模式,
/* Light驱动服务调用GetAllLightInfo获取灯类型,Enable接口启动闪烁模式,
...
...
zh-cn/device-dev/driver/driver-peripherals-sensor-des.md
浏览文件 @
6d958c98
此差异已折叠。
点击以展开。
zh-cn/device-dev/driver/driver-peripherals-vibrator-des.md
浏览文件 @
6d958c98
...
@@ -11,7 +11,6 @@
...
@@ -11,7 +11,6 @@
-
[
场景介绍
](
###场景介绍
)
-
[
场景介绍
](
###场景介绍
)
-
[
接口说明
](
###接口说明
)
-
[
接口说明
](
###接口说明
)
-
[
开发步骤
](
###开发步骤
)
-
[
开发步骤
](
###开发步骤
)
-
[
开发实例
](
###开发实例
)
## 概述
## 概述
...
@@ -79,17 +78,10 @@
...
@@ -79,17 +78,10 @@
Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能力接口,包括马达一次振动、马达效果配置震动、马达停止。基于HDF(Hardware Driver Foundation)驱动框架开发的马达驱动模型,实现跨操作系统迁移、器件差异配置等功能。马达具体的开发步骤如下:
Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能力接口,包括马达一次振动、马达效果配置震动、马达停止。基于HDF(Hardware Driver Foundation)驱动框架开发的马达驱动模型,实现跨操作系统迁移、器件差异配置等功能。马达具体的开发步骤如下:
1.
基于HDF驱动框架,按照驱动Driver Entry程序,完成马达抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现,配置资源和HCS解析。
1.
基于HDF驱动框架,按照驱动Driver Entry程序,完成马达抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现,配置资源和HCS解析。
2.
创建马达效果模型,解析马达效果HCS配置。
3.
完成马达振动和停止接口开发,会根据振动效果的模式创建和销毁定时器。
4.
马达驱动模型提供给开发者马达驱动差异化接口,开发者实现差异化接口。
### 开发实例
1.
马达驱动的初始化和去初始化
-
调用HDF_INIT将驱动入口注册到HDF框架中,在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出马达驱动模型,使用HCS作为配置描述源码。HCS配置字段详细介绍参考
[
配置管理
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md
)
。其中Driver Entry入口函数定义如下:
-
调用HDF_INIT将驱动入口注册到HDF框架中,在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动。当Init调用异常时,HDF框架会调用Release释放驱动资源并退出马达驱动模型,使用HCS作为配置描述源码。HCS配置字段详细介绍参考
[
配置管理
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-hdf-manage.md
)
。其中Driver Entry入口函数定义如下:
```
```
c
/* 注册马达抽象驱动入口数据结构体对象 */
/* 注册马达抽象驱动入口数据结构体对象 */
struct
HdfDriverEntry
g_vibratorDriverEntry
=
{
struct
HdfDriverEntry
g_vibratorDriverEntry
=
{
.
moduleVersion
=
1
,
//马达模块版本号
.
moduleVersion
=
1
,
//马达模块版本号
...
@@ -99,12 +91,12 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
...
@@ -99,12 +91,12 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
.
Release
=
ReleaseVibratorDriver
,
//马达资源释放函数
.
Release
=
ReleaseVibratorDriver
,
//马达资源释放函数
};
};
HDF_INIT(g_vibratorDriverEntry);
HDF_INIT
(
g_vibratorDriverEntry
);
```
```
-
基于HDF驱动框架,按照驱动Driver Entry程序,完成马达抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现。
-
基于HDF驱动框架,按照驱动Driver Entry程序,完成马达抽象驱动开发,主要由Bind、Init、Release、Dispatch函数接口实现。
```
```
c
/* 马达驱动对外发布的能力 */
/* 马达驱动对外发布的能力 */
static
int32_t
DispatchVibrator
(
struct
HdfDeviceIoClient
*
client
,
static
int32_t
DispatchVibrator
(
struct
HdfDeviceIoClient
*
client
,
int32_t
cmd
,
struct
HdfSBuf
*
data
,
struct
HdfSBuf
*
reply
)
int32_t
cmd
,
struct
HdfSBuf
*
data
,
struct
HdfSBuf
*
reply
)
...
@@ -164,10 +156,10 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
...
@@ -164,10 +156,10 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
g_vibratorDrvData
=
NULL
;
g_vibratorDrvData
=
NULL
;
}
}
```
```
-
在系统启动过程中,HDF设备管理模块通过设备HCS配置信息,加载马达抽象驱动,并对外发布马达驱动接口。
-
在系统启动过程中,HDF设备管理模块通过设备HCS配置信息,加载马达抽象驱动,并对外发布马达驱动接口。
```
```
c
/* 马达设备HCS配置 */
/* 马达设备HCS配置 */
vibrator
::
host
{
vibrator
::
host
{
hostName
=
"vibrator_host"
;
hostName
=
"vibrator_host"
;
...
@@ -183,12 +175,12 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
...
@@ -183,12 +175,12 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
}
}
}
}
```
```
2.
创建马达效果模型,解析马达效果HCS配置。
2.
创建马达效果模型,解析马达效果HCS配置。
-
创建马达效果模型。
-
创建马达效果模型。
```
```
hcs
/* 创建马达效果模型,分配资源,解析马达效果HCS配置 */
/* 创建马达效果模型,分配资源,解析马达效果HCS配置 */
int32_t CreateVibratorHaptic(struct HdfDeviceObject *device)
int32_t CreateVibratorHaptic(struct HdfDeviceObject *device)
{
{
...
@@ -254,7 +246,7 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
...
@@ -254,7 +246,7 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
马达硬件服务调用StartOnce接口动态配置持续振动时间;调用StartEffect接口启动静态配置的振动效果,为驱动开发者提供抽象的配置接口能力。
马达硬件服务调用StartOnce接口动态配置持续振动时间;调用StartEffect接口启动静态配置的振动效果,为驱动开发者提供抽象的配置接口能力。
```
```
c
/* 按照指定持续时间触发振动马达,duration为振动持续时长 */
/* 按照指定持续时间触发振动马达,duration为振动持续时长 */
static
int32_t
StartOnce
(
struct
HdfSBuf
*
data
,
struct
HdfSBuf
*
reply
)
static
int32_t
StartOnce
(
struct
HdfSBuf
*
data
,
struct
HdfSBuf
*
reply
)
{
{
...
@@ -326,7 +318,7 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
...
@@ -326,7 +318,7 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
-
在差异化器件驱动初始化成功时,注册差异实现接口,方便实现器件差异的驱动接口。
-
在差异化器件驱动初始化成功时,注册差异实现接口,方便实现器件差异的驱动接口。
```
```
c
/* 注册马达差异化实现接口 */
/* 注册马达差异化实现接口 */
int32_t
RegisterVibrator
(
struct
VibratorOps
*
ops
)
int32_t
RegisterVibrator
(
struct
VibratorOps
*
ops
)
{
{
...
@@ -347,7 +339,7 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
...
@@ -347,7 +339,7 @@ Vibrator驱动模型为上层马达硬件服务层提供稳定的马达控制能
-
马达驱动模型提供给开发者马达驱动差异化接口,具体实现如下:
-
马达驱动模型提供给开发者马达驱动差异化接口,具体实现如下:
```
```
c
/* 按照指定持续时间触发线性马达的振动 */
/* 按照指定持续时间触发线性马达的振动 */
static
int32_t
StartLinearVibrator
()
static
int32_t
StartLinearVibrator
()
{
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录