• 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 "input_event_data_transformation.h"
17 #include "define_multimodal.h"
18 
19 namespace OHOS {
20 namespace MMI {
KeyEventToNetPacket(const std::shared_ptr<KeyEvent> key,NetPacket & pkt)21 int32_t InputEventDataTransformation::KeyEventToNetPacket(
22     const std::shared_ptr<KeyEvent> key, NetPacket &pkt)
23 {
24     CHKR((RET_OK == SerializeInputEvent(key, pkt)), STREAM_BUF_WRITE_FAIL, RET_ERR);
25     CHKR(pkt.Write(key->GetKeyCode()), STREAM_BUF_WRITE_FAIL, RET_ERR);
26     CHKR(pkt.Write(key->GetKeyAction()), STREAM_BUF_WRITE_FAIL, RET_ERR);
27     auto keys = key->GetKeyItems();
28     int32_t size = static_cast<int32_t>(keys.size());
29     CHKR(pkt.Write(size), STREAM_BUF_WRITE_FAIL, RET_ERR);
30     for (const auto &item : keys) {
31         CHKR(pkt.Write(item.GetKeyCode()), STREAM_BUF_WRITE_FAIL, RET_ERR);
32         CHKR(pkt.Write(item.GetDownTime()), STREAM_BUF_WRITE_FAIL, RET_ERR);
33         CHKR(pkt.Write(item.GetDeviceId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
34         CHKR(pkt.Write(item.IsPressed()), STREAM_BUF_WRITE_FAIL, RET_ERR);
35     }
36     return RET_OK;
37 }
38 
NetPacketToKeyEvent(NetPacket & pkt,std::shared_ptr<KeyEvent> key)39 int32_t InputEventDataTransformation::NetPacketToKeyEvent(NetPacket &pkt, std::shared_ptr<KeyEvent> key)
40 {
41     CHKR((RET_OK == DeserializeInputEvent(pkt, key)), STREAM_BUF_READ_FAIL, RET_ERR);
42     int32_t data = 0;
43     CHKR(pkt.Read(data), STREAM_BUF_READ_FAIL, RET_ERR);
44     key->SetKeyCode(data);
45     CHKR(pkt.Read(data), STREAM_BUF_READ_FAIL, RET_ERR);
46     key->SetKeyAction(data);
47     int32_t size = 0;
48     CHKR(pkt.Read(size), STREAM_BUF_READ_FAIL, RET_ERR);
49     bool isPressed = false;
50     for (int32_t i = 0; i < size; i++) {
51         KeyEvent::KeyItem keyItem;
52         CHKR(pkt.Read(data), STREAM_BUF_READ_FAIL, RET_ERR);
53         keyItem.SetKeyCode(data);
54         int64_t datatime = 0;
55         CHKR(pkt.Read(datatime), STREAM_BUF_READ_FAIL, RET_ERR);
56         keyItem.SetDownTime(datatime);
57         CHKR(pkt.Read(data), STREAM_BUF_READ_FAIL, RET_ERR);
58         keyItem.SetDeviceId(data);
59         CHKR(pkt.Read(isPressed), STREAM_BUF_READ_FAIL, RET_ERR);
60         keyItem.SetPressed(isPressed);
61         key->AddKeyItem(keyItem);
62     }
63     return RET_OK;
64 }
65 
SerializeInputEvent(std::shared_ptr<InputEvent> event,NetPacket & pkt)66 int32_t InputEventDataTransformation::SerializeInputEvent(std::shared_ptr<InputEvent> event, NetPacket &pkt)
67 {
68     CHKPR(event, ERROR_NULL_POINTER);
69     CHKR(pkt.Write(event->GetEventType()), STREAM_BUF_WRITE_FAIL, RET_ERR);
70     CHKR(pkt.Write(event->GetId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
71     CHKR(pkt.Write(event->GetActionTime()), STREAM_BUF_WRITE_FAIL, RET_ERR);
72     CHKR(pkt.Write(event->GetAction()), STREAM_BUF_WRITE_FAIL, RET_ERR);
73     CHKR(pkt.Write(event->GetActionStartTime()), STREAM_BUF_WRITE_FAIL, RET_ERR);
74     CHKR(pkt.Write(event->GetDeviceId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
75     CHKR(pkt.Write(event->GetTargetDisplayId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
76     CHKR(pkt.Write(event->GetTargetWindowId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
77     CHKR(pkt.Write(event->GetAgentWindowId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
78     CHKR(pkt.Write(event->GetFlag()), STREAM_BUF_WRITE_FAIL, RET_ERR);
79     return RET_OK;
80 }
81 
DeserializeInputEvent(NetPacket & pkt,std::shared_ptr<InputEvent> event)82 int32_t InputEventDataTransformation::DeserializeInputEvent(NetPacket &pkt, std::shared_ptr<InputEvent> event)
83 {
84     CHKPR(event, ERROR_NULL_POINTER);
85     int32_t tField = 0;
86     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
87     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
88     event->SetId(tField);
89     int64_t rField = 0;
90     CHKR(pkt.Read(rField), STREAM_BUF_READ_FAIL, RET_ERR);
91     event->SetActionTime(rField);
92     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
93     event->SetAction(tField);
94     CHKR(pkt.Read(rField), STREAM_BUF_READ_FAIL, RET_ERR);
95     event->SetActionStartTime(rField);
96     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
97     event->SetDeviceId(tField);
98     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
99     event->SetTargetDisplayId(tField);
100     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
101     event->SetTargetWindowId(tField);
102     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
103     event->SetAgentWindowId(tField);
104     uint32_t tFlag = InputEvent::EVENT_FLAG_NONE;
105     CHKR(pkt.Read(tFlag), STREAM_BUF_READ_FAIL, RET_ERR);
106     event->AddFlag(tFlag);
107     return RET_OK;
108 }
109 
Marshalling(std::shared_ptr<PointerEvent> event,NetPacket & pkt)110 int32_t InputEventDataTransformation::Marshalling(std::shared_ptr<PointerEvent> event, NetPacket &pkt)
111 {
112     CHKPR(event, ERROR_NULL_POINTER);
113     CHKR((RET_OK == SerializeInputEvent(event, pkt)), STREAM_BUF_WRITE_FAIL, RET_ERR);
114 
115     CHKR(pkt.Write(event->GetPointerAction()), STREAM_BUF_WRITE_FAIL, RET_ERR);
116     CHKR(pkt.Write(event->GetPointerId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
117     CHKR(pkt.Write(event->GetSourceType()), STREAM_BUF_WRITE_FAIL, RET_ERR);
118     CHKR(pkt.Write(event->GetButtonId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
119     CHKR(pkt.Write(event->GetAxes()), STREAM_BUF_WRITE_FAIL, RET_ERR);
120     if (event->HasAxis(PointerEvent::AXIS_TYPE_SCROLL_VERTICAL)) {
121         CHKR(pkt.Write(event->GetAxisValue(PointerEvent::AXIS_TYPE_SCROLL_VERTICAL)),
122             STREAM_BUF_WRITE_FAIL, RET_ERR);
123     }
124     if (event->HasAxis(PointerEvent::AXIS_TYPE_SCROLL_HORIZONTAL)) {
125         CHKR(pkt.Write(event->GetAxisValue(PointerEvent::AXIS_TYPE_SCROLL_HORIZONTAL)),
126             STREAM_BUF_WRITE_FAIL, RET_ERR);
127     }
128     if (event->HasAxis(PointerEvent::AXIS_TYPE_PINCH)) {
129         CHKR(pkt.Write(event->GetAxisValue(PointerEvent::AXIS_TYPE_PINCH)),
130             STREAM_BUF_WRITE_FAIL, RET_ERR);
131     }
132 
133     std::set<int32_t> pressedBtns { event->GetPressedButtons() };
134     CHKR(pkt.Write(pressedBtns.size()), STREAM_BUF_WRITE_FAIL, RET_ERR);
135     for (int32_t btnId : pressedBtns) {
136         CHKR(pkt.Write(btnId), STREAM_BUF_WRITE_FAIL, RET_ERR);
137     }
138 
139     std::vector<int32_t> pointerIds { event->GetPointersIdList() };
140     CHKR(pkt.Write(pointerIds.size()), STREAM_BUF_WRITE_FAIL, RET_ERR);
141 
142     for (const auto &pointerId : pointerIds) {
143         PointerEvent::PointerItem item;
144         CHKR(event->GetPointerItem(pointerId, item), PARAM_INPUT_FAIL, RET_ERR);
145 
146         CHKR(pkt.Write(pointerId), STREAM_BUF_WRITE_FAIL, RET_ERR);
147         CHKR(pkt.Write(item.GetDownTime()), STREAM_BUF_WRITE_FAIL, RET_ERR);
148         CHKR(pkt.Write(static_cast<int32_t>(item.IsPressed())), STREAM_BUF_WRITE_FAIL, RET_ERR);
149         CHKR(pkt.Write(item.GetGlobalX()), STREAM_BUF_WRITE_FAIL, RET_ERR);
150         CHKR(pkt.Write(item.GetGlobalY()), STREAM_BUF_WRITE_FAIL, RET_ERR);
151         CHKR(pkt.Write(item.GetLocalX()), STREAM_BUF_WRITE_FAIL, RET_ERR);
152         CHKR(pkt.Write(item.GetLocalY()), STREAM_BUF_WRITE_FAIL, RET_ERR);
153         CHKR(pkt.Write(item.GetWidth()), STREAM_BUF_WRITE_FAIL, RET_ERR);
154         CHKR(pkt.Write(item.GetHeight()), STREAM_BUF_WRITE_FAIL, RET_ERR);
155         CHKR(pkt.Write(item.GetPressure()), STREAM_BUF_WRITE_FAIL, RET_ERR);
156         CHKR(pkt.Write(item.GetDeviceId()), STREAM_BUF_WRITE_FAIL, RET_ERR);
157     }
158 
159     std::vector<int32_t> pressedKeys = event->GetPressedKeys();
160     CHKR(pkt.Write(pressedKeys.size()), STREAM_BUF_WRITE_FAIL, RET_ERR);
161     for (const auto &keyCode : pressedKeys) {
162         CHKR(pkt.Write(keyCode), STREAM_BUF_WRITE_FAIL, RET_ERR);
163     }
164     return RET_OK;
165 }
166 
Unmarshalling(NetPacket & pkt,std::shared_ptr<PointerEvent> event)167 int32_t InputEventDataTransformation::Unmarshalling(NetPacket &pkt, std::shared_ptr<PointerEvent> event)
168 {
169     CHKR((RET_OK == DeserializeInputEvent(pkt, event)),
170         STREAM_BUF_READ_FAIL, RET_ERR);
171 
172     int32_t tField {  };
173     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
174     event->SetPointerAction(tField);
175     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
176     event->SetPointerId(tField);
177     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
178     event->SetSourceType(tField);
179     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
180     event->SetButtonId(tField);
181     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
182     double axisValue {  };
183     if (PointerEvent::HasAxis(tField, PointerEvent::AXIS_TYPE_SCROLL_VERTICAL)) {
184         CHKR(pkt.Read(axisValue), STREAM_BUF_READ_FAIL, RET_ERR);
185         event->SetAxisValue(PointerEvent::AXIS_TYPE_SCROLL_VERTICAL, axisValue);
186     }
187     if (PointerEvent::HasAxis(tField, PointerEvent::AXIS_TYPE_SCROLL_HORIZONTAL)) {
188         CHKR(pkt.Read(axisValue), STREAM_BUF_READ_FAIL, RET_ERR);
189         event->SetAxisValue(PointerEvent::AXIS_TYPE_SCROLL_HORIZONTAL, axisValue);
190     }
191     if (PointerEvent::HasAxis(tField, PointerEvent::AXIS_TYPE_PINCH)) {
192         CHKR(pkt.Read(axisValue), STREAM_BUF_READ_FAIL, RET_ERR);
193         event->SetAxisValue(PointerEvent::AXIS_TYPE_PINCH, axisValue);
194     }
195 
196     std::set<int32_t>::size_type nPressed {  };
197     CHKR(pkt.Read(nPressed), STREAM_BUF_READ_FAIL, RET_ERR);
198     while (nPressed-- > 0) {
199         CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
200         event->SetButtonPressed(tField);
201     }
202 
203     std::vector<int32_t>::size_type pointerCnt {  };
204     CHKR(pkt.Read(pointerCnt), STREAM_BUF_READ_FAIL, RET_ERR);
205 
206     while (pointerCnt-- > 0) {
207         PointerEvent::PointerItem item;
208         CHKR((RET_OK == DeserializePointerItem(pkt, item)), STREAM_BUF_READ_FAIL, RET_ERR);
209         event->AddPointerItem(item);
210     }
211 
212     std::vector<int32_t> pressedKeys;
213     std::vector<int32_t>::size_type pressedKeySize = 0;
214     CHKR(pkt.Read(pressedKeySize), STREAM_BUF_READ_FAIL, RET_ERR);
215     while (pressedKeySize-- > 0) {
216         CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
217         pressedKeys.push_back(tField);
218     }
219     event->SetPressedKeys(pressedKeys);
220     return RET_OK;
221 }
222 
DeserializePointerItem(NetPacket & pkt,PointerEvent::PointerItem & item)223 int32_t InputEventDataTransformation::DeserializePointerItem(NetPacket &pkt, PointerEvent::PointerItem &item)
224 {
225     int32_t tField {  };
226     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
227     item.SetPointerId(tField);
228     int64_t rField = 0;
229     CHKR(pkt.Read(rField), STREAM_BUF_READ_FAIL, RET_ERR);
230     item.SetDownTime(rField);
231     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
232     item.SetPressed(static_cast<bool>(tField));
233     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
234     item.SetGlobalX(tField);
235     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
236     item.SetGlobalY(tField);
237     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
238     item.SetLocalX(tField);
239     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
240     item.SetLocalY(tField);
241     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
242     item.SetWidth(tField);
243     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
244     item.SetHeight(tField);
245     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
246     item.SetPressure(tField);
247     CHKR(pkt.Read(tField), STREAM_BUF_READ_FAIL, RET_ERR);
248     item.SetDeviceId(tField);
249     return RET_OK;
250 }
251 } // namespace MMI
252 } // namespace OHOS