• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# vibrator
2
3- [简介](##简介)
4- [目录](##目录)
5- [说明](##说明)
6  - [接口说明](###接口说明)
7  - [使用说明](###使用说明)
8
9- [相关仓](##相关仓)
10
11## 简介
12
13Vibrator驱动模型主要包含Vibrator(马达)相关的HDI接口与实现,提供Vibrator HDI( Hardware Device Interface )能力接口,支持三种振动效果:静态HCS配置的时间序列,动态配置持续时间,动态配置持续时间、振动强度、振动频率。调用StartOnce接口动态配置持续振动时间;调用StartEffect接口启动静态配置的振动效果;调用EnableVibratorModulation接口启动动态配置的振动效果。
14
15**图 1** Vibrator驱动模型图
16
17![Vibrator驱动模型图](figures/Vibrator%E9%A9%B1%E5%8A%A8%E6%A8%A1%E5%9E%8B%E5%9B%BE.png)
18
19## 目录
20
21Vibraor驱动下源代码目录结构如下所示:
22
23```
24/drivers/peripheral/vibrator
25├── chipset          # vibrator模块器件驱动代码
26├── hal              # vibrator模块hal层代码
27│   ├── include      # vibrator模块hal层内部头文件
28│   └── src          # vibrator模块hal层代码的实现
29├── interfaces       # vibrator模块对上层服务提供的驱动能力接口
30│   └── include      # vibrator模块对外提供的接口定义
31└── test             # vibrator模块测试代码
32    └── unittest     # vibrator模块单元测试代码
33```
34
35## 说明
36
37### 接口说明
38
39马达主要提供的功能:触发振动,停止振动。开发能力如下表1:
40
41**表 1**马达的主要接口
42
43| 接口名                                                       | 功能描述                                                     |
44| ------------------------------------------------------------ | ------------------------------------------------------------ |
45| int32_t  StartOnce(uint32_t duration)                        | 按照指定持续时间触发振动,duration为振动持续时长。           |
46| int32_t  Start(const char *effectType)                       | 按照指定预置效果启动马达,effectType表示预置的振动效果串。   |
47| int32_t  Stop(enum VibratorMode mode)                        | 按照指定的振动模式停止振动。                                 |
48| int32_t EnableVibratorModulation(uint32_t duration, int32_t intensity, int32_t frequency) | 按照指定振幅,频率、持续时间触发振动马达,duration为振动持续时长,intensity为振动强度,frequency为振动频率。 |
49| int32_t GetVibratorInfo(struct VibratorInfo **vibratorInfo); | 获取马达信息,包括是否支持振幅和频率的设置及振幅和频率的设置范围 。 |
50
51### 使用说明
52
53代码示例
54
55```c++
56#include "vibrator_if.h"
57
58enum VibratorMode {
59    VIBRATOR_MODE_ONCE   = 0,    // 指定时间内的一次振动
60    VIBRATOR_MODE_PRESET = 1,    // 指定预置效果的周期性振动
61};
62
63void VibratorSample(void)
64{
65    int32_t startRet;
66    int32_t endRet;
67    uint32_t g_duration = 1000;
68    uint32_t g_sleepTime1 = 2000;
69    uint32_t g_sleepTime2 = 5000;
70    int32_t g_intensity1 = 30;
71    int32_t g_frequency1 = 200;
72    const char *g_timeSequence = "haptic.clock.timer";
73    struct VibratorInfo *g_vibratorInfo = nullptr;
74    /* 创建马达接口实例 */
75    struct VibratorInterface *g_vibratorDev = NewVibratorInterfaceInstance();
76    if (g_vibratorDev == NULL) {
77        return;
78    }
79    /* 获取马达信息,包括是否支持振幅和频率的设置及振幅和频率的设置范围。 */
80    startRet = g_vibratorDev->GetVibratorInfo(&g_vibratorInfo);
81    if (startRet != 0) {
82        return;
83    }
84    /* 按照指定持续时间触发振动*/
85    startRet = g_vibratorDev->StartOnce(g_duration);
86    if (startRet != 0) {
87        return;
88    }
89    OsalMSleep(g_sleepTime1);
90    /* 按照指定的振动模式停止振动 */
91    endRet = g_vibratorDev->Stop(VIBRATOR_MODE_ONCE);
92    if (endRet != 0) {
93        return;
94    }
95    /* 按照指定预置效果启动马达 */
96    startRet = g_vibratorDev->Start(g_timeSequence);
97    if (endRet != 0) {
98        return;
99    }
100    OsalMSleep(g_sleepTime2);
101    /* 按照指定的振动模式停止振动 */
102    endRet = g_vibratorDev->Stop(VIBRATOR_MODE_PRESET);
103    if (endRet != 0) {
104        return;
105    }
106    /* 按照指定振幅,频率、持续时间触发振动马达。 */
107    startRet = g_vibratorDev->EnableVibratorModulation(g_duration, g_intensity1, g_frequency1);
108    if (endRet != 0) {
109        return;
110    }
111    OsalMSleep(g_sleepTime1);
112    /* 按照指定的振动模式停止振动 */
113    startRet = g_vibratorDev->Stop(VIBRATOR_MODE_ONCE);
114    if (endRet != 0) {
115        return;
116    }
117    /* 释放传感器接口实例 */
118    ret = FreeVibratorInterfaceInstance();
119    if (ret != 0) {
120        return;
121    }
122}
123```
124
125## 相关仓
126
127[驱动子系统](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)
128
129[drivers_hdf_core](https://gitee.com/openharmony/drivers_hdf_core/blob/master/README_zh.md)
130
131[drivers_peripheral](https://gitee.com/openharmony/drivers_peripheral)