158ec469eSopenharmony_ci/* 258ec469eSopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 358ec469eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 458ec469eSopenharmony_ci * you may not use this file except in compliance with the License. 558ec469eSopenharmony_ci * You may obtain a copy of the License at 658ec469eSopenharmony_ci * 758ec469eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 858ec469eSopenharmony_ci * 958ec469eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1058ec469eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1158ec469eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1258ec469eSopenharmony_ci * See the License for the specific language governing permissions and 1358ec469eSopenharmony_ci * limitations under the License. 1458ec469eSopenharmony_ci */ 1558ec469eSopenharmony_ci 1658ec469eSopenharmony_ci#ifndef MISCDEVICE_SERVICE_H 1758ec469eSopenharmony_ci#define MISCDEVICE_SERVICE_H 1858ec469eSopenharmony_ci 1958ec469eSopenharmony_ci#include <memory> 2058ec469eSopenharmony_ci#include <mutex> 2158ec469eSopenharmony_ci#include <set> 2258ec469eSopenharmony_ci#include <string> 2358ec469eSopenharmony_ci#include <unordered_map> 2458ec469eSopenharmony_ci#include <vector> 2558ec469eSopenharmony_ci 2658ec469eSopenharmony_ci#include "accesstoken_kit.h" 2758ec469eSopenharmony_ci#include "common_event_manager.h" 2858ec469eSopenharmony_ci#include "nocopyable.h" 2958ec469eSopenharmony_ci#include "system_ability.h" 3058ec469eSopenharmony_ci#include "thread_ex.h" 3158ec469eSopenharmony_ci#include "want.h" 3258ec469eSopenharmony_ci 3358ec469eSopenharmony_ci#include "file_utils.h" 3458ec469eSopenharmony_ci#include "json_parser.h" 3558ec469eSopenharmony_ci#include "light_hdi_connection.h" 3658ec469eSopenharmony_ci#include "miscdevice_common.h" 3758ec469eSopenharmony_ci#include "miscdevice_common_event_subscriber.h" 3858ec469eSopenharmony_ci#include "miscdevice_delayed_sp_singleton.h" 3958ec469eSopenharmony_ci#include "miscdevice_dump.h" 4058ec469eSopenharmony_ci#include "miscdevice_service_stub.h" 4158ec469eSopenharmony_ci#include "vibrator_hdi_connection.h" 4258ec469eSopenharmony_ci#include "vibrator_infos.h" 4358ec469eSopenharmony_ci#include "vibrator_thread.h" 4458ec469eSopenharmony_ci 4558ec469eSopenharmony_cinamespace OHOS { 4658ec469eSopenharmony_cinamespace Sensors { 4758ec469eSopenharmony_ciusing namespace Security::AccessToken; 4858ec469eSopenharmony_cienum class MiscdeviceServiceState { 4958ec469eSopenharmony_ci STATE_STOPPED, 5058ec469eSopenharmony_ci STATE_RUNNING, 5158ec469eSopenharmony_ci}; 5258ec469eSopenharmony_ci 5358ec469eSopenharmony_ciclass MiscdeviceService : public SystemAbility, public MiscdeviceServiceStub { 5458ec469eSopenharmony_ci DECLARE_SYSTEM_ABILITY(MiscdeviceService) 5558ec469eSopenharmony_ci MISCDEVICE_DECLARE_DELAYED_SP_SINGLETON(MiscdeviceService); 5658ec469eSopenharmony_ci 5758ec469eSopenharmony_cipublic: 5858ec469eSopenharmony_ci void OnDump() override; 5958ec469eSopenharmony_ci void OnStart() override; 6058ec469eSopenharmony_ci void OnStop() override; 6158ec469eSopenharmony_ci void OnStartFuzz(); 6258ec469eSopenharmony_ci bool IsValid(int32_t lightId); 6358ec469eSopenharmony_ci bool IsLightAnimationValid(const LightAnimationIPC &animation); 6458ec469eSopenharmony_ci int32_t Dump(int32_t fd, const std::vector<std::u16string> &args) override; 6558ec469eSopenharmony_ci void ProcessDeathObserver(const wptr<IRemoteObject> &object); 6658ec469eSopenharmony_ci virtual int32_t Vibrate(int32_t vibratorId, int32_t timeOut, int32_t usage, bool systemUsage) override; 6758ec469eSopenharmony_ci virtual int32_t PlayVibratorEffect(int32_t vibratorId, const std::string &effect, 6858ec469eSopenharmony_ci int32_t loopCount, int32_t usage, bool systemUsage) override; 6958ec469eSopenharmony_ci#ifdef OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM 7058ec469eSopenharmony_ci virtual int32_t PlayVibratorCustom(int32_t vibratorId, const RawFileDescriptor &rawFd, int32_t usage, 7158ec469eSopenharmony_ci bool systemUsage, const VibrateParameter ¶meter) override; 7258ec469eSopenharmony_ci#endif // OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM 7358ec469eSopenharmony_ci virtual int32_t StopVibrator(int32_t vibratorId) override; 7458ec469eSopenharmony_ci virtual int32_t StopVibrator(int32_t vibratorId, const std::string &mode) override; 7558ec469eSopenharmony_ci virtual int32_t IsSupportEffect(const std::string &effect, bool &state) override; 7658ec469eSopenharmony_ci virtual std::vector<LightInfoIPC> GetLightList() override; 7758ec469eSopenharmony_ci virtual int32_t TurnOn(int32_t lightId, const LightColor &color, const LightAnimationIPC &animation) override; 7858ec469eSopenharmony_ci virtual int32_t TurnOff(int32_t lightId) override; 7958ec469eSopenharmony_ci virtual int32_t PlayPattern(const VibratePattern &pattern, int32_t usage, 8058ec469eSopenharmony_ci bool systemUsage, const VibrateParameter ¶meter) override; 8158ec469eSopenharmony_ci virtual int32_t GetDelayTime(int32_t &delayTime) override; 8258ec469eSopenharmony_ci virtual int32_t TransferClientRemoteObject(const sptr<IRemoteObject> &vibratorServiceClient) override; 8358ec469eSopenharmony_ci virtual int32_t PlayPrimitiveEffect(int32_t vibratorId, const std::string &effect, int32_t intensity, 8458ec469eSopenharmony_ci int32_t usage, bool systemUsage, int32_t count) override; 8558ec469eSopenharmony_ci virtual int32_t GetVibratorCapacity(VibratorCapacity &capacity) override; 8658ec469eSopenharmony_ci 8758ec469eSopenharmony_ciprivate: 8858ec469eSopenharmony_ci DISALLOW_COPY_AND_MOVE(MiscdeviceService); 8958ec469eSopenharmony_ci bool InitInterface(); 9058ec469eSopenharmony_ci bool InitLightInterface(); 9158ec469eSopenharmony_ci std::string GetPackageName(AccessTokenID tokenId); 9258ec469eSopenharmony_ci void StartVibrateThread(VibrateInfo info); 9358ec469eSopenharmony_ci void StopVibrateThread(); 9458ec469eSopenharmony_ci bool ShouldIgnoreVibrate(const VibrateInfo &info); 9558ec469eSopenharmony_ci std::string GetCurrentTime(); 9658ec469eSopenharmony_ci void MergeVibratorParmeters(const VibrateParameter ¶meter, VibratePackage &package); 9758ec469eSopenharmony_ci bool CheckVibratorParmeters(const VibrateParameter ¶meter); 9858ec469eSopenharmony_ci bool InitLightList(); 9958ec469eSopenharmony_ci void RegisterClientDeathRecipient(sptr<IRemoteObject> vibratorServiceClient, int32_t pid); 10058ec469eSopenharmony_ci void UnregisterClientDeathRecipient(sptr<IRemoteObject> vibratorServiceClient); 10158ec469eSopenharmony_ci void SaveClientPid(const sptr<IRemoteObject> &vibratorServiceClient, int32_t pid); 10258ec469eSopenharmony_ci int32_t FindClientPid(const sptr<IRemoteObject> &vibratorServiceClient); 10358ec469eSopenharmony_ci void DestroyClientPid(const sptr<IRemoteObject> &vibratorServiceClient); 10458ec469eSopenharmony_ci void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; 10558ec469eSopenharmony_ci int32_t SubscribeCommonEvent(const std::string &eventName, EventReceiver receiver); 10658ec469eSopenharmony_ci void OnReceiveEvent(const EventFwk::CommonEventData &data); 10758ec469eSopenharmony_ci std::mutex isVibrationPriorityReadyMutex_; 10858ec469eSopenharmony_ci static bool isVibrationPriorityReady_; 10958ec469eSopenharmony_ci VibratorHdiConnection &vibratorHdiConnection_ = VibratorHdiConnection::GetInstance(); 11058ec469eSopenharmony_ci LightHdiConnection &lightHdiConnection_ = LightHdiConnection::GetInstance(); 11158ec469eSopenharmony_ci bool lightExist_; 11258ec469eSopenharmony_ci bool vibratorExist_; 11358ec469eSopenharmony_ci std::vector<LightInfoIPC> lightInfos_; 11458ec469eSopenharmony_ci std::map<MiscdeviceDeviceId, bool> miscDeviceIdMap_; 11558ec469eSopenharmony_ci MiscdeviceServiceState state_; 11658ec469eSopenharmony_ci std::shared_ptr<VibratorThread> vibratorThread_ = nullptr; 11758ec469eSopenharmony_ci std::mutex vibratorThreadMutex_; 11858ec469eSopenharmony_ci sptr<IRemoteObject::DeathRecipient> clientDeathObserver_ = nullptr; 11958ec469eSopenharmony_ci std::mutex clientDeathObserverMutex_; 12058ec469eSopenharmony_ci std::map<sptr<IRemoteObject>, int32_t> clientPidMap_; 12158ec469eSopenharmony_ci std::mutex clientPidMapMutex_; 12258ec469eSopenharmony_ci std::mutex miscDeviceIdMapMutex_; 12358ec469eSopenharmony_ci}; 12458ec469eSopenharmony_ci} // namespace Sensors 12558ec469eSopenharmony_ci} // namespace OHOS 12658ec469eSopenharmony_ci#endif // MISCDEVICE_SERVICE_H 127