1094332d3Sopenharmony_ci# vibrator
2094332d3Sopenharmony_ci
3094332d3Sopenharmony_ci- [简介](##简介)
4094332d3Sopenharmony_ci- [目录](##目录)
5094332d3Sopenharmony_ci- [说明](##说明)
6094332d3Sopenharmony_ci  - [接口说明](###接口说明)
7094332d3Sopenharmony_ci  - [使用说明](###使用说明)
8094332d3Sopenharmony_ci
9094332d3Sopenharmony_ci- [相关仓](##相关仓)
10094332d3Sopenharmony_ci
11094332d3Sopenharmony_ci## 简介
12094332d3Sopenharmony_ci
13094332d3Sopenharmony_ciVibrator驱动模型主要包含Vibrator(马达)相关的HDI接口与实现,提供Vibrator HDI( Hardware Device Interface )能力接口,支持三种振动效果:静态HCS配置的时间序列,动态配置持续时间,动态配置持续时间、振动强度、振动频率。调用StartOnce接口动态配置持续振动时间;调用StartEffect接口启动静态配置的振动效果;调用EnableVibratorModulation接口启动动态配置的振动效果。
14094332d3Sopenharmony_ci
15094332d3Sopenharmony_ci**图 1** Vibrator驱动模型图
16094332d3Sopenharmony_ci
17094332d3Sopenharmony_ci![Vibrator驱动模型图](figures/Vibrator%E9%A9%B1%E5%8A%A8%E6%A8%A1%E5%9E%8B%E5%9B%BE.png)
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_ci## 目录
20094332d3Sopenharmony_ci
21094332d3Sopenharmony_ciVibraor驱动下源代码目录结构如下所示:
22094332d3Sopenharmony_ci
23094332d3Sopenharmony_ci```
24094332d3Sopenharmony_ci/drivers/peripheral/vibrator
25094332d3Sopenharmony_ci├── chipset          # vibrator模块器件驱动代码
26094332d3Sopenharmony_ci├── hal              # vibrator模块hal层代码
27094332d3Sopenharmony_ci│   ├── include      # vibrator模块hal层内部头文件
28094332d3Sopenharmony_ci│   └── src          # vibrator模块hal层代码的实现
29094332d3Sopenharmony_ci├── interfaces       # vibrator模块对上层服务提供的驱动能力接口
30094332d3Sopenharmony_ci│   └── include      # vibrator模块对外提供的接口定义
31094332d3Sopenharmony_ci└── test             # vibrator模块测试代码
32094332d3Sopenharmony_ci    └── unittest     # vibrator模块单元测试代码
33094332d3Sopenharmony_ci```
34094332d3Sopenharmony_ci
35094332d3Sopenharmony_ci## 说明
36094332d3Sopenharmony_ci
37094332d3Sopenharmony_ci### 接口说明
38094332d3Sopenharmony_ci
39094332d3Sopenharmony_ci马达主要提供的功能:触发振动,停止振动。开发能力如下表1:
40094332d3Sopenharmony_ci
41094332d3Sopenharmony_ci**表 1**马达的主要接口
42094332d3Sopenharmony_ci
43094332d3Sopenharmony_ci| 接口名                                                       | 功能描述                                                     |
44094332d3Sopenharmony_ci| ------------------------------------------------------------ | ------------------------------------------------------------ |
45094332d3Sopenharmony_ci| int32_t  StartOnce(uint32_t duration)                        | 按照指定持续时间触发振动,duration为振动持续时长。           |
46094332d3Sopenharmony_ci| int32_t  Start(const char *effectType)                       | 按照指定预置效果启动马达,effectType表示预置的振动效果串。   |
47094332d3Sopenharmony_ci| int32_t  Stop(enum VibratorMode mode)                        | 按照指定的振动模式停止振动。                                 |
48094332d3Sopenharmony_ci| int32_t EnableVibratorModulation(uint32_t duration, int32_t intensity, int32_t frequency) | 按照指定振幅,频率、持续时间触发振动马达,duration为振动持续时长,intensity为振动强度,frequency为振动频率。 |
49094332d3Sopenharmony_ci| int32_t GetVibratorInfo(struct VibratorInfo **vibratorInfo); | 获取马达信息,包括是否支持振幅和频率的设置及振幅和频率的设置范围 。 |
50094332d3Sopenharmony_ci
51094332d3Sopenharmony_ci### 使用说明
52094332d3Sopenharmony_ci
53094332d3Sopenharmony_ci代码示例
54094332d3Sopenharmony_ci
55094332d3Sopenharmony_ci```c++
56094332d3Sopenharmony_ci#include "vibrator_if.h"
57094332d3Sopenharmony_ci
58094332d3Sopenharmony_cienum VibratorMode {
59094332d3Sopenharmony_ci    VIBRATOR_MODE_ONCE   = 0,    // 指定时间内的一次振动
60094332d3Sopenharmony_ci    VIBRATOR_MODE_PRESET = 1,    // 指定预置效果的周期性振动
61094332d3Sopenharmony_ci};
62094332d3Sopenharmony_ci
63094332d3Sopenharmony_civoid VibratorSample(void)
64094332d3Sopenharmony_ci{
65094332d3Sopenharmony_ci    int32_t startRet;
66094332d3Sopenharmony_ci    int32_t endRet;
67094332d3Sopenharmony_ci    uint32_t g_duration = 1000;
68094332d3Sopenharmony_ci    uint32_t g_sleepTime1 = 2000;
69094332d3Sopenharmony_ci    uint32_t g_sleepTime2 = 5000;
70094332d3Sopenharmony_ci    int32_t g_intensity1 = 30;
71094332d3Sopenharmony_ci    int32_t g_frequency1 = 200;
72094332d3Sopenharmony_ci    const char *g_timeSequence = "haptic.clock.timer";
73094332d3Sopenharmony_ci    struct VibratorInfo *g_vibratorInfo = nullptr;
74094332d3Sopenharmony_ci    /* 创建马达接口实例 */
75094332d3Sopenharmony_ci    struct VibratorInterface *g_vibratorDev = NewVibratorInterfaceInstance();
76094332d3Sopenharmony_ci    if (g_vibratorDev == NULL) {
77094332d3Sopenharmony_ci        return;
78094332d3Sopenharmony_ci    }
79094332d3Sopenharmony_ci    /* 获取马达信息,包括是否支持振幅和频率的设置及振幅和频率的设置范围。 */
80094332d3Sopenharmony_ci    startRet = g_vibratorDev->GetVibratorInfo(&g_vibratorInfo);
81094332d3Sopenharmony_ci    if (startRet != 0) {
82094332d3Sopenharmony_ci        return;
83094332d3Sopenharmony_ci    }
84094332d3Sopenharmony_ci    /* 按照指定持续时间触发振动*/
85094332d3Sopenharmony_ci    startRet = g_vibratorDev->StartOnce(g_duration);
86094332d3Sopenharmony_ci    if (startRet != 0) {
87094332d3Sopenharmony_ci        return;
88094332d3Sopenharmony_ci    }
89094332d3Sopenharmony_ci    OsalMSleep(g_sleepTime1);
90094332d3Sopenharmony_ci    /* 按照指定的振动模式停止振动 */
91094332d3Sopenharmony_ci    endRet = g_vibratorDev->Stop(VIBRATOR_MODE_ONCE);
92094332d3Sopenharmony_ci    if (endRet != 0) {
93094332d3Sopenharmony_ci        return;
94094332d3Sopenharmony_ci    }
95094332d3Sopenharmony_ci    /* 按照指定预置效果启动马达 */
96094332d3Sopenharmony_ci    startRet = g_vibratorDev->Start(g_timeSequence);
97094332d3Sopenharmony_ci    if (endRet != 0) {
98094332d3Sopenharmony_ci        return;
99094332d3Sopenharmony_ci    }
100094332d3Sopenharmony_ci    OsalMSleep(g_sleepTime2);
101094332d3Sopenharmony_ci    /* 按照指定的振动模式停止振动 */
102094332d3Sopenharmony_ci    endRet = g_vibratorDev->Stop(VIBRATOR_MODE_PRESET);
103094332d3Sopenharmony_ci    if (endRet != 0) {
104094332d3Sopenharmony_ci        return;
105094332d3Sopenharmony_ci    }
106094332d3Sopenharmony_ci    /* 按照指定振幅,频率、持续时间触发振动马达。 */
107094332d3Sopenharmony_ci    startRet = g_vibratorDev->EnableVibratorModulation(g_duration, g_intensity1, g_frequency1);
108094332d3Sopenharmony_ci    if (endRet != 0) {
109094332d3Sopenharmony_ci        return;
110094332d3Sopenharmony_ci    }
111094332d3Sopenharmony_ci    OsalMSleep(g_sleepTime1);
112094332d3Sopenharmony_ci    /* 按照指定的振动模式停止振动 */
113094332d3Sopenharmony_ci    startRet = g_vibratorDev->Stop(VIBRATOR_MODE_ONCE);
114094332d3Sopenharmony_ci    if (endRet != 0) {
115094332d3Sopenharmony_ci        return;
116094332d3Sopenharmony_ci    }
117094332d3Sopenharmony_ci    /* 释放传感器接口实例 */
118094332d3Sopenharmony_ci    ret = FreeVibratorInterfaceInstance();
119094332d3Sopenharmony_ci    if (ret != 0) {
120094332d3Sopenharmony_ci        return;
121094332d3Sopenharmony_ci    }
122094332d3Sopenharmony_ci}
123094332d3Sopenharmony_ci```
124094332d3Sopenharmony_ci
125094332d3Sopenharmony_ci## 相关仓
126094332d3Sopenharmony_ci
127094332d3Sopenharmony_ci[驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md)
128094332d3Sopenharmony_ci
129094332d3Sopenharmony_ci[drivers_hdf_core](https://gitee.com/openharmony/drivers_hdf_core/blob/master/README_zh.md)
130094332d3Sopenharmony_ci
131094332d3Sopenharmony_ci[drivers_peripheral](https://gitee.com/openharmony/drivers_peripheral)