1d6aed566Sopenharmony_ci/* 2d6aed566Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3d6aed566Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d6aed566Sopenharmony_ci * you may not use this file except in compliance with the License. 5d6aed566Sopenharmony_ci * You may obtain a copy of the License at 6d6aed566Sopenharmony_ci * 7d6aed566Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d6aed566Sopenharmony_ci * 9d6aed566Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d6aed566Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d6aed566Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d6aed566Sopenharmony_ci * See the License for the specific language governing permissions and 13d6aed566Sopenharmony_ci * limitations under the License. 14d6aed566Sopenharmony_ci */ 15d6aed566Sopenharmony_ci 16d6aed566Sopenharmony_ci#include <cstdio> 17d6aed566Sopenharmony_ci#include "gfx_utils/graphic_log.h" 18d6aed566Sopenharmony_ci#include "graphic_config.h" 19d6aed566Sopenharmony_ci#include "input_dev.h" 20d6aed566Sopenharmony_ci 21d6aed566Sopenharmony_cinamespace OHOS { 22d6aed566Sopenharmony_ciconstexpr const uint8_t INPUT_DEV_ID = 2; 23d6aed566Sopenharmony_ciconstexpr const uint32_t MESSAGE_QUEUE_SIZE = 8; 24d6aed566Sopenharmony_ci 25d6aed566Sopenharmony_ciInputDev *InputDev::GetInstance() 26d6aed566Sopenharmony_ci{ 27d6aed566Sopenharmony_ci static InputDev instance; 28d6aed566Sopenharmony_ci if (!instance.init) { 29d6aed566Sopenharmony_ci uint32_t ret = GetInputInterface(&instance.inputInterface); 30d6aed566Sopenharmony_ci if (ret != INPUT_SUCCESS) { 31d6aed566Sopenharmony_ci GRAPHIC_LOGE("Get input interfaces failed"); 32d6aed566Sopenharmony_ci return nullptr; 33d6aed566Sopenharmony_ci } 34d6aed566Sopenharmony_ci 35d6aed566Sopenharmony_ci ret = instance.inputInterface->iInputManager->OpenInputDevice(INPUT_DEV_ID); 36d6aed566Sopenharmony_ci if (ret != INPUT_SUCCESS) { 37d6aed566Sopenharmony_ci GRAPHIC_LOGE("Open input device failed"); 38d6aed566Sopenharmony_ci return nullptr; 39d6aed566Sopenharmony_ci } 40d6aed566Sopenharmony_ci 41d6aed566Sopenharmony_ci instance.inputEventCb.EventPkgCallback = ReportEventPkgCallback; 42d6aed566Sopenharmony_ci ret = instance.inputInterface->iInputReporter->RegisterReportCallback(INPUT_DEV_ID, &instance.inputEventCb); 43d6aed566Sopenharmony_ci if (ret != INPUT_SUCCESS) { 44d6aed566Sopenharmony_ci GRAPHIC_LOGE("Register input device report callback failed"); 45d6aed566Sopenharmony_ci return nullptr; 46d6aed566Sopenharmony_ci } 47d6aed566Sopenharmony_ci 48d6aed566Sopenharmony_ci instance.init = true; 49d6aed566Sopenharmony_ci } 50d6aed566Sopenharmony_ci return &instance; 51d6aed566Sopenharmony_ci} 52d6aed566Sopenharmony_ci 53d6aed566Sopenharmony_civoid InputDev::ReportEventPkgCallback(const InputEventPackage **pkgs, uint32_t count, uint32_t devIndex) 54d6aed566Sopenharmony_ci{ 55d6aed566Sopenharmony_ci if (pkgs == NULL) { 56d6aed566Sopenharmony_ci return; 57d6aed566Sopenharmony_ci } 58d6aed566Sopenharmony_ci 59d6aed566Sopenharmony_ci DeviceData data = {0}; 60d6aed566Sopenharmony_ci GetInstance()->GetEventData(&data); 61d6aed566Sopenharmony_ci 62d6aed566Sopenharmony_ci for (uint32_t i = 0; i < count; i++) { 63d6aed566Sopenharmony_ci if (pkgs[i]->type == EV_REL) { 64d6aed566Sopenharmony_ci if (pkgs[i]->code == REL_X) 65d6aed566Sopenharmony_ci data.point.x += pkgs[i]->value; 66d6aed566Sopenharmony_ci else if (pkgs[i]->code == REL_Y) 67d6aed566Sopenharmony_ci data.point.y += pkgs[i]->value; 68d6aed566Sopenharmony_ci } else if (pkgs[i]->type == EV_ABS) { 69d6aed566Sopenharmony_ci if (pkgs[i]->code == ABS_X) 70d6aed566Sopenharmony_ci data.point.x =pkgs[i]->value / (0x7fff / HORIZONTAL_RESOLUTION); 71d6aed566Sopenharmony_ci else if (pkgs[i]->code == ABS_Y) 72d6aed566Sopenharmony_ci data.point.y =pkgs[i]->value / (0x7fff / VERTICAL_RESOLUTION); 73d6aed566Sopenharmony_ci } else if (pkgs[i]->type == EV_KEY) { 74d6aed566Sopenharmony_ci if (pkgs[i]->code == BTN_MOUSE || pkgs[i]->code == BTN_TOUCH) { 75d6aed566Sopenharmony_ci if (pkgs[i]->value == 0) 76d6aed566Sopenharmony_ci data.state = 0; 77d6aed566Sopenharmony_ci else if (pkgs[i]->value == 1) 78d6aed566Sopenharmony_ci data.state = 1; 79d6aed566Sopenharmony_ci } 80d6aed566Sopenharmony_ci } else if (pkgs[i]->type == EV_SYN) { 81d6aed566Sopenharmony_ci if (pkgs[i]->code == SYN_REPORT) { 82d6aed566Sopenharmony_ci break; 83d6aed566Sopenharmony_ci } 84d6aed566Sopenharmony_ci } 85d6aed566Sopenharmony_ci } 86d6aed566Sopenharmony_ci 87d6aed566Sopenharmony_ci GetInstance()->SetEventData(data); 88d6aed566Sopenharmony_ci} 89d6aed566Sopenharmony_ci 90d6aed566Sopenharmony_cibool InputDev::Read(DeviceData &data) 91d6aed566Sopenharmony_ci{ 92d6aed566Sopenharmony_ci GetEventData(&data); 93d6aed566Sopenharmony_ci return false; 94d6aed566Sopenharmony_ci} 95d6aed566Sopenharmony_ci} // namespace OHOS