1c29fa5a6Sopenharmony_ci/* 2c29fa5a6Sopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License. 5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at 6c29fa5a6Sopenharmony_ci * 7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c29fa5a6Sopenharmony_ci * 9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and 13c29fa5a6Sopenharmony_ci * limitations under the License. 14c29fa5a6Sopenharmony_ci */ 15c29fa5a6Sopenharmony_ci 16c29fa5a6Sopenharmony_ci#include "virtual_touch_screen.h" 17c29fa5a6Sopenharmony_ci 18c29fa5a6Sopenharmony_ci#include "linux/input-event-codes.h" 19c29fa5a6Sopenharmony_ci#include "linux/uinput.h" 20c29fa5a6Sopenharmony_ci 21c29fa5a6Sopenharmony_cinamespace OHOS { 22c29fa5a6Sopenharmony_cinamespace MMI { 23c29fa5a6Sopenharmony_cinamespace { 24c29fa5a6Sopenharmony_ciconstexpr int32_t ABS_MAX_PRESSURE = 100; 25c29fa5a6Sopenharmony_ciconstexpr int32_t ABS_MT_MIN_ORIENTATION = -90; 26c29fa5a6Sopenharmony_ciconstexpr int32_t ABS_MT_MAX_ORIENTATION = 90; 27c29fa5a6Sopenharmony_ciconstexpr int32_t ABS_MT_BLOB_MAX_ID = 10; 28c29fa5a6Sopenharmony_ciconstexpr int32_t ABS_MT_TRACKING_MAX_ID = 9; 29c29fa5a6Sopenharmony_ciconstexpr int32_t ABS_MT_MAX_PRESSURE = 100; 30c29fa5a6Sopenharmony_ci} // namespace 31c29fa5a6Sopenharmony_ci 32c29fa5a6Sopenharmony_ciconst std::vector<uint32_t> &VirtualTouchScreen::GetEventTypes() const 33c29fa5a6Sopenharmony_ci{ 34c29fa5a6Sopenharmony_ci static const std::vector<uint32_t> evtTypes {EV_ABS, EV_KEY, EV_SYN}; 35c29fa5a6Sopenharmony_ci return evtTypes; 36c29fa5a6Sopenharmony_ci} 37c29fa5a6Sopenharmony_ci 38c29fa5a6Sopenharmony_ciconst std::vector<uint32_t> &VirtualTouchScreen::GetKeys() const 39c29fa5a6Sopenharmony_ci{ 40c29fa5a6Sopenharmony_ci static const std::vector<uint32_t> keys {BTN_TOUCH}; 41c29fa5a6Sopenharmony_ci return keys; 42c29fa5a6Sopenharmony_ci} 43c29fa5a6Sopenharmony_ci 44c29fa5a6Sopenharmony_ciconst std::vector<uint32_t> &VirtualTouchScreen::GetProperties() const 45c29fa5a6Sopenharmony_ci{ 46c29fa5a6Sopenharmony_ci static const std::vector<uint32_t> properties {INPUT_PROP_DIRECT}; 47c29fa5a6Sopenharmony_ci return properties; 48c29fa5a6Sopenharmony_ci} 49c29fa5a6Sopenharmony_ci 50c29fa5a6Sopenharmony_ciconst std::vector<uint32_t> &VirtualTouchScreen::GetAbs() const 51c29fa5a6Sopenharmony_ci{ 52c29fa5a6Sopenharmony_ci static const std::vector<uint32_t> abs { 53c29fa5a6Sopenharmony_ci ABS_X, 54c29fa5a6Sopenharmony_ci ABS_Y, 55c29fa5a6Sopenharmony_ci ABS_PRESSURE, 56c29fa5a6Sopenharmony_ci ABS_MT_TOUCH_MAJOR, 57c29fa5a6Sopenharmony_ci ABS_MT_TOUCH_MINOR, 58c29fa5a6Sopenharmony_ci ABS_MT_ORIENTATION, 59c29fa5a6Sopenharmony_ci ABS_MT_POSITION_X, 60c29fa5a6Sopenharmony_ci ABS_MT_POSITION_Y, 61c29fa5a6Sopenharmony_ci ABS_MT_BLOB_ID, 62c29fa5a6Sopenharmony_ci ABS_MT_TRACKING_ID, 63c29fa5a6Sopenharmony_ci ABS_MT_PRESSURE 64c29fa5a6Sopenharmony_ci }; 65c29fa5a6Sopenharmony_ci return abs; 66c29fa5a6Sopenharmony_ci} 67c29fa5a6Sopenharmony_ci 68c29fa5a6Sopenharmony_ciVirtualTouchScreen::VirtualTouchScreen(const uint32_t maxX, const uint32_t maxY) 69c29fa5a6Sopenharmony_ci : VirtualDevice("VSoC touchscreen", 0x6006) 70c29fa5a6Sopenharmony_ci{ 71c29fa5a6Sopenharmony_ci dev_.absmin[ABS_X] = 0; 72c29fa5a6Sopenharmony_ci dev_.absmax[ABS_X] = maxX; 73c29fa5a6Sopenharmony_ci dev_.absmin[ABS_Y] = 0; 74c29fa5a6Sopenharmony_ci dev_.absmax[ABS_Y] = maxY; 75c29fa5a6Sopenharmony_ci 76c29fa5a6Sopenharmony_ci dev_.absmin[ABS_PRESSURE] = 0; 77c29fa5a6Sopenharmony_ci dev_.absmax[ABS_PRESSURE] = ABS_MAX_PRESSURE; 78c29fa5a6Sopenharmony_ci 79c29fa5a6Sopenharmony_ci dev_.absmin[ABS_MT_TOUCH_MAJOR] = 0; 80c29fa5a6Sopenharmony_ci dev_.absmax[ABS_MT_TOUCH_MAJOR] = 1; 81c29fa5a6Sopenharmony_ci dev_.absmin[ABS_MT_TOUCH_MINOR] = 0; 82c29fa5a6Sopenharmony_ci dev_.absmax[ABS_MT_TOUCH_MINOR] = 1; 83c29fa5a6Sopenharmony_ci 84c29fa5a6Sopenharmony_ci dev_.absmin[ABS_MT_ORIENTATION] = ABS_MT_MIN_ORIENTATION; 85c29fa5a6Sopenharmony_ci dev_.absmax[ABS_MT_ORIENTATION] = ABS_MT_MAX_ORIENTATION; 86c29fa5a6Sopenharmony_ci 87c29fa5a6Sopenharmony_ci dev_.absmin[ABS_MT_POSITION_X] = 0; 88c29fa5a6Sopenharmony_ci dev_.absmax[ABS_MT_POSITION_X] = maxX; 89c29fa5a6Sopenharmony_ci dev_.absmin[ABS_MT_POSITION_Y] = 0; 90c29fa5a6Sopenharmony_ci dev_.absmax[ABS_MT_POSITION_Y] = maxY; 91c29fa5a6Sopenharmony_ci 92c29fa5a6Sopenharmony_ci dev_.absmin[ABS_MT_BLOB_ID] = 0; 93c29fa5a6Sopenharmony_ci dev_.absmax[ABS_MT_BLOB_ID] = ABS_MT_BLOB_MAX_ID; 94c29fa5a6Sopenharmony_ci dev_.absmin[ABS_MT_TRACKING_ID] = 0; 95c29fa5a6Sopenharmony_ci dev_.absmax[ABS_MT_TRACKING_ID] = ABS_MT_TRACKING_MAX_ID; 96c29fa5a6Sopenharmony_ci dev_.absmin[ABS_MT_PRESSURE] = 0; 97c29fa5a6Sopenharmony_ci dev_.absmax[ABS_MT_PRESSURE] = ABS_MT_MAX_PRESSURE; 98c29fa5a6Sopenharmony_ci} 99c29fa5a6Sopenharmony_ci} // namespace MMI 100c29fa5a6Sopenharmony_ci} // namespace OHOS 101