1 /*
2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "vibrator_agent.h"
16
17 #include "parameters.h"
18
19 #include "sensors_errors.h"
20 #include "vibrator_service_client.h"
21
22 #undef LOG_TAG
23 #define LOG_TAG "VibratorNDK"
24
25 namespace OHOS {
26 namespace Sensors {
27 using OHOS::Sensors::VibratorServiceClient;
28
29 namespace {
30 const std::string PHONE_TYPE = "phone";
31 const int32_t INTENSITY_ADJUST_MIN = 0;
32 const int32_t INTENSITY_ADJUST_MAX = 100;
33 const int32_t FREQUENCY_ADJUST_MIN = -100;
34 const int32_t FREQUENCY_ADJUST_MAX = 100;
35 } // namespace
36
NormalizeErrCode(int32_t code)37 static int32_t NormalizeErrCode(int32_t code)
38 {
39 switch (code) {
40 case PERMISSION_DENIED: {
41 return PERMISSION_DENIED;
42 }
43 case PARAMETER_ERROR: {
44 return PARAMETER_ERROR;
45 }
46 case IS_NOT_SUPPORTED: {
47 return IS_NOT_SUPPORTED;
48 }
49 default: {
50 return DEVICE_OPERATION_FAILED;
51 }
52 }
53 }
54
SetLoopCount(int32_t count)55 bool SetLoopCount(int32_t count)
56 {
57 VibratorIdentifier identifier = {
58 .deviceId = -1,
59 .vibratorId = -1
60 };
61 return SetLoopCountEnhanced(identifier, count);
62 }
63
SetLoopCountEnhanced(const VibratorIdentifier identifier,int32_t count)64 bool SetLoopCountEnhanced(const VibratorIdentifier identifier, int32_t count)
65 {
66 if (count <= 0) {
67 MISC_HILOGE("Input invalid, count is %{public}d", count);
68 return false;
69 }
70 auto &client = VibratorServiceClient::GetInstance();
71 client.SetLoopCount(identifier, count);
72 return true;
73 }
74
StartVibrator(const char * effectId)75 int32_t StartVibrator(const char *effectId)
76 {
77 VibratorIdentifier identifier = {
78 .deviceId = -1,
79 .vibratorId = -1
80 };
81 return StartVibratorEnhanced(identifier, effectId);
82 }
83
StartVibratorEnhanced(const VibratorIdentifier identifier,const char * effectId)84 int32_t StartVibratorEnhanced(const VibratorIdentifier identifier, const char *effectId)
85 {
86 MISC_HILOGD("Time delay measurement:start time");
87 CHKPR(effectId, PARAMETER_ERROR);
88 auto &client = VibratorServiceClient::GetInstance();
89 VibratorEffectParameter vibratorEffectParameter = client.GetVibratorEffectParameter(identifier);
90 int32_t ret = client.Vibrate(identifier, effectId, vibratorEffectParameter.loopCount,
91 vibratorEffectParameter.usage, vibratorEffectParameter.systemUsage);
92 client.SetUsage(identifier, USAGE_UNKNOWN, false);
93 client.SetLoopCount(identifier, 1);
94 if (ret != ERR_OK) {
95 MISC_HILOGE("Vibrate effectId failed, ret:%{public}d", ret);
96 return NormalizeErrCode(ret);
97 }
98 return SUCCESS;
99 }
100
StartVibratorOnce(int32_t duration)101 int32_t StartVibratorOnce(int32_t duration)
102 {
103 VibratorIdentifier identifier = {
104 .deviceId = -1,
105 .vibratorId = -1
106 };
107 return StartVibratorOnceEnhanced(identifier, duration);
108 }
109
StartVibratorOnceEnhanced(const VibratorIdentifier identifier,int32_t duration)110 int32_t StartVibratorOnceEnhanced(const VibratorIdentifier identifier, int32_t duration)
111 {
112 if (duration <= 0) {
113 MISC_HILOGE("duration is invalid");
114 return PARAMETER_ERROR;
115 }
116 auto &client = VibratorServiceClient::GetInstance();
117 VibratorEffectParameter vibratorEffectParameter = client.GetVibratorEffectParameter(identifier);
118 int32_t ret = client.Vibrate(identifier, duration, vibratorEffectParameter.usage,
119 vibratorEffectParameter.systemUsage);
120 client.SetUsage(identifier, USAGE_UNKNOWN, false);
121 if (ret != ERR_OK) {
122 MISC_HILOGE("Vibrate duration failed, ret:%{public}d", ret);
123 return NormalizeErrCode(ret);
124 }
125 return SUCCESS;
126 }
127
IsSupportVibratorCustom()128 bool IsSupportVibratorCustom()
129 {
130 VibratorIdentifier identifier = {
131 .deviceId = -1,
132 .vibratorId = -1
133 };
134 return IsSupportVibratorCustomEnhanced(identifier);
135 }
136
IsSupportVibratorCustomEnhanced(const VibratorIdentifier identifier)137 bool IsSupportVibratorCustomEnhanced(const VibratorIdentifier identifier)
138 {
139 auto &client = VibratorServiceClient::GetInstance();
140 return client.IsSupportVibratorCustom(identifier);
141 }
142
PlayVibratorCustom(int32_t fd,int64_t offset,int64_t length)143 int32_t PlayVibratorCustom(int32_t fd, int64_t offset, int64_t length)
144 {
145 VibratorIdentifier identifier = {
146 .deviceId = -1,
147 .vibratorId = -1
148 };
149 return PlayVibratorCustomEnhanced(identifier, fd, offset, length);
150 }
151
PlayVibratorCustomEnhanced(const VibratorIdentifier identifier,int32_t fd,int64_t offset,int64_t length)152 int32_t PlayVibratorCustomEnhanced(const VibratorIdentifier identifier, int32_t fd, int64_t offset, int64_t length)
153 {
154 #ifdef OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM
155 MISC_HILOGD("Time delay measurement:start time");
156 if (fd < 0 || offset < 0 || length <= 0) {
157 MISC_HILOGE("Input parameter invalid, fd:%{public}d, offset:%{public}lld, length:%{public}lld",
158 fd, static_cast<long long>(offset), static_cast<long long>(length));
159 return PARAMETER_ERROR;
160 }
161 auto &client = VibratorServiceClient::GetInstance();
162 RawFileDescriptor rawFd = {
163 .fd = fd,
164 .offset = offset,
165 .length = length
166 };
167 VibratorEffectParameter vibratorEffectParameter = client.GetVibratorEffectParameter(identifier);
168 int32_t ret = client.PlayVibratorCustom(identifier, rawFd, vibratorEffectParameter.usage,
169 vibratorEffectParameter.systemUsage, vibratorEffectParameter.vibratorParameter);
170 vibratorEffectParameter.vibratorParameter.intensity = INTENSITY_ADJUST_MAX;
171 vibratorEffectParameter.vibratorParameter.frequency = 0;
172 client.SetUsage(identifier, USAGE_UNKNOWN, false);
173 client.SetParameters(identifier, vibratorEffectParameter.vibratorParameter);
174 if (ret != ERR_OK) {
175 MISC_HILOGE("PlayVibratorCustom failed, ret:%{public}d", ret);
176 return NormalizeErrCode(ret);
177 }
178 return SUCCESS;
179 #else
180 MISC_HILOGE("The device does not support this operation");
181 return IS_NOT_SUPPORTED;
182 #endif // OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM
183 }
184
StopVibrator(const char * mode)185 int32_t StopVibrator(const char *mode)
186 {
187 VibratorIdentifier identifier = {
188 .deviceId = -1,
189 .vibratorId = -1
190 };
191 return StopVibratorEnhanced(identifier, mode);
192 }
193
StopVibratorEnhanced(const VibratorIdentifier identifier,const char * mode)194 int32_t StopVibratorEnhanced(const VibratorIdentifier identifier, const char *mode)
195 {
196 CHKPR(mode, PARAMETER_ERROR);
197 if (strcmp(mode, "time") != 0 && strcmp(mode, "preset") != 0) {
198 MISC_HILOGE("Input parameter invalid, mode is %{public}s", mode);
199 return PARAMETER_ERROR;
200 }
201 auto &client = VibratorServiceClient::GetInstance();
202 int32_t ret = client.StopVibrator(identifier, mode);
203 if (ret != ERR_OK) {
204 MISC_HILOGE("StopVibrator by mode failed, ret:%{public}d, mode:%{public}s", ret, mode);
205 return NormalizeErrCode(ret);
206 }
207 return SUCCESS;
208 }
209
Cancel()210 int32_t Cancel()
211 {
212 VibratorIdentifier identifier = {
213 .deviceId = -1,
214 .vibratorId = -1
215 };
216 return CancelEnhanced(identifier);
217 }
218
CancelEnhanced(const VibratorIdentifier identifier)219 int32_t CancelEnhanced(const VibratorIdentifier identifier)
220 {
221 auto &client = VibratorServiceClient::GetInstance();
222 int32_t ret = client.StopVibrator(identifier);
223 if (ret != ERR_OK) {
224 MISC_HILOGE("StopVibrator failed, ret:%{public}d", ret);
225 return NormalizeErrCode(ret);
226 }
227 return SUCCESS;
228 }
229
SetUsage(int32_t usage,bool systemUsage)230 bool SetUsage(int32_t usage, bool systemUsage)
231 {
232 VibratorIdentifier identifier = {
233 .deviceId = -1,
234 .vibratorId = -1
235 };
236 return SetUsageEnhanced(identifier, usage, systemUsage);
237 }
238
SetUsageEnhanced(const VibratorIdentifier identifier,int32_t usage,bool systemUsage)239 bool SetUsageEnhanced(const VibratorIdentifier identifier, int32_t usage, bool systemUsage)
240 {
241 if ((usage < 0) || (usage >= USAGE_MAX)) {
242 MISC_HILOGE("Input invalid, usage is %{public}d", usage);
243 return false;
244 }
245 auto &client = VibratorServiceClient::GetInstance();
246 client.SetUsage(identifier, usage, systemUsage);
247 return true;
248 }
249
IsHdHapticSupported()250 bool IsHdHapticSupported()
251 {
252 VibratorIdentifier identifier = {
253 .deviceId = -1,
254 .vibratorId = -1
255 };
256 return IsHdHapticSupportedEnhanced(identifier);
257 }
258
IsHdHapticSupportedEnhanced(const VibratorIdentifier identifier)259 bool IsHdHapticSupportedEnhanced(const VibratorIdentifier identifier)
260 {
261 auto &client = VibratorServiceClient::GetInstance();
262 return client.IsHdHapticSupported(identifier);
263 }
264
IsSupportEffect(const char * effectId,bool * state)265 int32_t IsSupportEffect(const char *effectId, bool *state)
266 {
267 VibratorIdentifier identifier = {
268 .deviceId = -1,
269 .vibratorId = -1
270 };
271 return IsSupportEffectEnhanced(identifier, effectId, state);
272 }
273
IsSupportEffectEnhanced(const VibratorIdentifier identifier,const char * effectId,bool * state)274 int32_t IsSupportEffectEnhanced(const VibratorIdentifier identifier, const char *effectId, bool *state)
275 {
276 CHKPR(effectId, PARAMETER_ERROR);
277 auto &client = VibratorServiceClient::GetInstance();
278 int32_t ret = client.IsSupportEffect(identifier, effectId, *state);
279 if (ret != ERR_OK) {
280 MISC_HILOGE("Query effect support failed, ret:%{public}d, effectId:%{public}s", ret, effectId);
281 return NormalizeErrCode(ret);
282 }
283 return SUCCESS;
284 }
285
PreProcess(const VibratorFileDescription & fd,VibratorPackage & package)286 int32_t PreProcess(const VibratorFileDescription &fd, VibratorPackage &package)
287 {
288 auto &client = VibratorServiceClient::GetInstance();
289 int32_t ret = client.PreProcess(fd, package);
290 if (ret != ERR_OK) {
291 MISC_HILOGE("DecodeVibratorFile failed, ret:%{public}d", ret);
292 return NormalizeErrCode(ret);
293 }
294 return SUCCESS;
295 }
296
GetDelayTime(int32_t & delayTime)297 int32_t GetDelayTime(int32_t &delayTime)
298 {
299 VibratorIdentifier identifier = {
300 .deviceId = -1,
301 .vibratorId = -1
302 };
303 return GetDelayTimeEnhanced(identifier, delayTime);
304 }
305
GetDelayTimeEnhanced(const VibratorIdentifier identifier,int32_t & delayTime)306 int32_t GetDelayTimeEnhanced(const VibratorIdentifier identifier, int32_t &delayTime)
307 {
308 auto &client = VibratorServiceClient::GetInstance();
309 int32_t ret = client.GetDelayTime(identifier, delayTime);
310 if (ret != ERR_OK) {
311 MISC_HILOGE("GetDelayTime failed, ret:%{public}d", ret);
312 return NormalizeErrCode(ret);
313 }
314 return SUCCESS;
315 }
316
PlayPattern(const VibratorPattern & pattern)317 int32_t PlayPattern(const VibratorPattern &pattern)
318 {
319 VibratorIdentifier identifier = {
320 .deviceId = -1,
321 .vibratorId = -1
322 };
323 return PlayPatternEnhanced(identifier, pattern);
324 }
325
PlayPatternEnhanced(const VibratorIdentifier identifier,const VibratorPattern & pattern)326 int32_t PlayPatternEnhanced(const VibratorIdentifier identifier, const VibratorPattern &pattern)
327 {
328 auto &client = VibratorServiceClient::GetInstance();
329 VibratorEffectParameter vibratorEffectParameter = client.GetVibratorEffectParameter(identifier);
330 int32_t ret = client.PlayPattern(identifier, pattern, vibratorEffectParameter.usage,
331 vibratorEffectParameter.systemUsage, vibratorEffectParameter.vibratorParameter);
332 vibratorEffectParameter.vibratorParameter.intensity = INTENSITY_ADJUST_MAX;
333 vibratorEffectParameter.vibratorParameter.frequency = 0;
334 client.SetUsage(identifier, USAGE_UNKNOWN, false);
335 client.SetParameters(identifier, vibratorEffectParameter.vibratorParameter);
336 if (ret != ERR_OK) {
337 MISC_HILOGE("PlayPattern failed, ret:%{public}d", ret);
338 return NormalizeErrCode(ret);
339 }
340 return SUCCESS;
341 }
342
SeekTimeOnPackage(int32_t seekTime,const VibratorPackage & completePackage,VibratorPackage & seekPackage)343 int32_t SeekTimeOnPackage(int32_t seekTime, const VibratorPackage &completePackage, VibratorPackage &seekPackage)
344 {
345 auto &client = VibratorServiceClient::GetInstance();
346 int32_t ret = client.SeekTimeOnPackage(seekTime, completePackage, seekPackage);
347 if (ret != ERR_OK) {
348 MISC_HILOGE("SeekTimeOnPackage failed, ret:%{public}d", ret);
349 return NormalizeErrCode(ret);
350 }
351 return SUCCESS;
352 }
353
ModulatePackage(VibratorCurvePoint * modulationCurve,const int32_t curvePointNum,const int32_t duration,const VibratorPackage & beforeModulationPackage,VibratorPackage & afterModulationPackage)354 int32_t ModulatePackage(VibratorCurvePoint* modulationCurve, const int32_t curvePointNum, const int32_t duration,
355 const VibratorPackage &beforeModulationPackage, VibratorPackage &afterModulationPackage)
356 {
357 VibratorEvent modulationEvent{.type = EVENT_TYPE_CONTINUOUS, .time = 0, .duration = duration,
358 .intensity = -1, .frequency = -1, .index = 0, .pointNum = curvePointNum,
359 .points = modulationCurve};
360 int32_t ret = VibratorServiceClient::ModulatePackage(
361 modulationEvent, beforeModulationPackage, afterModulationPackage);
362 if (ret != ERR_OK) {
363 MISC_HILOGE("ModulatePackage failed, ret:%{public}d", ret);
364 return NormalizeErrCode(ret);
365 }
366 return SUCCESS;
367 }
368
FreeVibratorPackage(VibratorPackage & package)369 int32_t FreeVibratorPackage(VibratorPackage &package)
370 {
371 int32_t ret = VibratorServiceClient::FreeVibratorPackage(package);
372 if (ret != ERR_OK) {
373 MISC_HILOGE("FreeVibratorPackage failed, ret:%{public}d", ret);
374 return NormalizeErrCode(ret);
375 }
376 return SUCCESS;
377 }
378
SetParameters(const VibratorParameter & parameter)379 bool SetParameters(const VibratorParameter ¶meter)
380 {
381 VibratorIdentifier identifier = {
382 .deviceId = -1,
383 .vibratorId = -1
384 };
385 return SetParametersEnhanced(identifier, parameter);
386 }
387
SetParametersEnhanced(const VibratorIdentifier identifier,const VibratorParameter & parameter)388 bool SetParametersEnhanced(const VibratorIdentifier identifier, const VibratorParameter ¶meter)
389 {
390 if ((parameter.intensity < INTENSITY_ADJUST_MIN) || (parameter.intensity > INTENSITY_ADJUST_MAX) ||
391 (parameter.frequency < FREQUENCY_ADJUST_MIN) || (parameter.frequency > FREQUENCY_ADJUST_MAX)) {
392 MISC_HILOGE("Input invalid, intensity parameter is %{public}d, frequency parameter is %{public}d",
393 parameter.intensity, parameter.frequency);
394 return false;
395 }
396 auto &client = VibratorServiceClient::GetInstance();
397 client.SetParameters(identifier, parameter);
398 return true;
399 }
400
PlayPrimitiveEffect(const char * effectId,int32_t intensity)401 int32_t PlayPrimitiveEffect(const char *effectId, int32_t intensity)
402 {
403 VibratorIdentifier identifier = {
404 .deviceId = -1,
405 .vibratorId = -1
406 };
407 return PlayPrimitiveEffectEnhanced(identifier, effectId, intensity);
408 }
409
PlayPrimitiveEffectEnhanced(const VibratorIdentifier identifier,const char * effectId,int32_t intensity)410 int32_t PlayPrimitiveEffectEnhanced(const VibratorIdentifier identifier, const char *effectId, int32_t intensity)
411 {
412 MISC_HILOGD("Time delay measurement:start time");
413 CHKPR(effectId, PARAMETER_ERROR);
414 auto &client = VibratorServiceClient::GetInstance();
415 VibratorEffectParameter vibratorEffectParameter = client.GetVibratorEffectParameter(identifier);
416 PrimitiveEffect primitiveEffect;
417 primitiveEffect.intensity = intensity;
418 primitiveEffect.usage = vibratorEffectParameter.usage;
419 primitiveEffect.systemUsage = vibratorEffectParameter.systemUsage;
420 primitiveEffect.count = vibratorEffectParameter.loopCount;
421 int32_t ret = client.PlayPrimitiveEffect(identifier, effectId, primitiveEffect);
422 client.SetUsage(identifier, USAGE_UNKNOWN, false);
423 client.SetLoopCount(identifier, 1);
424 if (ret != ERR_OK) {
425 MISC_HILOGE("Play primitive effect failed, ret:%{public}d", ret);
426 return NormalizeErrCode(ret);
427 }
428 return SUCCESS;
429 }
430
GetVibratorList(const VibratorIdentifier & identifier,std::vector<VibratorInfos> & vibratorInfo)431 int32_t GetVibratorList(const VibratorIdentifier& identifier, std::vector<VibratorInfos>& vibratorInfo)
432 {
433 CALL_LOG_ENTER;
434 CHKCR(&identifier, PARAMETER_ERROR, "Invalid parameters");
435 MISC_HILOGD("VibratorIdentifier = [deviceId = %{public}d, vibratorId = %{public}d]", identifier.deviceId,
436 identifier.vibratorId);
437 auto &client = VibratorServiceClient::GetInstance();
438 int32_t ret = client.GetVibratorList(identifier, vibratorInfo);
439 if (ret != ERR_OK) {
440 MISC_HILOGE("Get vibrator list failed, ret:%{public}d", ret);
441 return NormalizeErrCode(ret);
442 }
443 return SUCCESS;
444 }
445
GetEffectInfo(const VibratorIdentifier & identifier,const std::string & effectType,EffectInfo & effectInfo)446 int32_t GetEffectInfo(const VibratorIdentifier& identifier, const std::string& effectType, EffectInfo& effectInfo)
447 {
448 CALL_LOG_ENTER;
449 CHKCR(&identifier, PARAMETER_ERROR, "Invalid parameters");
450 MISC_HILOGD("VibratorIdentifier = [deviceId = %{public}d, vibratorId = %{public}d]", identifier.deviceId,
451 identifier.vibratorId);
452 auto &client = VibratorServiceClient::GetInstance();
453 int32_t ret = client.GetEffectInfo(identifier, effectType, effectInfo);
454 if (ret != ERR_OK) {
455 effectInfo.isSupportEffect = false;
456 MISC_HILOGW("Get effect info failed, ret:%{public}d", ret);
457 }
458 return SUCCESS;
459 }
460
SubscribeVibratorPlug(const VibratorUser & user)461 int32_t SubscribeVibratorPlug(const VibratorUser& user)
462 {
463 CALL_LOG_ENTER;
464 CHKCR(user.callback, PARAMETER_ERROR, "Invalid parameters");
465 auto &client = VibratorServiceClient::GetInstance();
466 int32_t ret = client.SubscribeVibratorPlugInfo(&user);
467 if (ret != ERR_OK) {
468 MISC_HILOGE("SubscribeVibratorPlug failed, ret:%{public}d", ret);
469 return NormalizeErrCode(ret);
470 }
471 return SUCCESS;
472 }
473
UnSubscribeVibratorPlug(const VibratorUser & user)474 int32_t UnSubscribeVibratorPlug(const VibratorUser& user)
475 {
476 CALL_LOG_ENTER;
477 CHKCR(user.callback, PARAMETER_ERROR, "Invalid parameters");
478 auto &client = VibratorServiceClient::GetInstance();
479 int32_t ret = client.UnsubscribeVibratorPlugInfo(&user);
480 if (ret != ERR_OK) {
481 MISC_HILOGE("UnsubscribeVibratorPlugInfo failed, ret:%{public}d", ret);
482 return NormalizeErrCode(ret);
483 }
484 return SUCCESS;
485 }
486
PlayPatternBySessionId(uint32_t sessionId,const VibratorPattern & pattern)487 int32_t PlayPatternBySessionId(uint32_t sessionId, const VibratorPattern &pattern)
488 {
489 CALL_LOG_ENTER;
490 if (sessionId == 0) {
491 MISC_HILOGE("sessionId invalid, ret:%{public}d", sessionId);
492 return PARAMETER_ERROR;
493 }
494 VibratorIdentifier identifier = {
495 .deviceId = -1,
496 .vibratorId = -1
497 };
498 auto &client = VibratorServiceClient::GetInstance();
499 VibratorEffectParameter vibratorEffectParameter = client.GetVibratorEffectParameter(identifier);
500 vibratorEffectParameter.vibratorParameter.sessionId = sessionId;
501 int32_t ret = client.PlayPattern(identifier, pattern, vibratorEffectParameter.usage,
502 vibratorEffectParameter.systemUsage, vibratorEffectParameter.vibratorParameter);
503 vibratorEffectParameter.vibratorParameter.intensity = INTENSITY_ADJUST_MAX;
504 vibratorEffectParameter.vibratorParameter.frequency = 0;
505 client.SetUsage(identifier, USAGE_UNKNOWN, false);
506 client.SetParameters(identifier, vibratorEffectParameter.vibratorParameter);
507 if (ret != ERR_OK) {
508 MISC_HILOGE("PlayPatternBySessionId failed, ret:%{public}d", ret);
509 return NormalizeErrCode(ret);
510 }
511 return SUCCESS;
512 }
513
PlayPackageBySessionId(uint32_t sessionId,const VibratorPackage & package)514 int32_t PlayPackageBySessionId(uint32_t sessionId, const VibratorPackage &package)
515 {
516 CALL_LOG_ENTER;
517 if (sessionId == 0) {
518 MISC_HILOGE("sessionId invalid, ret:%{public}d", sessionId);
519 return PARAMETER_ERROR;
520 }
521 VibratorIdentifier identifier = {
522 .deviceId = -1,
523 .vibratorId = -1
524 };
525 auto &client = VibratorServiceClient::GetInstance();
526 VibratorEffectParameter vibratorEffectParameter = client.GetVibratorEffectParameter(identifier);
527 vibratorEffectParameter.sessionId = sessionId;
528 int32_t ret = client.PlayPackageBySessionId(identifier, vibratorEffectParameter, package);
529 if (ret != ERR_OK) {
530 MISC_HILOGE("PlayPackageBySessionId failed, ret:%{public}d", ret);
531 return NormalizeErrCode(ret);
532 }
533 vibratorEffectParameter.vibratorParameter.intensity = INTENSITY_ADJUST_MAX;
534 vibratorEffectParameter.vibratorParameter.frequency = 0;
535 client.SetUsage(identifier, USAGE_UNKNOWN, false);
536 client.SetParameters(identifier, vibratorEffectParameter.vibratorParameter);
537 return SUCCESS;
538 }
539
StopVibrateBySessionId(uint32_t sessionId)540 int32_t StopVibrateBySessionId(uint32_t sessionId)
541 {
542 CALL_LOG_ENTER;
543 if (sessionId == 0) {
544 MISC_HILOGE("sessionId invalid, ret:%{public}d", sessionId);
545 return PARAMETER_ERROR;
546 }
547 VibratorIdentifier identifier = {
548 .deviceId = -1,
549 .vibratorId = -1
550 };
551 int32_t ret = VibratorServiceClient::GetInstance().StopVibrateBySessionId(identifier, sessionId);
552 if (ret != ERR_OK) {
553 MISC_HILOGE("StopVibrateBySessionId failed, ret:%{public}d", ret);
554 return NormalizeErrCode(ret);
555 }
556 return SUCCESS;
557 }
558 } // namespace Sensors
559 } // namespace OHOS