• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 #ifndef COOPERATE_EVENTS_H
17 #define COOPERATE_EVENTS_H
18 
19 #include <future>
20 #include <string>
21 #include <variant>
22 
23 #include "coordination_message.h"
24 #include "i_cooperate.h"
25 #include "i_device.h"
26 
27 namespace OHOS {
28 namespace Msdp {
29 namespace DeviceStatus {
30 namespace Cooperate {
31 enum CooperateState : size_t {
32     COOPERATE_STATE_FREE = 0,
33     COOPERATE_STATE_OUT,
34     COOPERATE_STATE_IN,
35     N_COOPERATE_STATES,
36 };
37 
38 enum class CooperateEventType {
39     NOOP,
40     QUIT,
41     ADD_OBSERVER,
42     REMOVE_OBSERVER,
43     REGISTER_LISTENER,
44     UNREGISTER_LISTENER,
45     REGISTER_HOTAREA_LISTENER,
46     UNREGISTER_HOTAREA_LISTENER,
47     ENABLE,
48     DISABLE,
49     START,
50     STOP,
51     GET_COOPERATE_STATE,
52     REGISTER_EVENT_LISTENER,
53     UNREGISTER_EVENT_LISTENER,
54     DUMP,
55     APP_CLOSED,
56     DDM_BOARD_ONLINE,
57     DDM_BOARD_OFFLINE,
58     DDP_COOPERATE_SWITCH_CHANGED,
59     INPUT_HOTPLUG_EVENT,
60     INPUT_POINTER_EVENT,
61     DSOFTBUS_SESSION_OPENED,
62     DSOFTBUS_SESSION_CLOSED,
63     DSOFTBUS_START_COOPERATE,
64     DSOFTBUS_COME_BACK,
65     DSOFTBUS_STOP_COOPERATE,
66     DSOFTBUS_RELAY_COOPERATE,
67     DSOFTBUS_RELAY_COOPERATE_FINISHED,
68     DSOFTBUS_SUBSCRIBE_MOUSE_LOCATION,
69     DSOFTBUS_UNSUBSCRIBE_MOUSE_LOCATION,
70     DSOFTBUS_REPLY_SUBSCRIBE_MOUSE_LOCATION,
71     DSOFTBUS_REPLY_UNSUBSCRIBE_MOUSE_LOCATION,
72     DSOFTBUS_MOUSE_LOCATION,
73     UPDATE_COOPERATE_FLAG,
74     DSOFTBUS_INPUT_DEV_SYNC,
75     DSOFTBUS_INPUT_DEV_HOT_PLUG,
76 };
77 
78 struct Rectangle {
79     int32_t width;
80     int32_t height;
81     int32_t x;
82     int32_t y;
83 };
84 
85 struct AddObserverEvent {
86     std::shared_ptr<ICooperateObserver> observer;
87 };
88 using RemoveObserverEvent = AddObserverEvent;
89 
90 struct RegisterListenerEvent {
91     int32_t pid;
92     int32_t userData;
93 };
94 
95 using UnregisterListenerEvent = RegisterListenerEvent;
96 using RegisterHotareaListenerEvent = RegisterListenerEvent;
97 using UnregisterHotareaListenerEvent = RegisterListenerEvent;
98 using DisableCooperateEvent = RegisterListenerEvent;
99 
100 struct StartCooperateEvent {
101     int32_t pid;
102     int32_t userData;
103     std::string remoteNetworkId;
104     int32_t startDeviceId;
105     std::shared_ptr<std::promise<int32_t>> errCode;
106 };
107 
108 struct EnableCooperateEvent {
109     int32_t tokenId;
110     int32_t pid;
111     int32_t userData;
112 };
113 
114 struct ClientDiedEvent {
115     int32_t pid;
116 };
117 
118 struct StopCooperateEvent {
119     int32_t pid;
120     int32_t userData;
121     bool isUnchained;
122 };
123 
124 struct GetCooperateStateEvent {
125     int32_t pid;
126     int32_t userData;
127     std::string networkId;
128 };
129 
130 struct RegisterEventListenerEvent {
131     int32_t pid;
132     std::string networkId;
133 };
134 using UnregisterEventListenerEvent = RegisterEventListenerEvent;
135 
136 struct DumpEvent {
137     int32_t fd;
138 };
139 
140 struct DDMBoardOnlineEvent {
141     std::string networkId;
142     bool normal;
143     int32_t errCode { static_cast<int32_t>(CoordinationErrCode::COORDINATION_OK) };
144 };
145 
146 using DDMBoardOfflineEvent = DDMBoardOnlineEvent;
147 using DDPCooperateSwitchChanged = DDMBoardOnlineEvent;
148 
149 enum class InputHotplugType {
150     PLUG,
151     UNPLUG,
152 };
153 
154 struct InputHotplugEvent {
155     int32_t deviceId;
156     InputHotplugType type;
157     bool isKeyboard { false };
158 };
159 
160 struct InputPointerEvent {
161     int32_t deviceId;
162     int32_t pointerAction;
163     int32_t sourceType;
164     Coordinate position;
165 };
166 
167 using DSoftbusSessionOpened = DDMBoardOnlineEvent;
168 using DSoftbusSessionClosed = DDMBoardOnlineEvent;
169 
170 struct DSoftbusStartCooperate {
171     std::string networkId;
172     std::string originNetworkId;
173     bool success;
174     NormalizedCoordinate cursorPos;
175     StartCooperateData extra;
176     int32_t errCode { static_cast<int32_t>(CoordinationErrCode::COORDINATION_OK) };
177 };
178 
179 using DSoftbusStartCooperateFinished = DSoftbusStartCooperate;
180 using DSoftbusComeBack = DSoftbusStartCooperate;
181 using DSoftbusStopCooperate = DDMBoardOnlineEvent;
182 using DSoftbusStopCooperateFinished = DDMBoardOnlineEvent;
183 
184 struct DSoftbusRelayCooperate {
185     std::string networkId;
186     std::string targetNetworkId;
187     bool normal;
188 };
189 
190 struct DSoftbusSubscribeMouseLocation {
191     std::string networkId;
192     std::string remoteNetworkId;
193 };
194 
195 struct DSoftbusReplySubscribeMouseLocation {
196     std::string networkId;
197     std::string remoteNetworkId;
198     bool result { false };
199 };
200 
201 struct LocationInfo {
202     int32_t displayX;
203     int32_t displayY;
204     int32_t displayWidth;
205     int32_t displayHeight;
206 };
207 struct DSoftbusSyncMouseLocation {
208     std::string networkId;
209     std::string remoteNetworkId;
210     LocationInfo mouseLocation;
211 };
212 
213 struct DSoftbusSyncInputDevice {
214     std::string networkId;
215     std::vector<std::shared_ptr<IDevice>> devices;
216 };
217 
218 struct DSoftbusHotPlugEvent {
219     std::string networkId;
220     InputHotplugType type;
221     std::shared_ptr<IDevice> device;
222 };
223 
224 using DSoftbusReplyUnSubscribeMouseLocation = DSoftbusReplySubscribeMouseLocation;
225 using DSoftbusUnSubscribeMouseLocation = DSoftbusSubscribeMouseLocation;
226 
227 using DSoftbusRelayCooperateFinished = DSoftbusRelayCooperate;
228 
229 struct UpdateCooperateFlagEvent {
230     uint32_t mask;
231     uint32_t flag;
232 };
233 
234 struct CooperateEvent {
CooperateEventCooperateEvent235     CooperateEvent() : type(CooperateEventType::QUIT) { }
236 
CooperateEventCooperateEvent237     explicit CooperateEvent(CooperateEventType ty) : type(ty) { }
238 
239     template <typename Event>
CooperateEventCooperateEvent240     CooperateEvent(CooperateEventType ty, Event ev) : type(ty), event(ev)
241     {
242     }
243 
244     CooperateEventType type;
245     std::variant<AddObserverEvent, RegisterListenerEvent, StartCooperateEvent, StopCooperateEvent, EnableCooperateEvent,
246         GetCooperateStateEvent, RegisterEventListenerEvent, DSoftbusSubscribeMouseLocation,
247         DSoftbusReplySubscribeMouseLocation, DSoftbusSyncMouseLocation, DumpEvent, DDMBoardOnlineEvent,
248         InputHotplugEvent, InputPointerEvent, DSoftbusStartCooperate, DSoftbusRelayCooperate, ClientDiedEvent,
249         UpdateCooperateFlagEvent, DSoftbusSyncInputDevice, DSoftbusHotPlugEvent>
250         event;
251 };
252 
253 inline constexpr int32_t DEFAULT_TIMEOUT { 3000 };
254 inline constexpr int32_t REPEAT_ONCE { 1 };
255 inline constexpr int32_t DEFAULT_COOLING_TIME { 10 };
256 } // namespace Cooperate
257 } // namespace DeviceStatus
258 } // namespace Msdp
259 } // namespace OHOS
260 #endif // COOPERATE_EVENTS_H