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