1 /*
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "processing_mouse_device.h"
17
18 #undef MMI_LOG_TAG
19 #define MMI_LOG_TAG "ProcessingMouseDevice"
20
21 namespace OHOS {
22 namespace MMI {
TransformJsonDataToInputData(const DeviceItem & fingerEventArrays,InputEventArray & inputEventArray)23 int32_t ProcessingMouseDevice::TransformJsonDataToInputData(const DeviceItem& fingerEventArrays,
24 InputEventArray& inputEventArray)
25 {
26 CALL_DEBUG_ENTER;
27 std::vector<DeviceEvent> inputData = fingerEventArrays.events;
28 if (inputData.empty()) {
29 MMI_HILOGE("Manage KeyBoard array failed, inputData is empty.");
30 return RET_ERR;
31 }
32 std::vector<MouseEvent> mouseEventArray;
33 if (AnalysisMouseEvent(inputData, mouseEventArray) == RET_ERR) {
34 return RET_ERR;
35 }
36 TransformMouseEventToInputEvent(mouseEventArray, inputEventArray);
37 return RET_OK;
38 }
39
TransformMouseEventToInputEvent(const std::vector<MouseEvent> & mouseEventArray,InputEventArray & inputEventArray)40 void ProcessingMouseDevice::TransformMouseEventToInputEvent(const std::vector<MouseEvent>& mouseEventArray,
41 InputEventArray& inputEventArray)
42 {
43 for (const auto &item : mouseEventArray) {
44 if (item.eventType == "KEY_EVENT_PRESS") {
45 TransformKeyPressEvent(item, inputEventArray);
46 } else if (item.eventType == "KEY_EVENT_RELEASE") {
47 TransformKeyReleaseEvent(item, inputEventArray);
48 } else if (item.eventType == "KEY_EVENT_CLICK") {
49 TransformKeyClickEvent(item, inputEventArray);
50 } else if (item.eventType == "MOUSE_EVENT_MOVE") {
51 TransformMouseMoveEvent(item, inputEventArray);
52 } else if (item.eventType == "MOUSE_EVENT_WHEEL") {
53 TransformMouseWheelEvent(item, inputEventArray);
54 } else if (item.eventType == "MOUSE_EVENT_HWHEEL") {
55 TransformMouseHwheelEvent(item, inputEventArray);
56 } else {
57 MMI_HILOGW("Json file format error");
58 }
59 }
60 }
61
AnalysisMouseEvent(const std::vector<DeviceEvent> & inputData,std::vector<MouseEvent> & mouseEventArray)62 int32_t ProcessingMouseDevice::AnalysisMouseEvent(const std::vector<DeviceEvent>& inputData,
63 std::vector<MouseEvent>& mouseEventArray)
64 {
65 MouseEvent mouseEvent = {};
66 for (const auto &item : inputData) {
67 mouseEvent = {};
68 mouseEvent.eventType = item.eventType;
69 mouseEvent.keyValue = item.keyValue;
70 mouseEvent.blockTime = item.blockTime;
71 mouseEvent.xPos = item.xPos;
72 mouseEvent.yPos = item.yPos;
73 mouseEvent.distance = item.distance;
74 mouseEvent.direction = item.direction;
75 mouseEventArray.push_back(mouseEvent);
76 }
77 return RET_OK;
78 }
79
TransformKeyPressEvent(const MouseEvent & mouseEvent,InputEventArray & inputEventArray)80 void ProcessingMouseDevice::TransformKeyPressEvent(const MouseEvent& mouseEvent,
81 InputEventArray& inputEventArray)
82 {
83 uint16_t keyValue = static_cast<uint16_t>(mouseEvent.keyValue);
84 SetKeyPressEvent(inputEventArray, mouseEvent.blockTime, keyValue);
85 SetSynReport(inputEventArray);
86 }
87
TransformKeyReleaseEvent(const MouseEvent & mouseEvent,InputEventArray & inputEventArray)88 void ProcessingMouseDevice::TransformKeyReleaseEvent(const MouseEvent& mouseEvent,
89 InputEventArray& inputEventArray)
90 {
91 uint16_t keyValue = static_cast<uint16_t>(mouseEvent.keyValue);
92 SetKeyReleaseEvent(inputEventArray, mouseEvent.blockTime, keyValue);
93 SetSynReport(inputEventArray);
94 }
95
TransformKeyClickEvent(const MouseEvent & mouseEvent,InputEventArray & inputEventArray)96 void ProcessingMouseDevice::TransformKeyClickEvent(const MouseEvent& mouseEvent,
97 InputEventArray& inputEventArray)
98 {
99 uint16_t keyValue = static_cast<uint16_t>(mouseEvent.keyValue);
100 SetKeyPressEvent(inputEventArray, mouseEvent.blockTime, keyValue);
101 SetSynReport(inputEventArray);
102 SetKeyReleaseEvent(inputEventArray, mouseEvent.blockTime, keyValue);
103 SetSynReport(inputEventArray);
104 }
105
TransformMouseMoveEvent(const MouseEvent & mouseEvent,InputEventArray & inputEventArray)106 void ProcessingMouseDevice::TransformMouseMoveEvent(const MouseEvent& mouseEvent,
107 InputEventArray& inputEventArray)
108 {
109 SetRelX(inputEventArray, mouseEvent.blockTime, mouseEvent.xPos);
110 SetSynReport(inputEventArray);
111 SetRelY(inputEventArray, mouseEvent.blockTime, mouseEvent.yPos);
112 SetSynReport(inputEventArray);
113 }
114
TransformMouseWheelEvent(const MouseEvent & mouseEvent,InputEventArray & inputEventArray)115 void ProcessingMouseDevice::TransformMouseWheelEvent(const MouseEvent& mouseEvent,
116 InputEventArray& inputEventArray)
117 {
118 uint32_t distance = static_cast<uint32_t>(mouseEvent.distance);
119 if (mouseEvent.direction == "up") {
120 distance = ~distance + 1;
121 }
122 SetRelWheel(inputEventArray, mouseEvent.blockTime, static_cast<int32_t>(distance));
123 SetSynReport(inputEventArray);
124 }
125
TransformMouseHwheelEvent(const MouseEvent & mouseEvent,InputEventArray & inputEventArray)126 void ProcessingMouseDevice::TransformMouseHwheelEvent(const MouseEvent& mouseEvent,
127 InputEventArray& inputEventArray)
128 {
129 uint32_t distance = static_cast<uint32_t>(mouseEvent.distance);
130 if (mouseEvent.direction == "left") {
131 distance = ~distance + 1;
132 }
133 SetRelWheel(inputEventArray, mouseEvent.blockTime, static_cast<int32_t>(distance));
134 SetSynReport(inputEventArray);
135 }
136 } // namespace MMI
137 } // namespace OHOS