• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_pad_device.h"
17 
18 namespace OHOS {
19 namespace MMI {
20 namespace {
21 constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, MMI_LOG_DOMAIN, "ProcessingPadDevice" };
22 } // namespace
23 
TransformJsonDataToInputData(const DeviceItem & fingerEventArrays,InputEventArray & inputEventArray)24 int32_t ProcessingPadDevice::TransformJsonDataToInputData(const DeviceItem& fingerEventArrays,
25     InputEventArray& inputEventArray)
26 {
27     CALL_DEBUG_ENTER;
28     std::vector<DeviceEvent> inputData = fingerEventArrays.events;
29     if (inputData.empty()) {
30         MMI_HILOGE("Manage finger array failed, inputData is empty.");
31         return RET_ERR;
32     }
33     std::vector<PadEvent> padEventArray;
34     if (AnalysisPadEvent(inputData, padEventArray) == RET_ERR) {
35         return RET_ERR;
36     }
37     TransformPadEventToInputEvent(padEventArray, inputEventArray);
38     return RET_OK;
39 }
40 
TransformPadEventToInputEvent(const std::vector<PadEvent> & padEventArray,InputEventArray & inputEventArray)41 void ProcessingPadDevice::TransformPadEventToInputEvent(const std::vector<PadEvent>& padEventArray,
42                                                         InputEventArray& inputEventArray)
43 {
44     for (const auto &item : padEventArray) {
45         if (item.eventType == "KEY_EVENT_PRESS") {
46             TransformKeyPressEvent(item, inputEventArray);
47         } else if (item.eventType == "KEY_EVENT_RELEASE") {
48             TransformKeyReleaseEvent(item, inputEventArray);
49         } else if (item.eventType == "KEY_EVENT_CLICK") {
50             TransformKeyClickEvent(item, inputEventArray);
51         } else if (item.eventType == "RING_EVENT") {
52             TransformRingEvent(item, inputEventArray);
53         } else {
54             MMI_HILOGW("Json file format error");
55         }
56     }
57 }
58 
AnalysisPadEvent(const std::vector<DeviceEvent> & inputData,std::vector<PadEvent> & padEventArray)59 int32_t ProcessingPadDevice::AnalysisPadEvent(const std::vector<DeviceEvent>& inputData,
60     std::vector<PadEvent>& padEventArray)
61 {
62     PadEvent padEvent = {};
63     for (const auto &item : inputData) {
64         padEvent.eventType = item.eventType;
65         padEvent.keyValue = item.keyValue;
66         if (item.ringEvents.empty()) {
67             padEvent.ringEvents = item.ringEvents;
68         }
69         padEventArray.push_back(padEvent);
70     }
71     return RET_OK;
72 }
73 
TransformKeyPressEvent(const PadEvent & padEvent,InputEventArray & inputEventArray)74 void ProcessingPadDevice::TransformKeyPressEvent(const PadEvent& padEvent, InputEventArray& inputEventArray)
75 {
76     SetKeyPressEvent(inputEventArray, 0, static_cast<uint16_t>(padEvent.keyValue));
77     SetAbsMisc(inputEventArray, 0, 1);
78     SetSynReport(inputEventArray);
79 }
80 
TransformKeyReleaseEvent(const PadEvent & padEvent,InputEventArray & inputEventArray)81 void ProcessingPadDevice::TransformKeyReleaseEvent(const PadEvent& padEvent, InputEventArray& inputEventArray)
82 {
83     SetKeyReleaseEvent(inputEventArray, 0, static_cast<uint16_t>(padEvent.keyValue));
84     SetAbsMisc(inputEventArray, 0, 0);
85     SetSynReport(inputEventArray);
86 }
87 
TransformKeyClickEvent(const PadEvent & padEvent,InputEventArray & inputEventArray)88 void ProcessingPadDevice::TransformKeyClickEvent(const PadEvent& padEvent, InputEventArray& inputEventArray)
89 {
90     SetKeyPressEvent(inputEventArray, 0, static_cast<uint16_t>(padEvent.keyValue));
91     SetAbsMisc(inputEventArray, 0, 1);
92     SetSynReport(inputEventArray);
93     SetKeyReleaseEvent(inputEventArray, 0, static_cast<uint16_t>(padEvent.keyValue));
94     SetAbsMisc(inputEventArray, 0, 0);
95     SetSynReport(inputEventArray);
96 }
97 
TransformRingEvent(const PadEvent & padEvent,InputEventArray & inputEventArray)98 void ProcessingPadDevice::TransformRingEvent(const PadEvent& padEvent, InputEventArray& inputEventArray)
99 {
100     uint64_t eventCount = static_cast<uint64_t>(padEvent.ringEvents.size());
101     for (uint64_t i = 0; i < eventCount; i++) {
102         SetEvAbsWheel(inputEventArray, 0, padEvent.ringEvents[i]);
103         if (i == 0) {
104             SetAbsMisc(inputEventArray, 0, 1);
105         } else if (i == (eventCount - 1)) {
106             SetAbsMisc(inputEventArray, 0, 0);
107         } else {
108             // nothing to do.
109         }
110         SetSynReport(inputEventArray);
111     }
112 }
113 } // namespace MMI
114 } // namespace OHOS