1f857971dSopenharmony_ci/* 2f857971dSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3f857971dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f857971dSopenharmony_ci * you may not use this file except in compliance with the License. 5f857971dSopenharmony_ci * You may obtain a copy of the License at 6f857971dSopenharmony_ci * 7f857971dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f857971dSopenharmony_ci * 9f857971dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f857971dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f857971dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f857971dSopenharmony_ci * See the License for the specific language governing permissions and 13f857971dSopenharmony_ci * limitations under the License. 14f857971dSopenharmony_ci */ 15f857971dSopenharmony_ci 16f857971dSopenharmony_ci#ifndef VIRTUAL_DEVICE_H 17f857971dSopenharmony_ci#define VIRTUAL_DEVICE_H 18f857971dSopenharmony_ci 19f857971dSopenharmony_ci#include <map> 20f857971dSopenharmony_ci#include <memory> 21f857971dSopenharmony_ci#include <vector> 22f857971dSopenharmony_ci#include <memory> 23f857971dSopenharmony_ci 24f857971dSopenharmony_ci#include <linux/input.h> 25f857971dSopenharmony_ci 26f857971dSopenharmony_ci#include "nocopyable.h" 27f857971dSopenharmony_ci 28f857971dSopenharmony_ci#include "v_input_device.h" 29f857971dSopenharmony_ci#include "virtual_device_defines.h" 30f857971dSopenharmony_ci 31f857971dSopenharmony_cinamespace OHOS { 32f857971dSopenharmony_cinamespace Msdp { 33f857971dSopenharmony_cinamespace DeviceStatus { 34f857971dSopenharmony_ciclass VirtualDevice { 35f857971dSopenharmony_cipublic: 36f857971dSopenharmony_ci explicit VirtualDevice(const std::string &node); 37f857971dSopenharmony_ci virtual ~VirtualDevice() = default; 38f857971dSopenharmony_ci DISALLOW_COPY_AND_MOVE(VirtualDevice); 39f857971dSopenharmony_ci 40f857971dSopenharmony_ci bool IsActive() const; 41f857971dSopenharmony_ci bool IsMouse() const; 42f857971dSopenharmony_ci bool IsKeyboard() const; 43f857971dSopenharmony_ci bool IsTouchscreen() const; 44f857971dSopenharmony_ci bool SupportEventType(size_t ev) const; 45f857971dSopenharmony_ci bool SupportKey(size_t key) const; 46f857971dSopenharmony_ci bool SupportAbs(size_t abs) const; 47f857971dSopenharmony_ci bool SupportRel(size_t rel) const; 48f857971dSopenharmony_ci bool SupportMsc(size_t msc) const; 49f857971dSopenharmony_ci bool SupportLed(size_t led) const; 50f857971dSopenharmony_ci bool SupportRep(size_t rep) const; 51f857971dSopenharmony_ci bool SupportProperty(size_t prop) const; 52f857971dSopenharmony_ci bool QueryAbsInfo(size_t abs, struct input_absinfo &absInfo); 53f857971dSopenharmony_ci std::string GetName() const; 54f857971dSopenharmony_ci std::string GetPhys() const; 55f857971dSopenharmony_ci struct input_id GetInputId() const; 56f857971dSopenharmony_ci void SetName(const std::string &name); 57f857971dSopenharmony_ci int32_t SendEvent(uint16_t type, uint16_t code, int32_t value); 58f857971dSopenharmony_ci 59f857971dSopenharmony_ciprotected: 60f857971dSopenharmony_ci static bool FindDeviceNode(const std::string &name, std::string &node); 61f857971dSopenharmony_ci void SetMinimumInterval(int32_t interval); 62f857971dSopenharmony_ci 63f857971dSopenharmony_ciprivate: 64f857971dSopenharmony_ci static void Execute(std::vector<std::string> &results); 65f857971dSopenharmony_ci static void GetInputDeviceNodes(std::map<std::string, std::string> &nodes); 66f857971dSopenharmony_ci 67f857971dSopenharmony_ciprivate: 68f857971dSopenharmony_ci int32_t minimumInterval_ { 0 }; 69f857971dSopenharmony_ci std::unique_ptr<VInputDevice> inputDev_ { nullptr }; 70f857971dSopenharmony_ci std::string name_; 71f857971dSopenharmony_ci}; 72f857971dSopenharmony_ci 73f857971dSopenharmony_ciinline bool VirtualDevice::IsActive() const 74f857971dSopenharmony_ci{ 75f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->IsActive()); 76f857971dSopenharmony_ci} 77f857971dSopenharmony_ci 78f857971dSopenharmony_ciinline bool VirtualDevice::IsMouse() const 79f857971dSopenharmony_ci{ 80f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->IsMouse()); 81f857971dSopenharmony_ci} 82f857971dSopenharmony_ci 83f857971dSopenharmony_ciinline bool VirtualDevice::IsKeyboard() const 84f857971dSopenharmony_ci{ 85f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->IsKeyboard()); 86f857971dSopenharmony_ci} 87f857971dSopenharmony_ci 88f857971dSopenharmony_ciinline bool VirtualDevice::IsTouchscreen() const 89f857971dSopenharmony_ci{ 90f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->IsTouchscreen()); 91f857971dSopenharmony_ci} 92f857971dSopenharmony_ci 93f857971dSopenharmony_ciinline bool VirtualDevice::SupportEventType(size_t ev) const 94f857971dSopenharmony_ci{ 95f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->SupportEventType(ev)); 96f857971dSopenharmony_ci} 97f857971dSopenharmony_ci 98f857971dSopenharmony_ciinline bool VirtualDevice::SupportKey(size_t key) const 99f857971dSopenharmony_ci{ 100f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->SupportKey(key)); 101f857971dSopenharmony_ci} 102f857971dSopenharmony_ci 103f857971dSopenharmony_ciinline bool VirtualDevice::SupportAbs(size_t abs) const 104f857971dSopenharmony_ci{ 105f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->SupportAbs(abs)); 106f857971dSopenharmony_ci} 107f857971dSopenharmony_ci 108f857971dSopenharmony_ciinline bool VirtualDevice::SupportRel(size_t rel) const 109f857971dSopenharmony_ci{ 110f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->SupportRel(rel)); 111f857971dSopenharmony_ci} 112f857971dSopenharmony_ci 113f857971dSopenharmony_ciinline bool VirtualDevice::SupportProperty(size_t prop) const 114f857971dSopenharmony_ci{ 115f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->SupportProperty(prop)); 116f857971dSopenharmony_ci} 117f857971dSopenharmony_ci 118f857971dSopenharmony_ciinline bool VirtualDevice::SupportMsc(size_t msc) const 119f857971dSopenharmony_ci{ 120f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->SupportMsc(msc)); 121f857971dSopenharmony_ci} 122f857971dSopenharmony_ci 123f857971dSopenharmony_ciinline bool VirtualDevice::SupportLed(size_t led) const 124f857971dSopenharmony_ci{ 125f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->SupportLed(led)); 126f857971dSopenharmony_ci} 127f857971dSopenharmony_ci 128f857971dSopenharmony_ciinline bool VirtualDevice::SupportRep(size_t rep) const 129f857971dSopenharmony_ci{ 130f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->SupportRep(rep)); 131f857971dSopenharmony_ci} 132f857971dSopenharmony_ci 133f857971dSopenharmony_ciinline bool VirtualDevice::QueryAbsInfo(size_t abs, struct input_absinfo &absInfo) 134f857971dSopenharmony_ci{ 135f857971dSopenharmony_ci return ((inputDev_ != nullptr) && inputDev_->QueryAbsInfo(abs, absInfo)); 136f857971dSopenharmony_ci} 137f857971dSopenharmony_ci 138f857971dSopenharmony_ciinline std::string VirtualDevice::GetPhys() const 139f857971dSopenharmony_ci{ 140f857971dSopenharmony_ci if (inputDev_ != nullptr) { 141f857971dSopenharmony_ci return inputDev_->GetPhys(); 142f857971dSopenharmony_ci } 143f857971dSopenharmony_ci return {}; 144f857971dSopenharmony_ci} 145f857971dSopenharmony_ci 146f857971dSopenharmony_ciinline struct input_id VirtualDevice::GetInputId() const 147f857971dSopenharmony_ci{ 148f857971dSopenharmony_ci if (inputDev_ != nullptr) { 149f857971dSopenharmony_ci return inputDev_->GetInputId(); 150f857971dSopenharmony_ci } 151f857971dSopenharmony_ci return {}; 152f857971dSopenharmony_ci} 153f857971dSopenharmony_ci 154f857971dSopenharmony_ciinline void VirtualDevice::SetName(const std::string &name) 155f857971dSopenharmony_ci{ 156f857971dSopenharmony_ci name_ = name; 157f857971dSopenharmony_ci} 158f857971dSopenharmony_ci} // namespace DeviceStatus 159f857971dSopenharmony_ci} // namespace Msdp 160f857971dSopenharmony_ci} // namespace OHOS 161f857971dSopenharmony_ci#endif // VIRTUAL_DEVICE_H