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 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)