# **分布å¼è¾“入部件** ## **简介** 分布å¼è¾“å…¥æä¾›äº†è·¨è®¾å¤‡çš„输入外设控制能力,使一å°è®¾å¤‡å¯ä»¥ä½¿ç”¨å¦ä¸€å°è®¾å¤‡çš„è¾“å…¥å¤–è®¾ï¼ˆå¦‚é¼ æ ‡ï¼Œé”®ç›˜ï¼Œè§¦æ‘¸æ¿ç‰ï¼‰åœ¨æœ¬è®¾å¤‡è¿›è¡Œè¾“å…¥æ“ä½œï¼ˆå¦‚é¼ æ ‡ç‚¹å‡»ï¼Œé”®ç›˜æ‰“å—ï¼Œè§¦æ‘¸æ¿æ»‘动ç‰ï¼‰ï¼Œå¯¹ç«¯è®¾å¤‡çš„外设输入事件在本机生效。 分布å¼è¾“å…¥ä¸æä¾›åŒ—å‘æŽ¥å£ï¼Œç”±[多模输入å系统](https://gitee.com/openharmony/multimodalinput_input)æä¾›[分布å¼è¾“入业务接å£](https://gitee.com/openharmony/interface_sdk-js/blob/master/api/@ohos.multimodalInput.inputDeviceCooperate.d.ts)供开å‘者调用分布å¼è¾“入的能力。 ### **概念说明** **主控端(source)**:分布å¼è¾“入控制端设备,å‘被控端设备å‘逿Œ‡ä»¤ï¼Œä½¿ç”¨å…¶å¤–设输入的能力。 **被控端(sink)**:分布å¼è¾“入被控制端设备,接å—主控端å‘é€çš„æŒ‡ä»¤å¹¶ä¸”完æˆå¯¹åº”æ“作,æä¾›æœ¬åœ°å¤–设供主控端设备使用。 ### **架构实现** 系统架构图如下所示:  **分布å¼è¾“入主控端(DInputSource)**:使用周边设备输入外设的设备,称为分布å¼è¾“入主控端,周边设备输入外设输入事件å¯ä»¥åœ¨ä¸»æŽ§ç«¯ç”Ÿæ•ˆã€‚ **分布å¼è¾“入被控端(DInputSink)**:æä¾›æœ¬åœ°è¾“入外设供主控端设备使用的设备,称为分布å¼è¾“入被控端,输入外设连接在分布å¼è¾“入被控端。 **分布å¼è¾“å…¥InnerSDK(DistributedInputSDK)**:为多模输入模å—调用分布å¼è¾“入能力æä¾›çš„内部接å£ã€‚ **分布å¼è¾“入硬件框架å—呿‰©å±•实现(DistributedInputFwkImpl)**:实现了[分布å¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶](https://gitee.com/openharmony/distributedhardware_distributed_hardware_fwk)定义的å—å‘外设扩展接å£ï¼Œä¾›åˆ†å¸ƒå¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶è°ƒåº¦åˆ†å¸ƒå¼è¾“入能力。 **分布å¼è¾“入驱动管ç†(DInputDriverMgr)**:æä¾›åˆ†å¸ƒå¼è¾“å…¥é©±åŠ¨çš„æ·»åŠ å’Œåˆ é™¤èƒ½åŠ›ã€‚ **事件过滤(EventFilter)**:æä¾›ç»„åˆé”®è¿‡æ»¤èƒ½åŠ›ï¼Œæ ¹æ®ç³»ç»Ÿé¢„置的组åˆé”®ç™½åå•进行组åˆé”®è¿‡æ»¤ï¼Œç™½åå•上的组åˆé”®åªåœ¨è¢«æŽ§ç«¯è®¾å¤‡ç”Ÿæ•ˆï¼Œæ¯”如é”å±é”®ç‰ã€‚ **事件采集(EventCollector)**:用于从输入驱动采集输入外设原始事件。 **事件å‘é€(EventSender)**:用于将事件采集模å—采集到的原始事件å‘é€åˆ°ä¸»æŽ§ç«¯ã€‚ **事件接收(EventReceiver)**:用于接收被控端事件å‘逿¨¡å—å‘é€çš„输入外设原始事件。 **事件注入(EventInject)**:用于将被控端å‘é€çš„输入外设原始事件注入虚拟输入驱动。 **本地输入驱动(Local Input Driver)**:被控端输入外设在驱动层对应的驱动节点。 **虚拟输入驱动(Virtual Input Driver)**ï¼šè¢«æŽ§ç«¯è¾“å…¥å¤–è®¾çš„ç¡¬ä»¶è§„æ ¼ä¿¡æ¯é€šè¿‡åˆ†å¸ƒå¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶åŒæ¥ä¿¡æ¯åˆ°ä¸»æŽ§ç«¯åŽï¼Œä¸»æŽ§ç«¯åˆ†å¸ƒå¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶è°ƒç”¨åˆ†å¸ƒå¼è¾“入虚拟驱动注册功能,在主控端为对应的被控端输入外设创建的虚拟输入驱动节点,和被控端输入驱动节点对应。 ### **æµç¨‹è¯´æ˜Ž** #### **1. 设备上线** 设备组网并认è¯é€šè¿‡åŽï¼Œä¼šè§¦å‘设备上线事件,[设备管ç†](https://gitee.com/openharmony/distributedhardware_device_manager)å‘现设备上线åŽï¼Œå¯åŠ¨åˆ†å¸ƒå¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶ï¼Œåˆ†å¸ƒå¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶å¯åŠ¨å®ŒæˆåŽï¼Œä¼šè¿›è¡Œæœ¬åœ°è¾“å…¥å¤–è®¾çš„ä¿¡æ¯æŸ¥è¯¢å’Œè·¨è®¾å¤‡åŒæ¥ï¼ŒåŒæ—¶è¿›è¡Œåˆ†å¸ƒå¼è¾“入主控端和被控端模å—çš„åˆå§‹åŒ–。 #### **2. 分布å¼è¾“入驱动的准备** 分布å¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶åŒæ¥åˆ°è¢«æŽ§ç«¯è®¾å¤‡çš„è¾“å…¥å¤–è®¾ç¡¬ä»¶è§„æ ¼ä¿¡æ¯åŽï¼Œä¼šè°ƒç”¨åˆ†å¸ƒå¼è¾“入驱动注册接å£ï¼Œä¸ºè¢«æŽ§ç«¯è®¾å¤‡è¾“入外设在主控端设备注册对应的外设虚拟驱动节点,作为被控端设备外设的代ç†ï¼Œè¯¥ä»£ç†ä¼šè¢«å¤šæ¨¡è¾“入自动å‘现并和本地输入外设一起管ç†èµ·æ¥ã€‚ #### **3. 使用分布å¼è¾“入能力** (1) 应用å¯ä»¥è°ƒç”¨å¤šæ¨¡è¾“å…¥çš„â€œé”®é¼ ç©¿è¶ŠåŠŸèƒ½å¼€å…³â€æŽ¥å£ï¼Œæ‰“å¼€é”®é¼ ç©¿è¶ŠåŠŸèƒ½å¼€å…³ï¼Œå¼€å…³æ‰“å¼€åŽï¼Œåº”用å¯ä»¥è°ƒç”¨ä¸‹è¿°â€œå¼€å§‹ç©¿è¶Šâ€å’Œâ€œåœæ¢ç©¿è¶Šâ€æŽ¥å£ï¼ŒæŽ§åˆ¶è¢«æŽ§ç«¯è¾“入外设生效的设备。 (2) 应用å¯ä»¥è°ƒç”¨å¤šæ¨¡è¾“å…¥çš„â€œå¼€å§‹ç©¿è¶Šâ€æŽ¥å£ï¼Œå¯åŠ¨é”®é¼ å¤–è®¾çš„è·¨è®¾å¤‡è¾“å…¥èƒ½åŠ›ï¼Œæ¤æ—¶è¢«æŽ§ç«¯è¾“å…¥å¤–è®¾ï¼ˆé”®ç›˜ï¼Œé¼ æ ‡ï¼Œè§¦æ‘¸æ¿ç‰ï¼‰äº§ç”Ÿçš„输入事件å¯ä»¥åœ¨ä¸»æŽ§ç«¯ç”Ÿæ•ˆã€‚ (3) 应用å¯ä»¥è°ƒç”¨å¤šæ¨¡è¾“å…¥çš„â€œåœæ¢ç©¿è¶Šâ€æŽ¥å£ï¼Œåœæ¢é”®é¼ å¤–è®¾çš„è·¨è®¾å¤‡è¾“å…¥èƒ½åŠ›ï¼Œæ¤æ—¶è¢«æŽ§ç«¯è¾“å…¥å¤–è®¾ï¼ˆé”®ç›˜ï¼Œé¼ æ ‡ï¼Œè§¦æ‘¸æ¿ç‰ï¼‰äº§ç”Ÿçš„输入事件在本地生效,ä¸å†æŽ§åˆ¶ä¸»æŽ§ç«¯ã€‚ 备注:关于多模输入分布å¼è¾“入相关接å£çš„使用,å‚è§[多模输入相关文档](https://gitee.com/openharmony/interface_sdk-js/blob/master/api/@ohos.multimodalInput.inputDeviceCooperate.d.ts)。 #### **4. 设备下线** 设备下线åŽï¼Œåˆ†å¸ƒå¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶åŽ»ä½¿èƒ½ä¸‹çº¿è®¾å¤‡çš„è¾“å…¥å¤–è®¾ï¼Œç§»é™¤ä¸‹çº¿è®¾å¤‡è¾“å…¥å¤–è®¾å¯¹åº”çš„è™šæ‹Ÿè¾“å…¥é©±åŠ¨ï¼Œä¸¤ä¸ªè®¾å¤‡ä¹‹é—´ä¸å†æ‹¥æœ‰åˆ†å¸ƒå¼è¾“入能力。 ## **目录** ``` /foundation/distributedhardware/distributed_input ├── common # 分布å¼è¾“入常é‡å®šä¹‰å’Œå…¬å…±å‡½æ•° ├── dfx_utils # 分布å¼è¾“入实现DFX业务的相关实现 ├── frameworks # 分布å¼è¾“å…¥innerkit接å£ä½¿ç”¨åˆ°çš„回调函数定义 ├── inputdevicehandler # 分布å¼è¾“入实现分布å¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶å®šä¹‰çš„能力查询接å£å®žçް ├── interfaces # 分布å¼è¾“å…¥å®žçŽ°å¯¹å¤–æŽ¥å£æ¨¡å— ├── low_latency # 分布å¼è¾“å…¥å®žçŽ°è¾“å…¥äº‹ä»¶è·¨è®¾å¤‡ä½Žæ—¶å»¶ä¼ è¾“èƒ½åŠ›ä¸šåŠ¡ ├── sa_profile # 分布å¼è¾“入的SAé…ç½®ä¿¡æ¯ â”œâ”€â”€ services # 分布å¼è¾“入的SA具体实现 │ └── common # 分布å¼è¾“入实现用到的公共常é‡å®šä¹‰ │ └── sink # 分布å¼è¾“入的sinkä¾§SA实现 │ │ ├── inputcollector # 分布å¼è¾“å…¥çš„è¾“å…¥é©±åŠ¨åŽŸå§‹äº‹ä»¶èŽ·å– â”‚ │ ├── sinkmanager # 分布å¼è¾“å…¥sink侧业务管ç†ï¼Œå“应主控端相关业务调用 │ │ └── transport # 分布å¼è¾“å…¥sink侧事件å‘é€ â”‚ └── source # 分布å¼è¾“入的sourceä¾§SA实现 │ | ├── inputinject # 分布å¼è¾“入的原始事件注入 │ | ├── sourcemanager # 分布å¼è¾“入的source侧业务管ç†ï¼Œå®žçŽ°å¤–éƒ¨ç›¸å…³æŽ¥å£ â”‚ | └── transport # 分布å¼è¾“å…¥source侧事件接收 | └── transportbase # 分布å¼è¾“入的驱动事件数æ®ä¼ è¾“æŽ¥å£ â”œâ”€â”€ sinkhandler # 分布å¼è¾“入实现的分布å¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶å®šä¹‰çš„sinkä¾§éƒ¨ä»¶æŽ¥å…¥æŽ¥å£ â”œâ”€â”€ sourcehandler # 分布å¼è¾“入实现的分布å¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶å®šä¹‰çš„sourceä¾§éƒ¨ä»¶æŽ¥å…¥æŽ¥å£ â””â”€â”€ test # 分布å¼è¾“å…¥fuzz测试的实现 ├── utils # 分布å¼è¾“入工具类的实现 ``` ## **约æŸ** **è¯è¨€é™åˆ¶**:C++è¯è¨€ã€‚ **组网环境**:必须确ä¿è®¾å¤‡åœ¨åŒä¸€ä¸ªå±€åŸŸç½‘ä¸ã€‚ **æ“作系统é™åˆ¶**:OpenHarmonyæ ‡å‡†æ“作系统。 ## **相关仓** **** **分布å¼ç¡¬ä»¶å系统:** è®¾å¤‡ç®¡ç† [device_manager](https://gitee.com/openharmony/distributedhardware_device_manager) 分æ¥å¼ç¡¬ä»¶ç®¡ç†æ¡†æž¶ [distributed_hardware_fwk](https://gitee.com/openharmony/distributedhardware_distributed_hardware_fwk) 分布å¼ç›¸æœº [distributed_camera](https://gitee.com/openharmony/distributedhardware_distributed_camera) 分布å¼å±å¹• [distributed_screen](https://gitee.com/openharmony/distributedhardware_distributed_screen) 分布å¼éŸ³é¢‘ [distributed_audio](https://gitee.com/openharmony/distributedhardware_distributed_audio) **分布å¼è¾“å…¥ [distributed_input](https://gitee.com/openharmony/distributedhardware_distributed_input)**