diff --git a/frameworks/native/vibrator/include/vibrator_client_proxy.h b/frameworks/native/vibrator/include/vibrator_client_proxy.h index 9ecd289ed15b7e4ff172878ab622b5f56867b3f8..7deb29d8c52b02e25f82285dcd1b0d1f1c7c90c2 100644 --- a/frameworks/native/vibrator/include/vibrator_client_proxy.h +++ b/frameworks/native/vibrator/include/vibrator_client_proxy.h @@ -52,13 +52,16 @@ public: MISC_HILOGE("Failed to write vibratorCnt to parcelable"); return PARAMETER_ERROR; } + if (Remote() == nullptr) { + MISC_HILOGE("Remote is nullptr"); + return ERROR; + } int error = Remote()->SendRequest(TRANS_ID_PLUG_ABILITY, dataParcel, replyParcel, option); if (error != ERR_NONE) { MISC_HILOGE("failed, error code is: %{public}d", error); return PARAMETER_ERROR; } - int result = (error == ERR_NONE) ? replyParcel.ReadInt32() : -1; - return result; + return replyParcel.ReadInt32(); } private: diff --git a/frameworks/native/vibrator/src/vibrator_client_stub.cpp b/frameworks/native/vibrator/src/vibrator_client_stub.cpp index 0811d65adcdcf08c8d6479362e51f2b96e009ef9..c44c4bbd989809fa08473c8ee75c0c5ac5cc067b 100644 --- a/frameworks/native/vibrator/src/vibrator_client_stub.cpp +++ b/frameworks/native/vibrator/src/vibrator_client_stub.cpp @@ -13,8 +13,8 @@ * limitations under the License. */ +#include #include "vibrator_client_stub.h" - #include "message_parcel.h" #include "miscdevice_log.h" @@ -60,19 +60,22 @@ int32_t VibratorClientStub::OnRemoteRequest(uint32_t code, MessageParcel &data, reply.WriteInt32(result); return NO_ERROR; } - default: break; + default: + MISC_HILOGE("Unsupported command, cmd:%{public}u", code); + return PARAMETER_ERROR; } return NO_ERROR; } int64_t VibratorClientStub::GetSystemTime() { - struct timespec ts = { 0, 0 }; - if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { - MISC_HILOGE("clock_gettime failed:%{public}d", errno); - return 0; - } - return (ts.tv_sec * TIME_CONVERSION_UNIT * TIME_CONVERSION_UNIT) + (ts.tv_nsec / TIME_CONVERSION_UNIT); + struct timeval curTime; + curTime.tv_sec = 0; + curTime.tv_usec = 0; + gettimeofday(&curTime, NULL); + int64_t timestamp = static_cast( + curTime.tv_sec * TIME_CONVERSION_UNIT + curTime.tv_usec / TIME_CONVERSION_UNIT); + return timestamp; } int VibratorClientStub::ProcessPlugEvent(int32_t eventCode, int32_t deviceId, int32_t vibratorCnt) @@ -88,7 +91,7 @@ int VibratorClientStub::ProcessPlugEvent(int32_t eventCode, int32_t deviceId, in auto &client = VibratorServiceClient::GetInstance(); bool ret = client.HandleVibratorData(statusEvent); if (!ret) { - MISC_HILOGE("Handle bibrator data failed, ret:%{public}d", ret); + MISC_HILOGE("Handle vibrator data failed, ret:%{public}d", ret); return DEVICE_OPERATION_FAILED; } MISC_HILOGD("Success to process plug event"); 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 206d558dfcef15aa1cd15d781acf6f0adeb21849..e8759fb16f82ec3694173c6ad0352c3ccecdea32 100644 --- a/services/miscdevice_service/haptic_matcher/include/custom_vibration_matcher.h +++ b/services/miscdevice_service/haptic_matcher/include/custom_vibration_matcher.h @@ -26,7 +26,7 @@ class CustomVibrationMatcher { public: ~CustomVibrationMatcher() = default; static CustomVibrationMatcher &GetInstance(); - CustomVibrationMatcher(const VibratorIdentifierIPC& identifier, std::vector wareInfo); + CustomVibrationMatcher(const VibratorIdentifierIPC& identifier, const std::vector &wareInfo); #ifdef HDF_DRIVERS_INTERFACE_VIBRATOR int32_t TransformTime(const VibratePackage &package, std::vector &compositeEffects); int32_t TransformEffect(const VibratePackage &package, std::vector &compositeEffects); 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 9de12ef83f79f19ff691607d819ac3b8fcbbb732..35fb7fb256e78d82a695e4e34308d0fa58cdab53 100644 --- a/services/miscdevice_service/haptic_matcher/src/custom_vibration_matcher.cpp +++ b/services/miscdevice_service/haptic_matcher/src/custom_vibration_matcher.cpp @@ -72,13 +72,13 @@ CustomVibrationMatcher::CustomVibrationMatcher() } CustomVibrationMatcher::CustomVibrationMatcher(const VibratorIdentifierIPC& identifier, - std::vector waveInfo) + const std::vector &waveInfo) { hdfWaveInfos_ = waveInfo; if (!hdfWaveInfos_.empty()) { - for (auto it = hdfWaveInfos_.begin(); it != hdfWaveInfos_.end(); ++it) { + for (const auto &info : hdfWaveInfos_) { MISC_HILOGI("waveId:%{public}d, intensity:%{public}f, frequency:%{public}f, duration:%{public}d", - it->waveId, it->intensity, it->frequency, it->duration); + info.waveId, info.intensity, info.frequency, info.duration); } NormalizedWaveInfo(); } 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 c17c46be9f8c6993b8fc1f97485f12e00353cea4..8c1dfbe7b198c61061a1eca8dd70b57f8b2b1dc7 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 @@ -49,7 +49,7 @@ using OHOS::HDI::Vibrator::V2_0::CompositeEffect; using OHOS::HDI::Vibrator::V2_0::HdfCompositeEffect; #endif // HDF_DRIVERS_INTERFACE_VIBRATOR -using DevicePlugCallback = std::function; +using DevicePlugCallback = std::function; class IVibratorHdiConnection { public: IVibratorHdiConnection() = default; diff --git a/services/miscdevice_service/include/miscdevice_service.h b/services/miscdevice_service/include/miscdevice_service.h index ff54f3bb00f11a2c0c1d926533b3195f9f729bfe..69429e7c89cef9ab3efbbbd63d46e84f32f5123e 100644 --- a/services/miscdevice_service/include/miscdevice_service.h +++ b/services/miscdevice_service/include/miscdevice_service.h @@ -43,7 +43,10 @@ struct VibratorControlInfo { VibratorControlInfo(const std::vector& vibratorIds) : motorCount(static_cast(vibratorIds.size())) { for (int motorId : vibratorIds) { - vibratorThreads[motorId] = std::make_shared(); + auto it = vibratorThreads.find(motorId); + if (it == vibratorThreads.end()) { + vibratorThreads[motorId] = std::make_shared(); + } } } diff --git a/services/miscdevice_service/include/vibration_priority_manager.h b/services/miscdevice_service/include/vibration_priority_manager.h index ebe6f36a1b1b91477de14a7e844aacb65dfed5e0..3f5bd436bf068a272db94ee3283a5b767e207368 100644 --- a/services/miscdevice_service/include/vibration_priority_manager.h +++ b/services/miscdevice_service/include/vibration_priority_manager.h @@ -81,7 +81,7 @@ public: DISALLOW_COPY_AND_MOVE(VibrationPriorityManager); bool Init(); VibrateStatus ShouldIgnoreVibrate(const VibrateInfo &vibrateInfo, - std::shared_ptr vibratorThread, const VibratorIdentifierIPC& identifier); + const std::shared_ptr &vibratorThread, const VibratorIdentifierIPC& identifier); #ifdef OHOS_BUILD_ENABLE_DO_NOT_DISTURB void InitDoNotDisturbData(); void ReregisterCurrentUserObserver(); @@ -92,7 +92,7 @@ public: #endif private: - bool IsCurrentVibrate(std::shared_ptr vibratorThread, + bool IsCurrentVibrate(const std::shared_ptr &vibratorThread, const VibratorIdentifierIPC& identifier) const; bool IsLoopVibrate(const VibrateInfo &vibrateInfo) const; VibrateStatus ShouldIgnoreVibrate(const VibrateInfo &vibrateInfo, VibrateInfo currentVibrateInfo) const; diff --git a/services/miscdevice_service/include/vibrator_thread.h b/services/miscdevice_service/include/vibrator_thread.h index e05e4630656067d7dfbce3c3aa5fccb9abd16cfe..9d0e0816f3e7e0418585876156fd1eb78f1f787e 100644 --- a/services/miscdevice_service/include/vibrator_thread.h +++ b/services/miscdevice_service/include/vibrator_thread.h @@ -45,7 +45,7 @@ private: VibrateInfo copyInfoWithIndexEvents(const VibrateInfo& originalInfo, const VibratorIdentifierIPC& identifier); #ifdef HDF_DRIVERS_INTERFACE_VIBRATOR int32_t PlayCustomByCompositeEffect(const VibrateInfo &info, const VibratorIdentifierIPC& identifier, - std::vector waveInfo); + const std::vector &waveInfo); int32_t PlayCompositeEffect(const VibrateInfo &info, const HdfCompositeEffect &hdfCompositeEffect, const VibratorIdentifierIPC& identifier); #endif // HDF_DRIVERS_INTERFACE_VIBRATOR diff --git a/services/miscdevice_service/src/miscdevice_service.cpp b/services/miscdevice_service/src/miscdevice_service.cpp index e296c31c8fdf9aae61481dad752bffca89bd4d1e..0c70ee8d1299ba4505a618c4901c936a5eac0349 100644 --- a/services/miscdevice_service/src/miscdevice_service.cpp +++ b/services/miscdevice_service/src/miscdevice_service.cpp @@ -410,7 +410,7 @@ int32_t MiscdeviceService::Vibrate(const VibratorIdentifierIPC& identifier, int3 } MISC_HILOGI("Start vibrator, currentTime:%{public}s, package:%{public}s, pid:%{public}d, usage:%{public}d," "deviceId:%{public}d, vibratorId:%{public}d, duration:%{public}d", curVibrateTime.c_str(), - info.packageName.c_str(), info.pid, info.usage, identifier.vibratorId, identifier.deviceId, info.duration); + info.packageName.c_str(), info.pid, info.usage, identifier.deviceId, identifier.vibratorId, info.duration); return NO_ERROR; } @@ -434,7 +434,7 @@ int32_t MiscdeviceService::StopVibratorService(const VibratorIdentifierIPC& iden { std::lock_guard lock(vibratorThreadMutex_); std::vector result = CheckDeviceIdIsValid(identifier); - int ignoreVibrateNum = 0; + size_t ignoreVibrateNum = 0; if (result.empty()) { MISC_HILOGD("No vibration, no need to stop"); return ERROR; @@ -602,7 +602,7 @@ int32_t MiscdeviceService::StopVibratorByMode(const VibratorIdentifierIPC& ident return PERMISSION_DENIED; } std::vector result = CheckDeviceIdIsValid(identifier); - int ignoreVibrateNum = 0; + size_t ignoreVibrateNum = 0; if (result.empty()) { MISC_HILOGD("No vibration, no need to stop"); return ERROR; @@ -1038,28 +1038,24 @@ void MiscdeviceService::SendMsgToClient(const HdfVibratorPlugInfo &info) std::lock_guard lockManage(devicesManageMutex_); if (info.status == 0) { auto it = devicesManageMap_.find(info.deviceId); - if (it == devicesManageMap_.end()) { - MISC_HILOGE("Device %{public}d is not in the map, so no action taken.", info.deviceId); - return; - } - VibratorIdentifierIPC identifier; - for (auto &value : it->second.baseInfo) { - identifier.deviceId = info.deviceId; - identifier.vibratorId = value.vibratorId; - StopVibratorService(identifier); + if (it != devicesManageMap_.end()) { + VibratorIdentifierIPC identifier; + for (auto &value : it->second.baseInfo) { + identifier.deviceId = info.deviceId; + identifier.vibratorId = value.vibratorId; + StopVibratorService(identifier); + } + devicesManageMap_.erase(it); + MISC_HILOGI("Device %{public}d is offline and removed from the map.", info.deviceId); } - devicesManageMap_.erase(it); - MISC_HILOGI("Device %{public}d is offline and removed from the map.", info.deviceId); } else { std::vector vibratorInfo; auto ret = vibratorHdiConnection_.GetVibratorInfo(vibratorInfo); if (ret != NO_ERROR || vibratorInfo.empty()) { MISC_HILOGE("Device not contain the local vibrator"); - return; } if (InsertVibratorInfo(info.deviceId, info.deviceName, vibratorInfo) != NO_ERROR) { MISC_HILOGE("Insert vibrator of device %{public}d fail", info.deviceId); - return; } } @@ -1548,6 +1544,7 @@ int32_t MiscdeviceService::InsertVibratorInfo(int deviceId, const std::string &d for (auto &info : vibratorInfo) { const auto it = devicesManageMap_.find(info.deviceId); if (it != devicesManageMap_.end()) { + MISC_HILOGW("The deviceId already exists in devicesManageMap_, deviceId: %{public}d", info.deviceId); continue; } if (info.deviceId == deviceId) { @@ -1556,8 +1553,8 @@ int32_t MiscdeviceService::InsertVibratorInfo(int deviceId, const std::string &d } } if (infos.empty()) { - MISC_HILOGE("Device %{public}d does not contain any vibrators", deviceId); - return ERROR; + MISC_HILOGW("Device %{public}d does not contain any vibrators", deviceId); + return NO_ERROR; } VibratorIdentifierIPC param; @@ -1591,7 +1588,7 @@ int32_t MiscdeviceService::StartVibrateThreadControl(const VibratorIdentifierIPC return ERROR; } - int32_t ignoreVibrateNum = 0; + size_t ignoreVibrateNum = 0; const std::vector specialModes = { VIBRATE_CUSTOM_HD, VIBRATE_CUSTOM_COMPOSITE_EFFECT, diff --git a/services/miscdevice_service/src/vibration_priority_manager.cpp b/services/miscdevice_service/src/vibration_priority_manager.cpp index 61329c917512044e7811f2c1e5d170e509b40dea..2cada5a0190a75263953a46e28cd7590d4c93120 100644 --- a/services/miscdevice_service/src/vibration_priority_manager.cpp +++ b/services/miscdevice_service/src/vibration_priority_manager.cpp @@ -673,7 +673,7 @@ bool VibrationPriorityManager::ShouldIgnoreInputMethod(const VibrateInfo &vibrat #endif // OHOS_BUILD_ENABLE_VIBRATOR_INPUT_METHOD VibrateStatus VibrationPriorityManager::ShouldIgnoreVibrate(const VibrateInfo &vibrateInfo, - std::shared_ptr vibratorThread, const VibratorIdentifierIPC& identifier) + const std::shared_ptr &vibratorThread, const VibratorIdentifierIPC& identifier) { UpdateStatus(); if (!IsSystemCalling() || vibrateInfo.systemUsage == false) { @@ -722,7 +722,7 @@ VibrateStatus VibrationPriorityManager::ShouldIgnoreVibrate(const VibrateInfo &v return ShouldIgnoreVibrate(vibrateInfo, vibratorThread->GetCurrentVibrateInfo()); } -bool VibrationPriorityManager::IsCurrentVibrate(std::shared_ptr vibratorThread, +bool VibrationPriorityManager::IsCurrentVibrate(const std::shared_ptr &vibratorThread, const VibratorIdentifierIPC& identifier) const { #if defined(OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM) && defined(HDF_DRIVERS_INTERFACE_VIBRATOR) diff --git a/services/miscdevice_service/src/vibrator_thread.cpp b/services/miscdevice_service/src/vibrator_thread.cpp index 8a91118fed681dfe0fa77eb38c1b6a17424dc79e..f98edb2b0014d63fe5297a557f795a1ffe8d1f17 100644 --- a/services/miscdevice_service/src/vibrator_thread.cpp +++ b/services/miscdevice_service/src/vibrator_thread.cpp @@ -199,7 +199,7 @@ VibrateInfo VibratorThread::copyInfoWithIndexEvents(const VibrateInfo& originalI #ifdef HDF_DRIVERS_INTERFACE_VIBRATOR int32_t VibratorThread::PlayCustomByCompositeEffect(const VibrateInfo &info, const VibratorIdentifierIPC& identifier, - std::vector waveInfo) + const std::vector &waveInfo) { CustomVibrationMatcher matcher(identifier, waveInfo); HdfCompositeEffect hdfCompositeEffect; diff --git a/utils/common/src/vibrator_infos.cpp b/utils/common/src/vibrator_infos.cpp index 0355ff4247fd40341af1dd63b9bb6646ca0c43be..9f94e297be2cf24226b4d641c7099fa45baec072 100644 --- a/utils/common/src/vibrator_infos.cpp +++ b/utils/common/src/vibrator_infos.cpp @@ -279,7 +279,7 @@ bool VibratorInfoIPC::Marshalling(Parcel &parcel) const return false; } if (!parcel.WriteString(deviceName)) { - MISC_HILOGE("Write vibratorId failed"); + MISC_HILOGE("Write deviceName failed"); return false; } if (!parcel.WriteBool(isSupportHdHaptic)) { @@ -366,10 +366,12 @@ VibratorIdentifierIPC* VibratorIdentifierIPC::Unmarshalling(Parcel &data) if (!(data.ReadInt32(identifier->deviceId))) { MISC_HILOGE("Read parameter's deviceId or vibratorId failed"); identifier = nullptr; + return identifier; } if (!(data.ReadInt32(identifier->vibratorId))) { MISC_HILOGE("Read parameter's deviceId or vibratorId failed"); identifier = nullptr; + return identifier; } return identifier; } @@ -481,8 +483,8 @@ void CustomHapticInfoIPC::Dump() const retStr = "usage: "+ std::to_string(usage) + " "; retStr += "systemUsage: " + std::to_string(systemUsage) + " "; retStr += "parameter.intensity: " + std::to_string(parameter.intensity) + " "; - retStr += "parameter.intensity: " + std::to_string(parameter.frequency) + " "; - retStr += "parameter.intensity: " + std::to_string(parameter.reserved) + " "; + retStr += "parameter.frequency: " + std::to_string(parameter.frequency) + " "; + retStr += "parameter.reserved: " + std::to_string(parameter.reserved) + " "; MISC_HILOGI("CustomHapticInfoIPC: [%{public}s]", retStr.c_str()); }