Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
6d474372
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看板
未验证
提交
6d474372
编写于
7月 07, 2022
作者:
L
liyan
提交者:
Gitee
7月 07, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
规范性检查
Signed-off-by:
N
li-yan339
<
liyan339@h-partners.com
>
上级
0546ba86
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
14 deletion
+16
-14
zh-cn/device-dev/driver/driver-hdf-servicemanage.md
zh-cn/device-dev/driver/driver-hdf-servicemanage.md
+16
-14
未找到文件。
zh-cn/device-dev/driver/driver-hdf-servicemanage.md
浏览文件 @
6d474372
...
...
@@ -4,7 +4,7 @@
驱动服务是HDF驱动设备对外提供能力的对象,由HDF框架统一管理。驱动服务管理主要包含驱动服务的发布和获取。
HDF框架定义了驱动对外发布服务的策略,
是
由配置文件中的policy字段来控制,policy字段的取值范围以及含义如下:
HDF框架定义了驱动对外发布服务的策略,由配置文件中的policy字段来控制,policy字段的取值范围以及含义如下:
...
...
@@ -39,26 +39,26 @@ typedef enum {
| 方法 | 描述 |
| -------- | -------- |
| int32_t
(\*Bind)(struct
HdfDeviceObject
\*deviceObject)
;
| 需要驱动开发者实现Bind函数,将自己的服务接口绑定到HDF框架中。 |
| const
struct
HdfObject
\*DevSvcManagerClntGetService(const
char
\*svcName)
;
| 获取驱动的服务。 |
|
int
HdfDeviceSubscribeService(
<br/>
struct
HdfDeviceObject
\*deviceObject,
const
char
\*serviceName,
struct
SubscriberCallback
callback);
| 订阅驱动的服务。 |
| int32_t
(\*Bind)(struct
HdfDeviceObject
\*
deviceObject) | 需要驱动开发者实现Bind函数,将自己的服务接口绑定到HDF框架中。 |
| const
struct
HdfObject
\*DevSvcManagerClntGetService(const
char
\*
svcName)| 获取驱动的服务。 |
|
int
HdfDeviceSubscribeService(
<br/>
struct
HdfDeviceObject
\*deviceObject,
const
char
\*serviceName,
struct
SubscriberCallback
callback)
| 订阅驱动的服务。 |
## 开发步骤
驱动服务管理的开发包括驱动服务的编写、绑定、获取或者订阅,详细步骤如下。
1.
驱动服务
发布
。
1.
驱动服务
编写
。
```
驱动服务结构的定义
//
驱动服务结构的定义
struct ISampleDriverService {
struct IDeviceIoService ioService;
// 服务结构的首个成员必须是IDeviceIoService类型的成员
int32_t (*ServiceA)(void); // 驱动的第一个服务接口
int32_t (*ServiceB)(uint32_t inputCode); // 驱动的第二个服务接口,有多个可以依次往下累加
struct IDeviceIoService ioService;
// 服务结构的首个成员必须是IDeviceIoService类型的成员。
int32_t (*ServiceA)(void); // 驱动的第一个服务接口
。
int32_t (*ServiceB)(uint32_t inputCode); // 驱动的第二个服务接口,有多个可以依次往下累加
。
};
驱动服务接口的实现
//
驱动服务接口的实现
int32_t SampleDriverServiceA(void)
{
// 驱动开发者实现业务逻辑
...
...
@@ -77,7 +77,7 @@ typedef enum {
```
int32_t SampleDriverBind(struct HdfDeviceObject *deviceObject)
{
// deviceObject为HDF框架给每一个驱动创建的设备对象,用来保存设备相关的私有数据和服务接口
// deviceObject为HDF框架给每一个驱动创建的设备对象,用来保存设备相关的私有数据和服务接口
。
if (deviceObject == NULL) {
HDF_LOGE("Sample device object is null!");
return -1;
...
...
@@ -92,10 +92,11 @@ typedef enum {
```
3.
驱动服务获取。
驱动服务的获取有两种方式,HDF框架提供接口直接获取和
HDF框架提供
订阅机制获取。
驱动服务的获取有两种方式,HDF框架提供接口直接获取和订阅机制获取。
-
通过HDF接口直接获取
当明确驱动已经加载完成时,获取该驱动的服务可以通过HDF框架提供的能力接口直接获取,如下所示:
当明确驱动已经加载完成时,获取该驱动的服务可以通过HDF框架提供的能力接口直接获取,如下所示:
```
...
...
@@ -108,7 +109,8 @@ typedef enum {
sampleService->ServiceB(5);
```
-
通过HDF提供的订阅机制获取
当内核态对驱动(同一个host)加载的时机不感知时,可以通过HDF框架提供的订阅机制来订阅该驱动,当该驱动加载完成时,HDF框架会将被订阅的驱动服务发布给订阅者,实现方式如下所示:
当内核态对驱动(同一个host)加载的时机不感知时,可以通过HDF框架提供的订阅机制来订阅该驱动。当该驱动加载完成时,HDF框架会将被订阅的驱动服务发布给订阅者,实现方式如下所示:
```
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录