12d4d9a4dSopenharmony_ci/* 22d4d9a4dSopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 32d4d9a4dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 42d4d9a4dSopenharmony_ci * you may not use this file except in compliance with the License. 52d4d9a4dSopenharmony_ci * You may obtain a copy of the License at 62d4d9a4dSopenharmony_ci * 72d4d9a4dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 82d4d9a4dSopenharmony_ci * 92d4d9a4dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 102d4d9a4dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 112d4d9a4dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122d4d9a4dSopenharmony_ci * See the License for the specific language governing permissions and 132d4d9a4dSopenharmony_ci * limitations under the License. 142d4d9a4dSopenharmony_ci */ 152d4d9a4dSopenharmony_ci 162d4d9a4dSopenharmony_ci#ifndef DISTRIBUTED_INPUT_HANDLER_H 172d4d9a4dSopenharmony_ci#define DISTRIBUTED_INPUT_HANDLER_H 182d4d9a4dSopenharmony_ci 192d4d9a4dSopenharmony_ci#include <functional> 202d4d9a4dSopenharmony_ci#include <map> 212d4d9a4dSopenharmony_ci#include <mutex> 222d4d9a4dSopenharmony_ci#include <string> 232d4d9a4dSopenharmony_ci 242d4d9a4dSopenharmony_ci#include <sys/epoll.h> 252d4d9a4dSopenharmony_ci#include <linux/input.h> 262d4d9a4dSopenharmony_ci 272d4d9a4dSopenharmony_ci#include "ihardware_handler.h" 282d4d9a4dSopenharmony_ci#include "single_instance.h" 292d4d9a4dSopenharmony_ci 302d4d9a4dSopenharmony_ci#include "constants_dinput.h" 312d4d9a4dSopenharmony_ci#include "input_hub.h" 322d4d9a4dSopenharmony_ci 332d4d9a4dSopenharmony_ci#ifndef API_EXPORT 342d4d9a4dSopenharmony_ci#define API_EXPORT __attribute__((visibility("default"))) 352d4d9a4dSopenharmony_ci#endif 362d4d9a4dSopenharmony_ci 372d4d9a4dSopenharmony_cinamespace OHOS { 382d4d9a4dSopenharmony_cinamespace DistributedHardware { 392d4d9a4dSopenharmony_cinamespace DistributedInput { 402d4d9a4dSopenharmony_ciclass DistributedInputHandler : public IHardwareHandler { 412d4d9a4dSopenharmony_ciDECLARE_SINGLE_INSTANCE_BASE(DistributedInputHandler); 422d4d9a4dSopenharmony_cipublic: 432d4d9a4dSopenharmony_ci API_EXPORT int32_t Initialize() override; 442d4d9a4dSopenharmony_ci API_EXPORT virtual std::vector<DHItem> QueryMeta() override; 452d4d9a4dSopenharmony_ci API_EXPORT virtual std::vector<DHItem> Query() override; 462d4d9a4dSopenharmony_ci API_EXPORT virtual std::map<std::string, std::string> QueryExtraInfo() override; 472d4d9a4dSopenharmony_ci API_EXPORT bool IsSupportPlugin() override; 482d4d9a4dSopenharmony_ci API_EXPORT void RegisterPluginListener(std::shared_ptr<PluginListener> listener) override; 492d4d9a4dSopenharmony_ci API_EXPORT void UnRegisterPluginListener() override; 502d4d9a4dSopenharmony_ci 512d4d9a4dSopenharmony_ci API_EXPORT void FindDevicesInfoByType(const uint32_t inputTypes, std::map<int32_t, std::string> &datas); 522d4d9a4dSopenharmony_ci API_EXPORT void FindDevicesInfoByDhId(std::vector<std::string> dhidsVec, std::map<int32_t, std::string> &datas); 532d4d9a4dSopenharmony_ciprivate: 542d4d9a4dSopenharmony_ci DistributedInputHandler(); 552d4d9a4dSopenharmony_ci ~DistributedInputHandler(); 562d4d9a4dSopenharmony_ci void StructTransJson(const InputDevice &pBuf, std::string &strDescriptor); 572d4d9a4dSopenharmony_ci std::shared_ptr<PluginListener> m_listener; 582d4d9a4dSopenharmony_ci bool InitCollectEventsThread(); 592d4d9a4dSopenharmony_ci void NotifyHardWare(int iCnt); 602d4d9a4dSopenharmony_ci 612d4d9a4dSopenharmony_ci pthread_t collectThreadID_; 622d4d9a4dSopenharmony_ci bool isCollectingEvents_; 632d4d9a4dSopenharmony_ci bool isStartCollectEventThread_; 642d4d9a4dSopenharmony_ci static void *CollectEventsThread(void *param); 652d4d9a4dSopenharmony_ci void StartInputMonitorDeviceThread(); 662d4d9a4dSopenharmony_ci void StopInputMonitorDeviceThread(); 672d4d9a4dSopenharmony_ci 682d4d9a4dSopenharmony_ci // The event queue. 692d4d9a4dSopenharmony_ci static const int inputDeviceBufferSize_ = 32; 702d4d9a4dSopenharmony_ci InputDeviceEvent mEventBuffer_[inputDeviceBufferSize_] = {}; 712d4d9a4dSopenharmony_ci std::mutex operationMutex_; 722d4d9a4dSopenharmony_ci std::unique_ptr<InputHub> inputHub_; 732d4d9a4dSopenharmony_ci}; 742d4d9a4dSopenharmony_ci 752d4d9a4dSopenharmony_ci#ifdef __cplusplus 762d4d9a4dSopenharmony_ciextern "C" { 772d4d9a4dSopenharmony_ci#endif 782d4d9a4dSopenharmony_ciAPI_EXPORT IHardwareHandler* GetHardwareHandler(); 792d4d9a4dSopenharmony_ci#ifdef __cplusplus 802d4d9a4dSopenharmony_ci} 812d4d9a4dSopenharmony_ci#endif 822d4d9a4dSopenharmony_ci} // namespace DistributedInput 832d4d9a4dSopenharmony_ci} // namespace DistributedHardware 842d4d9a4dSopenharmony_ci} // namespace OHOS 852d4d9a4dSopenharmony_ci 862d4d9a4dSopenharmony_ci#endif // DISTRIBUTED_INPUT_HANDLER_H 87