1 /* 2 * Copyright (c) 2021-2024 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 OHOS_DISTRIBUTED_INPUT_CONSTANTS_H 17 #define OHOS_DISTRIBUTED_INPUT_CONSTANTS_H 18 19 #include <map> 20 #include <string> 21 #include <vector> 22 23 #include <linux/uinput.h> 24 25 namespace OHOS { 26 namespace DistributedHardware { 27 namespace DistributedInput { 28 #define INPUT_KEY_WHEN "when" 29 #define INPUT_KEY_TYPE "type" 30 #define INPUT_KEY_CODE "code" 31 #define INPUT_KEY_VALUE "value" 32 #define INPUT_KEY_DESCRIPTOR "descriptor" 33 #define INPUT_KEY_PATH "path" 34 35 #define VIRTUAL_DEVICE_NAME "DistributedInput " 36 #define LONG_BITS (sizeof(long) * 8) 37 #define NLONGS(x) (((x) + LONG_BITS - 1) / LONG_BITS) 38 39 const char INPUT_STRING_SPLIT_POINT = '.'; 40 const uint32_t KEY_DOWN_STATE = 1; 41 const uint32_t KEY_UP_STATE = 0; 42 const uint32_t KEY_REPEAT = 2; 43 const uint32_t READ_SLEEP_TIME_MS = 50; 44 const uint32_t READ_RETRY_MAX = 5; 45 const uint32_t DH_ID_LENGTH_MAX = 256; 46 const uint32_t DEV_ID_LENGTH_MAX = 256; 47 const uint32_t STRING_MAX_SIZE = 40 * 1024 * 1024; 48 const uint32_t SCREEN_MSG_MAX = 40 * 1024 * 1024; 49 const uint32_t AUTH_SESSION_SIDE_SERVER = 0; 50 const uint32_t IPC_VECTOR_MAX_SIZE = 32; 51 const uint32_t EVENT_BUFFER_MAX = 512; 52 53 /* 54 * Device Type definitions 55 */ 56 enum class DInputDeviceType : uint32_t { 57 NONE = 0x0000, 58 MOUSE = 0x0001, 59 KEYBOARD = 0x0002, 60 TOUCHSCREEN = 0x0004, 61 TOUCHPAD = MOUSE, 62 ALL = MOUSE | KEYBOARD | TOUCHSCREEN, 63 }; 64 65 const char * const DEVICE_PATH = "/dev/input"; 66 67 /* 68 * Maximum number of signalled FDs to handle at a time. 69 */ 70 constexpr uint32_t EPOLL_MAX_EVENTS = 16; 71 72 /* 73 * Maximum number of event buffer size. 74 */ 75 constexpr uint32_t INPUT_EVENT_BUFFER_SIZE = 256; 76 77 constexpr int32_t INPUT_LOAD_SA_TIMEOUT_MS = 10000; 78 79 constexpr int32_t INPUT_LATENCY_DELAYTIME_US = 50 * 1000; 80 81 constexpr uint32_t INPUT_LATENCY_DELAY_TIMES = 60; 82 83 constexpr int32_t SESSION_WAIT_TIMEOUT_SECOND = 5; 84 85 constexpr int32_t EPOLL_WAITTIME = 100; 86 87 constexpr uint64_t WATCHDOG_INTERVAL_TIME_MS = 20 * 1000; 88 89 /* The input device is a keyboard or has buttons. */ 90 constexpr uint32_t INPUT_DEVICE_CLASS_KEYBOARD = 0x00000001; 91 92 /* The input device is an alpha-numeric keyboard (not just a dial pad). */ 93 constexpr uint32_t INPUT_DEVICE_CLASS_ALPHAKEY = 0x00000002; 94 95 /* The input device is a touchscreen or a touchpad (either single-touch or multi-touch). */ 96 constexpr uint32_t INPUT_DEVICE_CLASS_TOUCH = 0x00000004; 97 98 /* The input device is a cursor device such as a trackball or mouse. */ 99 constexpr uint32_t INPUT_DEVICE_CLASS_CURSOR = 0x00000008; 100 101 /* The input device is a multi-touch touchscreen. */ 102 constexpr uint32_t INPUT_DEVICE_CLASS_TOUCH_MT = 0x00000010; 103 104 /* The input device is a directional pad (implies keyboard, has DPAD keys). */ 105 constexpr uint32_t INPUT_DEVICE_CLASS_DPAD = 0x00000020; 106 107 /* The input device is a gamepad (implies keyboard, has BUTTON keys). */ 108 constexpr uint32_t INPUT_DEVICE_CLASS_GAMEPAD = 0x00000040; 109 110 /* The input device has switches. */ 111 constexpr uint32_t INPUT_DEVICE_CLASS_SWITCH = 0x00000080; 112 113 /* The input device is a joystick (implies gamepad, has joystick absolute axes). */ 114 constexpr uint32_t INPUT_DEVICE_CLASS_JOYSTICK = 0x00000100; 115 116 /* The input device has a vibrator (supports FF_RUMBLE). */ 117 constexpr uint32_t INPUT_DEVICE_CLASS_VIBRATOR = 0x00000200; 118 119 /* The input device has a microphone. */ 120 constexpr uint32_t INPUT_DEVICE_CLASS_MIC = 0x00000400; 121 122 /* The input device is an external stylus (has data we want to fuse with touch data). */ 123 constexpr uint32_t INPUT_DEVICE_CLASS_EXTERNAL_STYLUS = 0x00000800; 124 125 /* The input device has a rotary encoder. */ 126 constexpr uint32_t INPUT_DEVICE_CLASS_ROTARY_ENCODER = 0x00001000; 127 128 /* The input device is virtual (not a real device, not part of UI configuration). */ 129 constexpr uint32_t INPUT_DEVICE_CLASS_VIRTUAL = 0x40000000; 130 131 /* The input device is external (not built-in). */ 132 constexpr uint32_t INPUT_DEVICE_CLASS_EXTERNAL = 0x80000000; 133 134 constexpr uint32_t MAX_SIZE_OF_DEVICE_NAME = UINPUT_MAX_NAME_SIZE - 1; 135 136 const std::string DH_ID_PREFIX = "Input_"; 137 138 const std::string DINPUT_SPLIT_COMMA = ", "; 139 140 const char VIR_NODE_SPLIT_CHAR = '|'; 141 const std::string VIR_NODE_SPLIT = "|"; 142 const std::string VIR_NODE_PID_SPLIT = "/"; 143 const uint32_t VIR_NODE_PHY_LEN = 3; 144 const uint32_t VIR_NODE_PHY_DEVID_IDX = 1; 145 const uint32_t VIR_NODE_PHY_DHID_IDX = 2; 146 147 const std::string SOURCE_DEVICE_ID = "sourceDevId"; 148 149 const std::string SINK_DEVICE_ID = "sinkDevId"; 150 151 const std::string SOURCE_WINDOW_ID = "sourceWinId"; 152 153 const std::string SINK_SHOW_WINDOW_ID = "sinkShowWinId"; 154 155 const std::string SOURCE_WINDOW_WIDTH = "sourceWinWidth"; 156 157 const std::string SOURCE_WINDOW_HEIGHT = "sourceWinHeight"; 158 159 const std::string SINK_PROJECT_SHOW_WIDTH = "sinkProjShowWidth"; 160 161 const std::string SINK_PROJECT_SHOW_HEIGHT = "sinkProjShowHeight"; 162 163 const std::string SINK_WINDOW_SHOW_X = "sinkWinShowX"; 164 165 const std::string SINK_WINDOW_SHOW_Y = "sinkWinShowY"; 166 167 const std::string DEVICE_NAME = "name"; 168 169 const std::string PHYSICAL_PATH = "physicalPath"; 170 171 const std::string UNIQUE_ID = "uniqueId"; 172 173 const std::string BUS = "bus"; 174 175 const std::string VENDOR = "vendor"; 176 177 const std::string PRODUCT = "product"; 178 179 const std::string VERSION = "version"; 180 181 const std::string DESCRIPTOR = "descriptor"; 182 183 const std::string CLASSES = "classes"; 184 185 const std::string EVENT_TYPES = "eventTypes"; 186 187 const std::string EVENT_KEYS = "eventKeys"; 188 189 const std::string ABS_TYPES = "absTypes"; 190 191 const std::string ABS_INFOS = "absInfos"; 192 193 const std::string REL_TYPES = "relTypes"; 194 195 const std::string PROPERTIES = "properties"; 196 197 const std::string MISCELLANEOUS = "miscellaneous"; 198 199 const std::string LEDS = "leds"; 200 201 const std::string REPEATS = "repeats"; 202 203 const std::string SWITCHS = "switchs"; 204 205 const std::string DH_TOUCH_PAD = "touchpad"; 206 207 const std::string DINPUT_LOG_TITLE_TAG = "DINPUT"; 208 209 constexpr const char* LATENCY_COUNT_THREAD_NAME = "latencyCount"; 210 211 constexpr const char* EVENT_INJECT_THREAD_NAME = "eventInject"; 212 213 constexpr const char* COLLECT_EVENT_THREAD_NAME = "collectEvents"; 214 215 constexpr const char* CHECK_KEY_STATUS_THREAD_NAME = "checkKeyStatus"; 216 217 constexpr int32_t LOG_MAX_LEN = 4096; 218 219 constexpr uint32_t SCREEN_ID_DEFAULT = 0; 220 221 constexpr uint32_t DEFAULT_VALUE = 0; 222 223 constexpr int32_t UN_INIT_FD_VALUE = -1; 224 225 constexpr int32_t SINK_SCREEN_INFO_SIZE = 4; 226 227 constexpr int32_t MAX_LOG_TIMES = 20; 228 229 enum class EHandlerMsgType { 230 DINPUT_SINK_EVENT_HANDLER_MSG = 1, 231 DINPUT_SOURCE_EVENT_HANDLER_MSG = 2 232 }; 233 234 struct BusinessEvent { 235 std::vector<int32_t> pressedKeys; 236 int32_t keyCode; 237 int32_t keyAction; 238 }; 239 240 struct TouchScreenEvent { 241 uint32_t absX; 242 uint32_t absY; 243 }; 244 245 /* 246 * A raw event as retrieved from the input_event. 247 */ 248 struct RawEvent { 249 int64_t when; 250 uint32_t type; 251 uint32_t code; 252 int32_t value; 253 std::string descriptor; 254 std::string path; 255 256 bool operator == (const RawEvent &e) 257 { 258 return this->type == e.type && this->code == e.code && 259 this->descriptor == e.descriptor && this->path == e.path; 260 } 261 }; 262 263 /* 264 * Input device Info retrieved from the kernel. 265 */ 266 struct InputDevice { InputDeviceInputDevice267 inline InputDevice() : name(""), physicalPath(""), uniqueId(""), bus(0), vendor(0), product(0), 268 version(0), descriptor(""), classes(0) {} 269 std::string name; 270 std::string physicalPath; 271 std::string uniqueId; 272 uint16_t bus; 273 uint16_t vendor; 274 uint16_t product; 275 uint16_t version; 276 std::string descriptor; 277 uint32_t classes; 278 std::vector<uint32_t> eventTypes; 279 std::vector<uint32_t> eventKeys; 280 std::vector<uint32_t> absTypes; 281 std::map<uint32_t, std::vector<int32_t>> absInfos; 282 std::vector<uint32_t> relTypes; 283 std::vector<uint32_t> properties; 284 285 std::vector<uint32_t> miscellaneous; 286 std::vector<uint32_t> leds; 287 std::vector<uint32_t> switchs; 288 std::vector<uint32_t> repeats; 289 }; 290 291 /* 292 * Distributed Hardware Handle 293 */ 294 struct HardwareHandle { 295 // equipment ID 296 std::string eqId; 297 298 // Hardware ID 299 std::string hhId; 300 301 // Hardware detailed information 302 std::string hdInfo; 303 }; 304 305 // Synthetic raw event type codes produced when devices are added or removed. 306 enum class DeviceType { 307 // Sent when a device is added. 308 DEVICE_ADDED = 0x10000000, 309 310 // Sent when a device is removed. 311 DEVICE_REMOVED = 0x20000000, 312 313 // Sent when all added/removed devices from the most recent scan have been reported. 314 // This event is always sent at least once. 315 FINISHED_DEVICE_SCAN = 0x30000000, 316 317 FIRST_SYNTHETIC_EVENT = DEVICE_ADDED, 318 }; 319 320 /* 321 * Input device connection status 322 */ 323 struct InputDeviceEvent { 324 DeviceType type; 325 InputDevice deviceInfo; 326 }; 327 328 /* 329 * Device Type definitions 330 */ 331 enum class DInputServerType { 332 /* 333 * null server 334 */ 335 NULL_SERVER_TYPE = 0, 336 337 /* 338 * source server 339 */ 340 SOURCE_SERVER_TYPE = 1, 341 342 /* 343 * sink server. 344 */ 345 SINK_SERVER_TYPE = 2, 346 }; 347 348 // Current Input Session Status 349 enum class SessionStatus : uint32_t { 350 CLOSED = 0x00, 351 OPENING = 0x01, 352 OPENED = 0x02, 353 CLOSING = 0x03, 354 }; 355 } // namespace DistributedInput 356 } // namespace DistributedHardware 357 } // namespace OHOS 358 359 #endif // OHOS_DISTRIBUTED_INPUT_CONSTANTS_H 360