From 9c4515ab58c311ec9f63e6b28bf2d40348f97c8e Mon Sep 17 00:00:00 2001 From: li-yaoyao777 Date: Fri, 18 Oct 2024 10:15:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A9=AC=E8=BE=BE5.0.1releas?= =?UTF-8?q?e=E5=B7=AE=E5=BC=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li-yaoyao777 --- .../js/napi/vibrator/src/vibrator_js.cpp | 6 +- frameworks/native/light/src/light_client.cpp | 7 +- .../vibrator/src/vibrator_service_client.cpp | 21 +- .../inner_api/vibrator/vibrator_agent_type.h | 24 +-- services/miscdevice_service/BUILD.gn | 1 + .../include/custom_vibration_matcher.h | 12 +- .../src/custom_vibration_matcher.cpp | 114 +++++++--- .../adapter/include/compatible_connection.h | 1 + .../adapter/include/hdi_connection.h | 1 + .../adapter/src/compatible_connection.cpp | 5 + .../adapter/src/hdi_connection.cpp | 11 + .../include/i_vibrator_hdi_connection.h | 3 + .../include/vibrator_hdi_connection.h | 1 + .../interface/src/vibrator_hdi_connection.cpp | 6 + .../include/miscdevice_service.h | 1 + .../src/miscdevice_service.cpp | 2 + .../src/vibration_priority_manager.cpp | 4 - .../src/vibrator_thread.cpp | 2 +- .../vibratoronremoterequest_fuzzer.cpp | 6 +- test/unittest/light/light_agent_test.cpp | 11 +- test/unittest/vibrator/capi/BUILD.gn | 4 +- test/unittest/vibrator/capi/vibrator_test.cpp | 130 ++++++++++- .../vibrator/js/ExampleJsunit.test.js | 2 +- .../native/resource/json_file/Jet_N2O.he | 201 ++++++++++++++++++ .../native/resource/json_file/Racing_Start.he | 64 ++++++ .../vibrator/native/resource/ohos_test.xml | 2 + .../vibrator/native/vibrator_agent_test.cpp | 59 ++++- utils/common/BUILD.gn | 1 - utils/common/include/miscdevice_common.h | 8 +- utils/common/src/file_utils.cpp | 10 +- utils/common/src/miscdevice_common.cpp | 62 ------ 31 files changed, 637 insertions(+), 145 deletions(-) create mode 100644 test/unittest/vibrator/native/resource/json_file/Jet_N2O.he create mode 100644 test/unittest/vibrator/native/resource/json_file/Racing_Start.he delete mode 100644 utils/common/src/miscdevice_common.cpp diff --git a/frameworks/js/napi/vibrator/src/vibrator_js.cpp b/frameworks/js/napi/vibrator/src/vibrator_js.cpp index 2fcd8e2..829716b 100644 --- a/frameworks/js/napi/vibrator/src/vibrator_js.cpp +++ b/frameworks/js/napi/vibrator/src/vibrator_js.cpp @@ -219,6 +219,7 @@ bool SetUsage(const std::string &usage, bool systemUsage) int32_t StartVibrate(const VibrateInfo &info) { + CALL_LOG_ENTER; if (!SetUsage(info.usage, info.systemUsage)) { MISC_HILOGE("SetUsage fail"); return PARAMETER_ERROR; @@ -261,7 +262,6 @@ static napi_value VibrateEffect(napi_env env, napi_value args[], size_t argc) static napi_value StartVibrate(napi_env env, napi_callback_info info) { - CALL_LOG_ENTER; CHKPP(env); CHKPP(info); size_t argc = 3; @@ -539,5 +539,5 @@ extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&_module); } -} // namespace Sensors -} // namespace OHOS +} // namespace Sensors +} // namespace OHOS diff --git a/frameworks/native/light/src/light_client.cpp b/frameworks/native/light/src/light_client.cpp index de77025..44dd0d6 100644 --- a/frameworks/native/light/src/light_client.cpp +++ b/frameworks/native/light/src/light_client.cpp @@ -147,6 +147,7 @@ int32_t LightClient::TurnOn(int32_t lightId, const LightColor &color, const Ligh MISC_HILOGE("animation is invalid"); return PARAMETER_ERROR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); LightAnimationIPC animationIPC; animationIPC.SetMode(animation.mode); @@ -162,6 +163,7 @@ int32_t LightClient::TurnOff(int32_t lightId) MISC_HILOGE("lightId is invalid, lightId:%{public}d", lightId); return LIGHT_ID_NOT_SUPPORT; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); return miscdeviceProxy_->TurnOff(lightId); } @@ -170,7 +172,10 @@ void LightClient::ProcessDeathObserver(wptr object) { CALL_LOG_ENTER; (void)object; - miscdeviceProxy_ = nullptr; + { + std::lock_guard clientLock(clientMutex_); + miscdeviceProxy_ = nullptr; + } auto ret = InitLightClient(); if (ret != ERR_OK) { MISC_HILOGE("InitLightClient failed, ret:%{public}d", ret); diff --git a/frameworks/native/vibrator/src/vibrator_service_client.cpp b/frameworks/native/vibrator/src/vibrator_service_client.cpp index dc0e8d7..5694af5 100644 --- a/frameworks/native/vibrator/src/vibrator_service_client.cpp +++ b/frameworks/native/vibrator/src/vibrator_service_client.cpp @@ -128,6 +128,7 @@ int32_t VibratorServiceClient::Vibrate(int32_t vibratorId, int32_t timeOut, int3 MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "VibrateTime"); ret = miscdeviceProxy_->Vibrate(vibratorId, timeOut, usage, systemUsage); @@ -148,6 +149,7 @@ int32_t VibratorServiceClient::Vibrate(int32_t vibratorId, const std::string &ef MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "VibrateEffect"); ret = miscdeviceProxy_->PlayVibratorEffect(vibratorId, effect, loopCount, usage, systemUsage); @@ -170,6 +172,7 @@ int32_t VibratorServiceClient::PlayVibratorCustom(int32_t vibratorId, const RawF MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "PlayVibratorCustom"); VibrateParameter vibateParameter = { @@ -193,6 +196,7 @@ int32_t VibratorServiceClient::StopVibrator(int32_t vibratorId, const std::strin MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "StopVibratorByMode"); ret = miscdeviceProxy_->StopVibrator(vibratorId, mode); @@ -211,6 +215,7 @@ int32_t VibratorServiceClient::StopVibrator(int32_t vibratorId) MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "StopVibratorAll"); ret = miscdeviceProxy_->StopVibrator(vibratorId); @@ -224,6 +229,11 @@ int32_t VibratorServiceClient::StopVibrator(int32_t vibratorId) bool VibratorServiceClient::IsHdHapticSupported() { CALL_LOG_ENTER; + int32_t ret = InitServiceClient(); + if (ret != ERR_OK) { + MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); + return MISC_NATIVE_GET_SERVICE_ERR; + } return capacity_.isSupportHdHaptic; } @@ -235,6 +245,7 @@ int32_t VibratorServiceClient::IsSupportEffect(const std::string &effect, bool & MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "VibrateEffect"); ret = miscdeviceProxy_->IsSupportEffect(effect, state); @@ -249,7 +260,10 @@ void VibratorServiceClient::ProcessDeathObserver(const wptr &obje { CALL_LOG_ENTER; (void)object; - miscdeviceProxy_ = nullptr; + { + std::lock_guard clientLock(clientMutex_); + miscdeviceProxy_ = nullptr; + } int32_t ret = InitServiceClient(); if (ret != ERR_OK) { MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); @@ -324,6 +338,7 @@ int32_t VibratorServiceClient::GetDelayTime(int32_t &delayTime) MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "GetDelayTime"); ret = miscdeviceProxy_->GetDelayTime(delayTime); @@ -343,7 +358,6 @@ int32_t VibratorServiceClient::PlayPattern(const VibratorPattern &pattern, int32 MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } - CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "PlayPattern"); VibratePattern vibratePattern = {}; vibratePattern.startTime = pattern.time; @@ -377,6 +391,8 @@ int32_t VibratorServiceClient::PlayPattern(const VibratorPattern &pattern, int32 .intensity = parameter.intensity, .frequency = parameter.frequency }; + std::lock_guard clientLock(clientMutex_); + CHKPR(miscdeviceProxy_, ERROR); ret = miscdeviceProxy_->PlayPattern(vibratePattern, usage, systemUsage, vibateParameter); FinishTrace(HITRACE_TAG_SENSORS); if (ret != ERR_OK) { @@ -477,6 +493,7 @@ int32_t VibratorServiceClient::PlayPrimitiveEffect(int32_t vibratorId, const std MISC_HILOGE("InitServiceClient failed, ret:%{public}d", ret); return MISC_NATIVE_GET_SERVICE_ERR; } + std::lock_guard clientLock(clientMutex_); CHKPR(miscdeviceProxy_, ERROR); StartTrace(HITRACE_TAG_SENSORS, "PlayPrimitiveEffect"); ret = miscdeviceProxy_->PlayPrimitiveEffect(vibratorId, effect, intensity, usage, systemUsage, count); diff --git a/interfaces/inner_api/vibrator/vibrator_agent_type.h b/interfaces/inner_api/vibrator/vibrator_agent_type.h index 53a1634..36cf12b 100644 --- a/interfaces/inner_api/vibrator/vibrator_agent_type.h +++ b/interfaces/inner_api/vibrator/vibrator_agent_type.h @@ -25,84 +25,84 @@ extern "C" { * * @since 1 */ -inline const char *VIBRATOR_TYPE_CLOCK_TIMER = "haptic.clock.timer"; +const char *VIBRATOR_TYPE_CLOCK_TIMER = "haptic.clock.timer"; /** * @brief Describes the vibration effect of the vibrator when authentication fails. * * @since 11 */ -inline const char *VIBRATOR_TYPE_FAIL = "haptic.fail"; +const char *VIBRATOR_TYPE_FAIL = "haptic.notice.fail"; /** * @brief Describes the vibration effect of the vibrator when charging. * * @since 11 */ -inline const char *VIBRATOR_TYPE_CHARGING = "haptic.charging"; +const char *VIBRATOR_TYPE_CHARGING = "haptic.calib.charge"; /** * @brief Describes the vibration effect of the vibrator when long pressed. * * @since 11 */ -inline const char *VIBRATOR_TYPE_LONG_PRESS_LIGHT = "haptic.long_press.light"; +const char *VIBRATOR_TYPE_LONG_PRESS_LIGHT = "haptic.long_press_light"; /** * @brief Describes the vibration effect of the vibrator when long pressed. * * @since 11 */ -inline const char *VIBRATOR_TYPE_LONG_PRESS_MEDIUM = "haptic.long_press.medium"; +const char *VIBRATOR_TYPE_LONG_PRESS_MEDIUM = "haptic.long_press_medium"; /** * @brief Describes the vibration effect of the vibrator when long pressed. * * @since 11 */ -inline const char *VIBRATOR_TYPE_LONG_PRESS_HEAVY = "haptic.long_press.heavy"; +const char *VIBRATOR_TYPE_LONG_PRESS_HEAVY = "haptic.long_press_medium"; /** * @brief Describes the vibration effect of the vibrator when slide. * * @since 11 */ -inline const char *VIBRATOR_TYPE_SLIDE_LIGHT = "haptic.slide.light"; +const char *VIBRATOR_TYPE_SLIDE_LIGHT = "haptic.slide"; /** * @brief Describes the vibration effect of the vibrator when the threshold is reached. * * @since 11 */ -inline const char *VIBRATOR_TYPE_THRESHOID = "haptic.threshold"; +const char *VIBRATOR_TYPE_THRESHOID = "haptic.common.threshold"; /** * @brief Describes the hard vibration effect of the vibrator. * * @since 12 */ -inline const char *VIBRATOR_TYPE_HARD = "haptic.effect.hard"; +const char *VIBRATOR_TYPE_HARD = "haptic.effect.hard"; /** * @brief Describes the soft vibration effect of the vibrator. * * @since 12 */ -inline const char *VIBRATOR_TYPE_SOFT = "haptic.effect.soft"; +const char *VIBRATOR_TYPE_SOFT = "haptic.effect.soft"; /** * @brief Describes the sharp vibration effect of the vibrator. * * @since 12 */ -inline const char *VIBRATOR_TYPE_SHARP = "haptic.effect.sharp"; +const char *VIBRATOR_TYPE_SHARP = "haptic.effect.sharp"; /** * @brief Describes the vibration effect of the vibrator when slide. * * @since 12 */ -inline const char *VIBRATOR_TYPE_SLIDE = "haptic.slide"; +const char *VIBRATOR_TYPE_SLIDE = "haptic.slide"; /** * @brief Enumerates vibration usages. diff --git a/services/miscdevice_service/BUILD.gn b/services/miscdevice_service/BUILD.gn index 1a84a55..7d17385 100644 --- a/services/miscdevice_service/BUILD.gn +++ b/services/miscdevice_service/BUILD.gn @@ -153,6 +153,7 @@ ohos_static_library("libmiscdevice_service_static") { "access_token:libaccesstoken_sdk", "access_token:libprivacy_sdk", "access_token:libtokenid_sdk", + "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", "cJSON:cjson", "c_utils:utils", diff --git a/services/miscdevice_service/haptic_matcher/include/custom_vibration_matcher.h b/services/miscdevice_service/haptic_matcher/include/custom_vibration_matcher.h index be4898e..59fe5ec 100644 --- a/services/miscdevice_service/haptic_matcher/include/custom_vibration_matcher.h +++ b/services/miscdevice_service/haptic_matcher/include/custom_vibration_matcher.h @@ -16,6 +16,7 @@ #ifndef CUSTOM_VIBRATION_MATCHER_H #define CUSTOM_VIBRATION_MATCHER_H +#include #include #include #include @@ -27,24 +28,29 @@ namespace OHOS { namespace Sensors { class CustomVibrationMatcher { public: - CustomVibrationMatcher() = default; ~CustomVibrationMatcher() = default; + static CustomVibrationMatcher &GetInstance(); int32_t TransformTime(const VibratePackage &package, std::vector &compositeEffects); int32_t TransformEffect(const VibratePackage &package, std::vector &compositeEffects); private: + DISALLOW_COPY_AND_MOVE(CustomVibrationMatcher); + CustomVibrationMatcher(); static int32_t Interpolation(int32_t x1, int32_t x2, int32_t y1, int32_t y2, int32_t x); VibratePattern MixedWaveProcess(const VibratePackage &package); void PreProcessEvent(VibrateEvent &event); std::vector MergeCurve(const std::vector &curveLeft, const std::vector &curveRight); + void NormalizedWaveInfo(); void ProcessContinuousEvent(const VibrateEvent &event, int32_t &preStartTime, int32_t &preDuration, std::vector &compositeEffects); void ProcessContinuousEventSlice(const VibrateSlice &slice, int32_t &preStartTime, int32_t &preDuration, std::vector &compositeEffects); void ProcessTransientEvent(const VibrateEvent &event, int32_t &preStartTime, int32_t &preDuration, std::vector &compositeEffects); + std::vector hdfWaveInfos_; + std::map> waveInfos_; }; -} // namespace Sensors -} // namespace OHOS +} // namespace Sensors +} // namespace OHOS #endif // CUSTOM_VIBRATION_MATCHER_H diff --git a/services/miscdevice_service/haptic_matcher/src/custom_vibration_matcher.cpp b/services/miscdevice_service/haptic_matcher/src/custom_vibration_matcher.cpp index b24eddc..6b044bd 100644 --- a/services/miscdevice_service/haptic_matcher/src/custom_vibration_matcher.cpp +++ b/services/miscdevice_service/haptic_matcher/src/custom_vibration_matcher.cpp @@ -16,9 +16,9 @@ #include "custom_vibration_matcher.h" #include -#include #include "sensors_errors.h" +#include "vibrator_hdi_connection.h" #undef LOG_TAG #define LOG_TAG "CustomVibrationMatcher" @@ -26,34 +26,83 @@ namespace OHOS { namespace Sensors { namespace { -const std::map> TRANSIENT_VIBRATION_INFOS = { - {0x28, {0x4d, 0x4d, 0x0b}}, {0x2c, {0x2a, 0x64, 0x07}}, {0x30, {0x44, 0x52, 0x16}}, - {0x3c, {0x45, 0x34, 0x0a}}, {0x40, {0x2e, 0x43, 0x0a}}, {0x48, {0x51, 0x52, 0x0a}}, - {0x4c, {0x3a, 0x0c, 0x0f}}, {0x50, {0x64, 0x20, 0x14}}, {0x54, {0x55, 0x34, 0x1c}}, - {0x5c, {0x32, 0x0c, 0x13}}, {0x60, {0x12, 0x07, 0x0a}} -}; constexpr int32_t FREQUENCY_MIN = 0; constexpr int32_t FREQUENCY_MAX = 100; constexpr int32_t INTENSITY_MIN = 0; constexpr int32_t INTENSITY_MAX = 100; -constexpr int32_t TRANSIENT_GRADE_NUM = 4; +constexpr int32_t VIBRATOR_DELAY = 20; constexpr int32_t CONTINUOUS_GRADE_NUM = 8; constexpr int32_t CONTINUOUS_GRADE_MASK = 100; constexpr float ROUND_OFFSET = 0.5; -constexpr float TRANSIENT_GRADE_GAIN = 0.25; constexpr float CONTINUOUS_GRADE_SCALE = 100. / 8; constexpr float INTENSITY_WEIGHT = 0.5; constexpr float FREQUENCY_WEIGHT = 0.5; constexpr float WEIGHT_SUM_INIT = 100; -constexpr int32_t STOP_WAVEFORM = 0; constexpr int32_t EFFECT_ID_BOUNDARY = 1000; constexpr int32_t DURATION_MAX = 1600; constexpr float CURVE_INTENSITY_SCALE = 100.00; +const float EPSILON = 0.00001; constexpr int32_t SLICE_STEP = 50; constexpr int32_t CONTINUOUS_VIBRATION_DURATION_MIN = 15; constexpr int32_t INDEX_MIN_RESTRICT = 1; +constexpr int32_t WAVE_INFO_DIMENSION = 3; } // namespace +CustomVibrationMatcher::CustomVibrationMatcher() +{ + auto &VibratorDevice = VibratorHdiConnection::GetInstance(); + int32_t ret = VibratorDevice.GetAllWaveInfo(hdfWaveInfos_); + if (ret != ERR_OK) { + MISC_HILOGE("GetAllWaveInfo failed infoSize:%{public}zu", hdfWaveInfos_.size()); + return; + } + if (!hdfWaveInfos_.empty()) { + for (const auto &info : hdfWaveInfos_) { + MISC_HILOGI("waveId:%{public}d, intensity:%{public}f, frequency:%{public}f, duration:%{public}d", + info.waveId, info.intensity, info.frequency, info.duration); + } + NormalizedWaveInfo(); + } +} + +void CustomVibrationMatcher::NormalizedWaveInfo() +{ + CALL_LOG_ENTER; + auto firstIt = hdfWaveInfos_.begin(); + float maxIntensity = firstIt->intensity; + float minFrequency = firstIt->frequency; + float maxFrequency = firstIt->frequency; + for (const auto &info : hdfWaveInfos_) { + maxIntensity = (maxIntensity > info.intensity) ? maxIntensity : info.intensity; + minFrequency = (minFrequency < info.frequency) ? minFrequency : info.frequency; + maxFrequency = (maxFrequency > info.frequency) ? maxFrequency : info.frequency; + } + + float intensityEqualValue = maxIntensity / INTENSITY_MAX; + float frequencyEqualValue = (maxFrequency - minFrequency) / FREQUENCY_MAX; + if ((std::abs(intensityEqualValue) <= EPSILON) || (std::abs(frequencyEqualValue) <= EPSILON)) { + MISC_HILOGE("The equal value of intensity or frequency is zero"); + return; + } + for (const auto &info : hdfWaveInfos_) { + std::vector normalizedValue; + normalizedValue.push_back(static_cast(info.intensity / intensityEqualValue)); + normalizedValue.push_back(static_cast((info.frequency - minFrequency) / frequencyEqualValue)); + normalizedValue.push_back(info.duration); + waveInfos_[info.waveId] = normalizedValue; + } + for (const auto &info : waveInfos_) { + MISC_HILOGI("waveId:%{public}d, intensity:%{public}d, frequency:%{public}d, duration:%{public}d", + info.first, info.second[0], info.second[1], info.second[WAVE_INFO_DIMENSION - 1]); + } +} + +CustomVibrationMatcher &CustomVibrationMatcher::GetInstance() +{ + static CustomVibrationMatcher instance; + return instance; +} + int32_t CustomVibrationMatcher::TransformTime(const VibratePackage &package, std::vector &compositeEffects) { @@ -68,6 +117,8 @@ int32_t CustomVibrationMatcher::TransformTime(const VibratePackage &package, TimeEffect timeEffect; timeEffect.delay = event.time - frontTime; timeEffect.time = event.duration; + timeEffect.intensity = event.intensity; + timeEffect.frequency = event.frequency; CompositeEffect compositeEffect; compositeEffect.timeEffect = timeEffect; compositeEffects.push_back(compositeEffect); @@ -76,6 +127,8 @@ int32_t CustomVibrationMatcher::TransformTime(const VibratePackage &package, TimeEffect timeEffect; timeEffect.delay = flatPattern.events.back().duration; timeEffect.time = 0; + timeEffect.intensity = 0; + timeEffect.frequency = 0; CompositeEffect compositeEffect; compositeEffect.timeEffect = timeEffect; compositeEffects.push_back(compositeEffect); @@ -94,8 +147,16 @@ int32_t CustomVibrationMatcher::TransformEffect(const VibratePackage &package, int32_t preStartTime = flatPattern.startTime; int32_t preDuration = 0; for (const VibrateEvent &event : flatPattern.events) { - if (event.tag == EVENT_TAG_CONTINUOUS) { - ProcessContinuousEvent(event, preStartTime, preDuration, compositeEffects); + if ((event.tag == EVENT_TAG_CONTINUOUS) || waveInfos_.empty()) { + PrimitiveEffect primitiveEffect; + primitiveEffect.delay = event.time - preStartTime; + primitiveEffect.effectId = event.duration; + primitiveEffect.intensity = event.intensity; + CompositeEffect compositeEffect; + compositeEffect.primitiveEffect = primitiveEffect; + compositeEffects.push_back(compositeEffect); + preStartTime = event.time; + preDuration = event.duration; } else if (event.tag == EVENT_TAG_TRANSIENT) { ProcessTransientEvent(event, preStartTime, preDuration, compositeEffects); } else { @@ -105,7 +166,8 @@ int32_t CustomVibrationMatcher::TransformEffect(const VibratePackage &package, } PrimitiveEffect primitiveEffect; primitiveEffect.delay = preDuration; - primitiveEffect.effectId = STOP_WAVEFORM; + primitiveEffect.effectId = 0; + primitiveEffect.intensity = 0; CompositeEffect compositeEffect; compositeEffect.primitiveEffect = primitiveEffect; compositeEffects.push_back(compositeEffect); @@ -120,9 +182,12 @@ VibratePattern CustomVibrationMatcher::MixedWaveProcess(const VibratePackage &pa for (VibrateEvent event : pattern.events) { event.time += pattern.startTime; PreProcessEvent(event); - if ((outputEvents.empty()) || - (event.time >= (outputEvents.back().time + outputEvents.back().duration)) || - (outputEvents.back().tag == EVENT_TAG_TRANSIENT)) { + if ((outputEvents.empty()) || (outputEvents.back().tag == EVENT_TAG_TRANSIENT)) { + outputEvents.emplace_back(event); + } else if ((event.time >= (outputEvents.back().time + outputEvents.back().duration))) { + int32_t diffTime = event.time - outputEvents.back().time - outputEvents.back().duration; + outputEvents.back().duration += ((diffTime < VIBRATOR_DELAY) ? (diffTime - VIBRATOR_DELAY) : 0); + outputEvents.back().duration = std::max(outputEvents.back().duration, 0); outputEvents.emplace_back(event); } else { VibrateEvent &lastEvent = outputEvents.back(); @@ -317,22 +382,21 @@ void CustomVibrationMatcher::ProcessTransientEvent(const VibrateEvent &event, in { int32_t matchId = 0; float minWeightSum = WEIGHT_SUM_INIT; - for (const auto &transientInfo : TRANSIENT_VIBRATION_INFOS) { + for (const auto &transientInfo : waveInfos_) { int32_t id = transientInfo.first; const std::vector &info = transientInfo.second; + float intensityDistance = std::abs(event.intensity - info[0]); float frequencyDistance = std::abs(event.frequency - info[1]); - for (int32_t j = 0; j < TRANSIENT_GRADE_NUM; ++j) { - float intensityDistance = std::abs(event.intensity - info[0] * (1 - j * TRANSIENT_GRADE_GAIN)); - float weightSum = INTENSITY_WEIGHT * intensityDistance + FREQUENCY_WEIGHT * frequencyDistance; - if (weightSum < minWeightSum) { - minWeightSum = weightSum; - matchId = id + j; - } + float weightSum = INTENSITY_WEIGHT * intensityDistance + FREQUENCY_WEIGHT * frequencyDistance; + if (weightSum < minWeightSum) { + minWeightSum = weightSum; + matchId = id; } } PrimitiveEffect primitiveEffect; primitiveEffect.delay = event.time - preStartTime; - primitiveEffect.effectId = matchId; + primitiveEffect.effectId = (-matchId); + primitiveEffect.intensity = INTENSITY_MAX; CompositeEffect compositeEffect; compositeEffect.primitiveEffect = primitiveEffect; compositeEffects.push_back(compositeEffect); diff --git a/services/miscdevice_service/hdi_connection/adapter/include/compatible_connection.h b/services/miscdevice_service/hdi_connection/adapter/include/compatible_connection.h index da6e5b5..ad11c9f 100644 --- a/services/miscdevice_service/hdi_connection/adapter/include/compatible_connection.h +++ b/services/miscdevice_service/hdi_connection/adapter/include/compatible_connection.h @@ -41,6 +41,7 @@ public: int32_t PlayPattern(const VibratePattern &pattern) override; int32_t DestroyHdiConnection() override; int32_t StartByIntensity(const std::string &effect, int32_t intensity) override; + int32_t GetAllWaveInfo(std::vector &waveInfos) override; private: DISALLOW_COPY_AND_MOVE(CompatibleConnection); diff --git a/services/miscdevice_service/hdi_connection/adapter/include/hdi_connection.h b/services/miscdevice_service/hdi_connection/adapter/include/hdi_connection.h index abdfc72..196488c 100644 --- a/services/miscdevice_service/hdi_connection/adapter/include/hdi_connection.h +++ b/services/miscdevice_service/hdi_connection/adapter/include/hdi_connection.h @@ -43,6 +43,7 @@ public: int32_t DestroyHdiConnection() override; void ProcessDeathObserver(const wptr &object); int32_t StartByIntensity(const std::string &effect, int32_t intensity) override; + int32_t GetAllWaveInfo(std::vector &waveInfos) override; private: DISALLOW_COPY_AND_MOVE(HdiConnection); diff --git a/services/miscdevice_service/hdi_connection/adapter/src/compatible_connection.cpp b/services/miscdevice_service/hdi_connection/adapter/src/compatible_connection.cpp index 3ad529f..cea5c47 100644 --- a/services/miscdevice_service/hdi_connection/adapter/src/compatible_connection.cpp +++ b/services/miscdevice_service/hdi_connection/adapter/src/compatible_connection.cpp @@ -206,5 +206,10 @@ int32_t CompatibleConnection::StartByIntensity(const std::string &effect, int32_ g_vibrateMode = HDF_VIBRATOR_MODE_PRESET; return ERR_OK; } + +int32_t CompatibleConnection::GetAllWaveInfo(std::vector &waveInfos) +{ + return ERR_OK; +} } // namespace Sensors } // namespace OHOS diff --git a/services/miscdevice_service/hdi_connection/adapter/src/hdi_connection.cpp b/services/miscdevice_service/hdi_connection/adapter/src/hdi_connection.cpp index 6c5ee47..47b286e 100644 --- a/services/miscdevice_service/hdi_connection/adapter/src/hdi_connection.cpp +++ b/services/miscdevice_service/hdi_connection/adapter/src/hdi_connection.cpp @@ -276,5 +276,16 @@ int32_t HdiConnection::StartByIntensity(const std::string &effect, int32_t inten } return ERR_OK; } + +int32_t HdiConnection::GetAllWaveInfo(std::vector &waveInfos) +{ + CHKPR(vibratorInterface_, ERR_INVALID_VALUE); + int32_t vibratorId = 1; + int32_t ret = vibratorInterface_->GetAllWaveInfo(vibratorId, waveInfos); + if (ret != ERR_OK) { + MISC_HILOGE("GetAllWaveInfo failed"); + } + return ret; +} } // namespace Sensors } // namespace OHOS diff --git a/services/miscdevice_service/hdi_connection/interface/include/i_vibrator_hdi_connection.h b/services/miscdevice_service/hdi_connection/interface/include/i_vibrator_hdi_connection.h index 09ad7a0..340826d 100644 --- a/services/miscdevice_service/hdi_connection/interface/include/i_vibrator_hdi_connection.h +++ b/services/miscdevice_service/hdi_connection/interface/include/i_vibrator_hdi_connection.h @@ -22,6 +22,7 @@ #include #include "v1_2/vibrator_types.h" +#include "v1_3/ivibrator_interface.h" #include "vibrator_infos.h" namespace OHOS { @@ -37,6 +38,7 @@ using OHOS::HDI::Vibrator::V1_2::HapticCapacity; using OHOS::HDI::Vibrator::V1_2::HapticPaket; using OHOS::HDI::Vibrator::V1_2::HapticEvent; using OHOS::HDI::Vibrator::V1_1::HdfEffectInfo; +using OHOS::HDI::Vibrator::V1_3::HdfWaveInformation; #ifdef OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM using OHOS::HDI::Vibrator::V1_1::HdfEffectType; using OHOS::HDI::Vibrator::V1_1::HDF_EFFECT_TYPE_TIME; @@ -65,6 +67,7 @@ public: virtual int32_t GetVibratorCapacity(VibratorCapacity &capacity) = 0; virtual int32_t PlayPattern(const VibratePattern &pattern) = 0; virtual int32_t StartByIntensity(const std::string &effect, int32_t intensity) = 0; + virtual int32_t GetAllWaveInfo(std::vector &waveInfos) = 0; private: DISALLOW_COPY_AND_MOVE(IVibratorHdiConnection); diff --git a/services/miscdevice_service/hdi_connection/interface/include/vibrator_hdi_connection.h b/services/miscdevice_service/hdi_connection/interface/include/vibrator_hdi_connection.h index 938fb26..07418b9 100644 --- a/services/miscdevice_service/hdi_connection/interface/include/vibrator_hdi_connection.h +++ b/services/miscdevice_service/hdi_connection/interface/include/vibrator_hdi_connection.h @@ -40,6 +40,7 @@ public: int32_t GetVibratorCapacity(VibratorCapacity &capacity) override; int32_t PlayPattern(const VibratePattern &pattern) override; int32_t StartByIntensity(const std::string &effect, int32_t intensity) override; + int32_t GetAllWaveInfo(std::vector &waveInfos) override; private: DISALLOW_COPY_AND_MOVE(VibratorHdiConnection); diff --git a/services/miscdevice_service/hdi_connection/interface/src/vibrator_hdi_connection.cpp b/services/miscdevice_service/hdi_connection/interface/src/vibrator_hdi_connection.cpp index 015189e..5552fd2 100644 --- a/services/miscdevice_service/hdi_connection/interface/src/vibrator_hdi_connection.cpp +++ b/services/miscdevice_service/hdi_connection/interface/src/vibrator_hdi_connection.cpp @@ -159,5 +159,11 @@ int32_t VibratorHdiConnection::StartByIntensity(const std::string &effect, int32 } return ERR_OK; } + +int32_t VibratorHdiConnection::GetAllWaveInfo(std::vector &waveInfos) +{ + CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR); + return iVibratorHdiConnection_->GetAllWaveInfo(waveInfos); +} } // namespace Sensors } // namespace OHOS diff --git a/services/miscdevice_service/include/miscdevice_service.h b/services/miscdevice_service/include/miscdevice_service.h index d30d3f9..07b0b54 100644 --- a/services/miscdevice_service/include/miscdevice_service.h +++ b/services/miscdevice_service/include/miscdevice_service.h @@ -119,6 +119,7 @@ private: std::mutex clientDeathObserverMutex_; std::map, int32_t> clientPidMap_; std::mutex clientPidMapMutex_; + std::mutex miscDeviceIdMapMutex_; }; } // namespace Sensors } // namespace OHOS diff --git a/services/miscdevice_service/src/miscdevice_service.cpp b/services/miscdevice_service/src/miscdevice_service.cpp index dd8a369..9a5510f 100644 --- a/services/miscdevice_service/src/miscdevice_service.cpp +++ b/services/miscdevice_service/src/miscdevice_service.cpp @@ -188,6 +188,7 @@ void MiscdeviceService::OnStart() MISC_HILOGE("Publish MiscdeviceService failed"); return; } + std::lock_guard lock(miscDeviceIdMapMutex_); auto ret = miscDeviceIdMap_.insert(std::make_pair(MiscdeviceDeviceId::LED, lightExist_)); if (!ret.second) { MISC_HILOGI("Light exist in miscDeviceIdMap_"); @@ -218,6 +219,7 @@ void MiscdeviceService::OnStartFuzz() if (!InitLightInterface()) { MISC_HILOGE("InitLightInterface failed"); } + std::lock_guard lock(miscDeviceIdMapMutex_); auto ret = miscDeviceIdMap_.insert(std::make_pair(MiscdeviceDeviceId::LED, lightExist_)); if (!ret.second) { MISC_HILOGI("Light exist in miscDeviceIdMap_"); diff --git a/services/miscdevice_service/src/vibration_priority_manager.cpp b/services/miscdevice_service/src/vibration_priority_manager.cpp index 29e6fd8..5aa98db 100644 --- a/services/miscdevice_service/src/vibration_priority_manager.cpp +++ b/services/miscdevice_service/src/vibration_priority_manager.cpp @@ -248,10 +248,6 @@ bool VibrationPriorityManager::ShouldIgnoreInputMethod(const VibrateInfo &vibrat VibrateStatus VibrationPriorityManager::ShouldIgnoreVibrate(const VibrateInfo &vibrateInfo, std::shared_ptr vibratorThread) { - if (vibratorThread == nullptr) { - MISC_HILOGD("There is no vibration, it can vibrate"); - return VIBRATION; - } UpdateStatus(); if (!IsSystemCalling() || vibrateInfo.systemUsage == false) { if ((vibrateInfo.usage == USAGE_ALARM || vibrateInfo.usage == USAGE_RING diff --git a/services/miscdevice_service/src/vibrator_thread.cpp b/services/miscdevice_service/src/vibrator_thread.cpp index 3ea67a2..6e45393 100644 --- a/services/miscdevice_service/src/vibrator_thread.cpp +++ b/services/miscdevice_service/src/vibrator_thread.cpp @@ -129,7 +129,7 @@ int32_t VibratorThread::PlayCustomByHdHptic(const VibrateInfo &info) int32_t VibratorThread::PlayCustomByCompositeEffect(const VibrateInfo &info) { - CustomVibrationMatcher matcher; + auto &matcher = CustomVibrationMatcher::GetInstance(); HdfCompositeEffect hdfCompositeEffect; if (info.mode == VIBRATE_CUSTOM_COMPOSITE_EFFECT) { hdfCompositeEffect.type = HDF_EFFECT_TYPE_PRIMITIVE; diff --git a/test/fuzztest/service/vibratoronremoterequest_fuzzer/vibratoronremoterequest_fuzzer.cpp b/test/fuzztest/service/vibratoronremoterequest_fuzzer/vibratoronremoterequest_fuzzer.cpp index cd1e955..eb7ecc0 100644 --- a/test/fuzztest/service/vibratoronremoterequest_fuzzer/vibratoronremoterequest_fuzzer.cpp +++ b/test/fuzztest/service/vibratoronremoterequest_fuzzer/vibratoronremoterequest_fuzzer.cpp @@ -39,7 +39,7 @@ constexpr uint32_t IPC_CODE_COUNT = 8; #endif // OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM auto g_service = MiscdeviceDelayedSpSingleton::GetInstance(); const std::u16string VIBRATOR_INTERFACE_TOKEN = u"IMiscdeviceService"; -} // namespace +} void SetUpTestCase() { @@ -84,8 +84,8 @@ bool OnRemoteRequestFuzzTest(const uint8_t *data, size_t size) g_service->OnRemoteRequest(code, datas, reply, option); return true; } -} // namespace Sensors -} // namespace OHOS +} // namespace Sensors +} // namespace OHOS extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { diff --git a/test/unittest/light/light_agent_test.cpp b/test/unittest/light/light_agent_test.cpp index 06b01ee..ae000fc 100644 --- a/test/unittest/light/light_agent_test.cpp +++ b/test/unittest/light/light_agent_test.cpp @@ -55,7 +55,7 @@ HapInfoParams g_infoManagerTestInfoParms = { .instIndex = 0, .appIDDesc = "LightAgentTest" }; -} // namespace +} // namespace class LightAgentTest : public testing::Test { public: @@ -85,10 +85,9 @@ void LightAgentTest::SetUpTestCase() void LightAgentTest::TearDownTestCase() { + ASSERT_NE(0, tokenID_); int32_t ret = AccessTokenKit::DeleteToken(tokenID_); - if (tokenID_ != 0) { - ASSERT_EQ(RET_SUCCESS, ret); - } + ASSERT_EQ(RET_SUCCESS, ret); } /** @@ -346,5 +345,5 @@ HWTEST_F(LightAgentTest, StartLightTest_011, TestSize.Level1) int32_t ret = TurnOff(g_invalidLightId); ASSERT_EQ(ret, -1); } -} // namespace Sensors -} // namespace OHOS +} // namespace Sensors +} // namespace OHOS diff --git a/test/unittest/vibrator/capi/BUILD.gn b/test/unittest/vibrator/capi/BUILD.gn index fcc5883..259e7ac 100644 --- a/test/unittest/vibrator/capi/BUILD.gn +++ b/test/unittest/vibrator/capi/BUILD.gn @@ -22,6 +22,7 @@ ohos_unittest("NativeVibratorTest") { module_out_path = module_output_path include_dirs = [ + "$SUBSYSTEM_DIR/interfaces/inner_api/vibrator", "$SUBSYSTEM_DIR/interfaces/kits/c", "$SUBSYSTEM_DIR/utils/common/include", ] @@ -41,8 +42,7 @@ ohos_unittest("NativeVibratorTest") { deps = [ "$SUBSYSTEM_DIR/frameworks/capi:ohvibrator", - "//third_party/googletest:gmock_main", - "//third_party/googletest:gtest_main", + "$SUBSYSTEM_DIR/frameworks/native/vibrator:vibrator_target", ] resource_config_file = "$SUBSYSTEM_DIR/test/unittest/vibrator/capi/resource/ohos_test.xml" diff --git a/test/unittest/vibrator/capi/vibrator_test.cpp b/test/unittest/vibrator/capi/vibrator_test.cpp index 34d6aea..436431d 100644 --- a/test/unittest/vibrator/capi/vibrator_test.cpp +++ b/test/unittest/vibrator/capi/vibrator_test.cpp @@ -24,6 +24,7 @@ #include "sensors_errors.h" #include "vibrator.h" +#include "vibrator_agent.h" #undef LOG_TAG #define LOG_TAG "NativeVibratorTest" @@ -59,7 +60,7 @@ HapInfoParams infoManagerTestInfoParms_ = { .instIndex = 0, .appIDDesc = "NativeVibratorTest" }; -} // namespace +} // namespace class NativeVibratorTest : public testing::Test { public: @@ -131,6 +132,16 @@ HWTEST_F(NativeVibratorTest, OH_Vibrator_PlayVibrationTest_002, TestSize.Level1) ASSERT_EQ(ret, RET_SUCCESS); } +HWTEST_F(NativeVibratorTest, OH_Vibrator_PlayVibrationTest_003, TestSize.Level1) +{ + CALL_LOG_ENTER; + Vibrator_Attribute vibrateAttribute = { + .usage = VIBRATOR_USAGE_MAX + }; + int32_t ret = OH_Vibrator_PlayVibration(g_duration, vibrateAttribute); + ASSERT_EQ(ret, PARAMETER_ERROR); +} + HWTEST_F(NativeVibratorTest, OH_Vibrator_CancelTest_002, TestSize.Level1) { CALL_LOG_ENTER; @@ -301,5 +312,118 @@ HWTEST_F(NativeVibratorTest, PlayVibratorCustom_019, TestSize.Level1) ASSERT_NE(ret, 0); } } -} // namespace Sensors -} // namespace OHOS +HWTEST_F(NativeVibratorTest, OH_Vibrator_PlayVibrationCustom_020, TestSize.Level1) +{ + CALL_LOG_ENTER; + FileDescriptor fileDescriptor("/data/test/vibrator/coin_drop.json"); + MISC_HILOGD("Test fd:%{public}d", fileDescriptor.fd); + struct stat64 statbuf = { 0 }; + if (fstat64(fileDescriptor.fd, &statbuf) == 0) { + Vibrator_FileDescription fileDescription = { + .fd = fileDescriptor.fd, + .offset = 0, + .length = statbuf.st_size + }; + Vibrator_Attribute vibrateAttribute = { + .usage = VIBRATOR_USAGE_MAX + }; + int32_t ret = OH_Vibrator_PlayVibrationCustom(fileDescription, vibrateAttribute); + bool isSuccess = ((ret != 0) || (ret == UNSUPPORTED)); + ASSERT_TRUE(isSuccess); + } + std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP)); + OH_Vibrator_Cancel(); +} + +HWTEST_F(NativeVibratorTest, OH_Vibrator_PlayVibrationCustom_021, TestSize.Level1) +{ + CALL_LOG_ENTER; + FileDescriptor fileDescriptor("/data/test/vibrator/coin_drop.json"); + MISC_HILOGD("Test fd:%{public}d", fileDescriptor.fd); + struct stat64 statbuf = { 0 }; + if (fstat64(fileDescriptor.fd, &statbuf) == 0) { + Vibrator_FileDescription fileDescription = { + .fd = -1, + .offset = 0, + .length = statbuf.st_size + }; + Vibrator_Attribute vibrateAttribute = { + .usage = VIBRATOR_USAGE_RING + }; + int32_t ret = OH_Vibrator_PlayVibrationCustom(fileDescription, vibrateAttribute); + bool isSuccess = ((ret != 0) || (ret == UNSUPPORTED)); + ASSERT_TRUE(isSuccess); + } + std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP)); + OH_Vibrator_Cancel(); +} + +HWTEST_F(NativeVibratorTest, OH_Vibrator_PlayVibrationCustom_022, TestSize.Level1) +{ + CALL_LOG_ENTER; + FileDescriptor fileDescriptor("/data/test/vibrator/coin_drop.json"); + MISC_HILOGD("Test fd:%{public}d", fileDescriptor.fd); + struct stat64 statbuf = { 0 }; + if (fstat64(fileDescriptor.fd, &statbuf) == 0) { + Vibrator_FileDescription fileDescription = { + .fd = fileDescriptor.fd, + .offset = -1, + .length = statbuf.st_size + }; + Vibrator_Attribute vibrateAttribute = { + .usage = VIBRATOR_USAGE_RING + }; + int32_t ret = OH_Vibrator_PlayVibrationCustom(fileDescription, vibrateAttribute); + bool isSuccess = ((ret != 0) || (ret == UNSUPPORTED)); + ASSERT_TRUE(isSuccess); + } + std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP)); + OH_Vibrator_Cancel(); +} +HWTEST_F(NativeVibratorTest, OH_Vibrator_PlayVibrationCustom_023, TestSize.Level1) +{ + CALL_LOG_ENTER; + FileDescriptor fileDescriptor("/data/test/vibrator/coin_drop.json"); + MISC_HILOGD("Test fd:%{public}d", fileDescriptor.fd); + struct stat64 statbuf = { 0 }; + if (fstat64(fileDescriptor.fd, &statbuf) == 0) { + Vibrator_FileDescription fileDescription = { + .fd = fileDescriptor.fd, + .offset = 0, + .length = -1 + }; + Vibrator_Attribute vibrateAttribute = { + .usage = VIBRATOR_USAGE_RING + }; + int32_t ret = OH_Vibrator_PlayVibrationCustom(fileDescription, vibrateAttribute); + bool isSuccess = ((ret != 0) || (ret == UNSUPPORTED)); + ASSERT_TRUE(isSuccess); + } + std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP)); + OH_Vibrator_Cancel(); +} + +HWTEST_F(NativeVibratorTest, OH_Vibrator_PlayVibrationCustom_024, TestSize.Level1) +{ + CALL_LOG_ENTER; + FileDescriptor fileDescriptor("/data/test/vibrator/coin_drop.json"); + MISC_HILOGD("Test fd:%{public}d", fileDescriptor.fd); + struct stat64 statbuf = { 0 }; + if (fstat64(fileDescriptor.fd, &statbuf) == 0) { + Vibrator_FileDescription fileDescription = { + .fd = fileDescriptor.fd, + .offset = 0, + .length = statbuf.st_size + }; + Vibrator_Attribute vibrateAttribute = { + .usage = VIBRATOR_USAGE_MAX + }; + int32_t ret = OH_Vibrator_PlayVibrationCustom(fileDescription, vibrateAttribute); + bool isSuccess = ((ret != 0) || (ret == UNSUPPORTED)); + ASSERT_TRUE(isSuccess); + } + std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP)); + OH_Vibrator_Cancel(); +} +} // namespace Sensors +} // namespace OHOS diff --git a/test/unittest/vibrator/js/ExampleJsunit.test.js b/test/unittest/vibrator/js/ExampleJsunit.test.js index 3c59f01..2eb23f1 100644 --- a/test/unittest/vibrator/js/ExampleJsunit.test.js +++ b/test/unittest/vibrator/js/ExampleJsunit.test.js @@ -1212,7 +1212,7 @@ describe("VibratorJsTest", function () { if (ret) { vibrator.startVibration({ type: "preset", - effectId: "haptic.effect.soft", + effectId: "haptic.effect.hard", count: 1, intensity: 50, }, { diff --git a/test/unittest/vibrator/native/resource/json_file/Jet_N2O.he b/test/unittest/vibrator/native/resource/json_file/Jet_N2O.he new file mode 100644 index 0000000..88b9918 --- /dev/null +++ b/test/unittest/vibrator/native/resource/json_file/Jet_N2O.he @@ -0,0 +1,201 @@ +{ + "Metadata": { + "Version": 2, + "Created": "2022-04-27", + "Description": "Exported from RichTap Creator Pro" + }, + "PatternList": [ + { + "AbsoluteTime": 13, + "Pattern": [ + { + "Event": { + "Type": "continuous", + "Duration": 2468, + "RelativeTime": 0, + "Parameters": { + "Intensity": 97, + "Frequency": 34, + "Curve": [ + { + "Time": 0, + "Intensity": 0, + "Frequency": -7 + }, + { + "Time": 42, + "Intensity": 1, + "Frequency": -6 + }, + { + "Time": 128, + "Intensity": 0.94, + "Frequency": -4 + }, + { + "Time": 217, + "Intensity": 0.63, + "Frequency": -14 + }, + { + "Time": 763, + "Intensity": 0.53, + "Frequency": -10 + }, + { + "Time": 1125, + "Intensity": 0.48, + "Frequency": -14 + }, + { + "Time": 1503, + "Intensity": 0.42, + "Frequency": -14 + }, + { + "Time": 1858, + "Intensity": 0.39, + "Frequency": -14 + }, + { + "Time": 2295, + "Intensity": 0.34, + "Frequency": -17 + }, + { + "Time": 2448, + "Intensity": 0.21, + "Frequency": -14 + }, + { + "Time": 2468, + "Intensity": 0, + "Frequency": -21 + } + ] + }, + "Index": 0 + } + }, + { + "Event": { + "Type": "continuous", + "Duration": 2468, + "RelativeTime": 2, + "Parameters": { + "Intensity": 97, + "Frequency": 27, + "Curve": [ + { + "Time": 0, + "Intensity": 0, + "Frequency": -7 + }, + { + "Time": 47, + "Intensity": 0.9, + "Frequency": -6 + }, + { + "Time": 128, + "Intensity": 0.84, + "Frequency": -4 + }, + { + "Time": 143, + "Intensity": 0.59, + "Frequency": -14 + }, + { + "Time": 183, + "Intensity": 0.16, + "Frequency": -10 + }, + { + "Time": 1081, + "Intensity": 0.1, + "Frequency": -14 + }, + { + "Time": 1464, + "Intensity": 0.07, + "Frequency": -14 + }, + { + "Time": 1826, + "Intensity": 0.04, + "Frequency": -14 + }, + { + "Time": 2056, + "Intensity": 0.04, + "Frequency": -17 + }, + { + "Time": 2391, + "Intensity": 0.03, + "Frequency": -14 + }, + { + "Time": 2468, + "Intensity": 0, + "Frequency": -21 + } + ] + }, + "Index": 0 + } + } + ] + }, + { + "AbsoluteTime": 2486, + "Pattern": [ + { + "Event": { + "Type": "continuous", + "Duration": 570, + "RelativeTime": 0, + "Parameters": { + "Intensity": 80, + "Frequency": 90, + "Curve": [ + { + "Time": 0, + "Intensity": 0, + "Frequency": -100 + }, + { + "Time": 127, + "Intensity": 0.09, + "Frequency": -80 + }, + { + "Time": 263, + "Intensity": 0.97, + "Frequency": -34 + }, + { + "Time": 300, + "Intensity": 0.92, + "Frequency": -34 + }, + { + "Time": 464, + "Intensity": 0.16, + "Frequency": -60 + }, + { + "Time": 570, + "Intensity": 0, + "Frequency": -88 + } + ] + }, + "Index": 0 + } + } + ] + } + ] +} \ No newline at end of file diff --git a/test/unittest/vibrator/native/resource/json_file/Racing_Start.he b/test/unittest/vibrator/native/resource/json_file/Racing_Start.he new file mode 100644 index 0000000..5179aea --- /dev/null +++ b/test/unittest/vibrator/native/resource/json_file/Racing_Start.he @@ -0,0 +1,64 @@ +{ + "Metadata": { + "Version": 2, + "Created": "2022-04-15", + "Description": "Exported from RichTap Creator Editor InnerTest" + }, + "PatternList": [ + { + "AbsoluteTime": 19, + "Pattern": [ + { + "Event": { + "Type": "continuous", + "RelativeTime": 0, + "Duration": 69, + "Parameters": { + "Intensity": 71, + "Frequency": 90, + "Curve": [ + { + "Time": 0, + "Intensity": 0, + "Frequency": -100 + }, + { + "Time": 13, + "Intensity": 0.09, + "Frequency": -83 + }, + { + "Time": 27, + "Intensity": 1, + "Frequency": -36 + }, + { + "Time": 68, + "Intensity": 0.1, + "Frequency": -58 + }, + { + "Time": 69, + "Intensity": 0, + "Frequency": -88 + } + ] + }, + "Index": 0 + } + }, + { + "Event": { + "Type": "transient", + "RelativeTime": 73, + "Parameters": { + "Intensity": 100, + "Frequency": 61 + }, + "Index": 0 + } + } + ] + } + ] +} \ No newline at end of file diff --git a/test/unittest/vibrator/native/resource/ohos_test.xml b/test/unittest/vibrator/native/resource/ohos_test.xml index 90f5ed5..0b8ff38 100644 --- a/test/unittest/vibrator/native/resource/ohos_test.xml +++ b/test/unittest/vibrator/native/resource/ohos_test.xml @@ -28,6 +28,8 @@