——葛洪 分享一下开源项目scrcpy GitHub - Genymobile/scrcpy: Display and control your Android device 它可以用电脑显示和控制您的 Android 设备 通过 USB 或 TCP/IP 连接的 Android 设备(视频和音频),并允许使用计算机的键盘和鼠标控制设备。 ADB devices: ERROR: --> (usb) C7Y6R19923000299 device HLK_AL00 ERROR: --> (usb) JR8XY9EEIJGQQSJV device RMX3350 ERROR: Select a device via -s (--serial), - d (--select-usb) or -e (--select-tcpip) ERROR: Server connection failed Github-Id-VampireAchao:~ achao
(1) 控制传输模式,控制传输用于在外设初次连接时对器件进行配置;对外设的状态进行实时检测;对控制命令的传送等;也可以在器件配置完成后被客户软件用于其它目的。 Endpoint 0信道只可以采用控制传送的方式。 银行交互设备,密码键盘 (2) 块传送模式(bulk),块传送用于进行批量的、非实时的数据传输。 2,UsbDevice:一个USB设备对象,每个设备一般包括一个接口,也可能有多个,每个接口又包含节点用来与此设备传输数据。 ,但是,我们大部分情况下还需要对usb串口进行一些配置,比如波特率,停止位,数据控制等,不然两边配置不同,收到的数据会乱码。 3.数据传输 到这里,我们已经可以与usb外设进行数据传输了,首先来看怎么向usb设备发送数据。
应用程序会通过 sendfile(2) 命令将新旧资源发送给 Package Manager 并且在设备上进行重构,以此来达到 "零拷贝" 安装。 为什么 USB 传输速度很重要 无论 "Delta Push" 是否被启用,总会有数据传输到设备上。 如果用的是模拟器,数据会通过 TCP/IP 进行传输,但是如果用的是真机则会用到 USB,USB 传输速度越快,等待时间越短,程序迭代速度也就越快。 但坏消息是,USB 3.0 的设备常常以 USB 2.0 的速度在传输数据。 它含有两条线缆用于 USB-2 信号传输,还有两组双绞线用于 USB-3 的上行和下行数据。
TCP还能提供流量控制。 TCP连接的每一方都有固定大小的缓冲空间。 TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。 TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由 TCP连接双方的应用层解释。 序号是32 bit的无符号数,序号到达23 2-1后又从0开始。 当建立一个新的连接时, SYN标志变1。 这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。 T C P的流量控制由连接的每一端通过声明的窗口大小来提供(滑动窗口技术)。 TCP将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据; TCP提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。
2. TCP 的传输过程与可靠性 1. 应用数据被分割成 TCP 认为最合适的数据块进行发送,而 UDP 则不会,TCP 传递给 IP 的信息被称为“报文段”或“段”,即 TCP 首部与 TCP 数据构成的一个片段 2. TCP 的每一端都有固定大小的缓冲空间,用于提供流量控制,TCP 接收端只允许另一端发送接收端缓冲区所能容纳的数据,以防止较慢主机的缓冲区溢出 3. 源端和目的端的端口号 — 用来寻找发端和收端应用程序,加上 IP 首部中的源 IP 和目的端 IP 可以唯一确定一个 TCP 连接 序号 — 用来标识从发送端向接收端发送的字节流,对每个字节进行计数,达到 2^
本文介绍OpenHarmony开源鸿蒙系统的USB控制传输功能实现及相关代码示例,演示设备:触觉智能RK3576开发板Purple Pi OH2演示,相关参数可以查看我的社区主页。 OpenHarmony的USB通信介绍实现OpenHarmony开源鸿蒙设备与外部USB设备之间的连接管理、数据收发及设备信息交互,支持对USB 设备的枚举、配置及数据传输控制,适用于各类USB接口进行设备通信的场景 USB控制传输主要用于主机(Host)和设备(Device)进行设备状态的获取和设置,进行设备属性状态的的控制。根据设备支持的端点类型支持控制传输读和写。 示例环境:1、仅支持开源鸿蒙OpenHarmony L2标准系统上运行;2、本示例已适配 API version 12 版本 SDK(兼容 API version 8 及以上版本);3、本示例为Stage hasRight) { this.log = 'USB设备权限获取失败'; return; } /数据传输模块实现与 USB 设备的双向数据传输,支持批量传输
控制器的名称 3.代码分析 3.1.初始化 usb gadget configfs模块的初始化函数为gadget_cfs_init。 执行流程如下: 判断输入的USB控制器名称,若输出为空或者是none,则解除usb_gadget_driver和底层USB控制器的绑定。 反之调用usb_udc_attach_driver函数进行匹配USB设备控制器。 遍历udc_list链表,查找fe800000.dwc3 USB设备控制器。 调用UDC驱动接口usb_gadget_udc_start使能USB设备控制器。 调用UDC驱动接口usb_udc_connect_control连接USB主机控制器,这样USB主机就能识别并枚举USB设备。
OTG是一种新的USB传输技术,是On-The-Go的缩写,是一项新兴技术,主要应用于不同的设备或移动设备间的联接,进行数据交换。 2、扩展手机、平板内存需要设备:一个OTG U盘/一根OTG线+一个U盘当手机、平板内存不够用时,用一个OTG U盘连接手机,或者用一根OTG线连接普通U盘再与手机相连,就可以将手机多余的资料存入U盘里了 Type-C 标准中的 Bridge 设备而开发的 USB-C DRP 接口 USB PD 通信芯片。 具备切换 Data Role 功能,实现边充电边听歌需求,并针对各大手机品牌的 USB-C 兼容性进行了 特别优化,适合于手机音频,USB2.0数据传输转接器应用场景。 图片从下图我们可以看到,此PD芯片的外部元器件非常简洁,仅需要2颗MOS控制充放电管理,就能实现边充电边OTG的功能,D+D-直接连到所需的功能处IC即可。图片
关于DCVC2 DCVC2是一款功能强大的数据传输工具,该工具可以通过语音信道并使用RTP分组来传输所有数据,而且整个过程不会在文字聊天中留下操作痕迹。 该工具能够与多种常见的操作系统兼容,并且能够利用Discord的语音通道发送数据以实现命令和控制操作。 工具要求 1、一个Discord账号; 2、一台Discord服务器; 3、支持在设置中将语音聊天速度提高到96kbps; 4、两个Discord bot(需要给bot提供管理员权限:【文档 用法之外,DCVC2还添加了两个硬编码的附加项: cmd> screenshot screenshotting 项目地址 DCVC2:https://github.com/3NailsInfoSec/DCVC2
关于USB显示器跟HDMI之类的显示器有本质区别,我们需要实现的有两个: 在USB上插入一个显示器,怎么让windows系统能识别到显示器 如何让USB显示器显示对应的屏幕内容。 win10 QXL驱动来进行底层逆向分析,win10的QXL驱动是WDDM Displayonly的驱动,其与Dxgknrl的通信方式及获取入口地址的原理与常规WDDM是一致的,我们逆向的到的原理如图2所示 图2 WDDM与Dxgkrnl交互原理 步骤 操作 备注 1 WDDM驱动向Dxgkrnl发送DeviceIOControl,请求入口函数地址 2 Dxgkrnl返回入口函数地址给WDDM驱动 3 步骤 操作 备注 1 WDDM驱动向Dxgkrnl发送DeviceIOControl,请求入口函数地址 2-3-4 Dxgkrnl返回入口函数地址DpiInitialize给WDDM驱动,被DisplayProxy
1.RK3399 USB 下图是RK3399 SOC的框图。RK3399包含了2个USB2.0 Host控制器;两个USB3.0 OTG控制器,同时兼容USB2.0。 2.USB3.0 OTG Controller简介 USB3.0 OTG控制器可以作为主机(Host)、设备(Device),或者根据从USB2.0 PHY和DFP/UFP/Data Role Swap (OUT)端点,包括端点0 13个端点传输资源,每个端点对应一个 灵活的端点配置,适用于多种应用/USB配置模式 硬件自动处理ERDY和burst 基于流(Stream-based)的批量端点可以自动控制启动数据移动 在数据缓冲区中使用等时数据的等时端点 灵活的描述符,具有丰富的功能集,以支持缓冲区中断调节,多次传输,同步,控制和分散的缓冲支持 (4)USB特定类设备特性 UASP(USB Attached SCSI xHCI控制器特性 最多支持64个设备 拥有一个interrupter 拥有1个USB2.0 port和1个Super-Speed port 拥有xHCI调试能力 USB3.0/USB2.0并发传输,
1.概述 如下图所示,USB控制器可以呈现出两种不同的状态。USB控制器作为Host时,称为USB主机控制器,使用USB主机控制器驱动。 USB控制器作为Device时,称为USB设备控制器,使用UDC(usb device controller)驱动。本节只分析USB控制器作为Device时的驱动框架。 USB设备控制器通过USB线缆连接USB主机控制器,负责USB数据的发送和接收。 2.Gadget Function驱动 Linux内核的USB Gadget Function驱动都在drivers/usb/gadget/function/目录下,有通讯设备类(Communication )(struct usb_gadget *, const struct usb_ctrlrequest *); // 当主机断开时,所有传输停止后调用,可能会在中断中调用,不可睡眠 void
Transmission Control Protocol (TCP) 用于网络通信的传输控制和网络协议套件,包括很多协议,其中最主要的是TCP和IP协议。 IP协议用于处理数据包,TCP则主要用于网络连接的建立及数据的传输,保障数据包的的可靠传输及传输顺序。 作为IP协议的补充,TCP通过提供可靠的,流式传输的连接,协议弥补了IP协议的很多不足。 可靠传输:头信息中的序号字段用于保障数据的传输及接收,在确认数据丢失的情况下,TCP协议会启动数据的重新传输。 网络自适应:TCP会根据网络状况,动态的进行传输控制,以在不影响网络的情况下,达到最大吞吐。 流控制:TCP负责管理数据缓冲区,协调处理网络冲突以避免缓冲区溢出。 头信息长度:4字节的头信息长度 标志位:6位标志位用以标识传输数据的类型及状态,部分标志位可以同时使用 校验数据 流控制:流控制是通过数据序号进行控制的,发送序号及确认序号。
第17章 TCP:传输控制协议 17.1 引言 本章将介绍T C P为应用层提供的服务,以及 T C P首部中的各个字段。随后的几章我们在了解T C P的工作过程中将对这些字段作详细介绍。 第1 8章描述如何建立和终止一个T C P连接,第1 9和第2 0章将了解正常的数据传输过程,包括交互使用(远程登录)和批量数据传送(文件传输)。 第2 1章提供T C P超时及重传的技术细节,第 2 2和第2 3章将介绍两种其他的定时器。最后,第2 4章概述T C P新的特性以及T C P的性能。
USB Function驱动通过调用这些接口匹配及访问USB设备控制器,而底层USB控制器驱动要实现这些接口定义的功能。下面分析一下主要的UDC驱动接口调用流程。 2. ,软件通过向USB设备控制器端点USB3_DEPnCMD寄存器写入命令来驱动USB端点工作,命令可以携带参数,参数写到USB3_DEPnCMDPAR1、USB3_DEPnCMDPAR2、USB3_DEPnCMDPAR3 2:1 端点类型2’b00: Control2’b01: Isochronous2’b10: Bulk2’b11: Interrupt USB3_DEPnCMDPAR1 位域 说明 31 FIFO-based 检查各种传输类型的参数是否设置正确。 对于控制传输直接返回0,控制传输使用端点0,无法被匹配 对于等时传输,若使用全速模式则最大包长为1023字节。 功能失败的控制端点必须正常响应其他请求,以监视和控制失败状态。端点”能够响应请求“是指能够通信且因此不能被设为设备。等时传输不使用STALL。超高速控制端点不使用功能失败。
只有两个模块都初始化完毕,USB3.0控制器才能正常工作。本节只分析USB驱动早期初始化部分。 2.设备树 下面是USB3.0控制器的设备树节点。 // 端点0控制传输的trb // 使用kzalloc函数分配的, 不是dma_alloc_coherent函数 // Get Status和Set Sel等标准请求需要用到该预分配的 ]; // USB主机控制器资源 // 事件buffer,控制器会将传输的事件信息保存到该缓冲区中,由软件统一处理 struct dwc3_event_buffer ,DMA将USB控制器事件传输到dwc3_event_buffer后由CPU处理 (4)核心初始化和USB模式初始化,后面详细分析 (5)初始化调试文件,具体如下图所示,用户可以在用户空间获取USB控制器信息和控制 控制器硬件,主要流程如下: (1)获取USB控制器IP的版本,便于后续进行不同的配置,USB控制器不同IP版本之间有差别,将Linux内核版本号写入USB控制器寄存器,以便发现某些版本下的bug (2)
关于ROS2的实践和应用类型课程已经开发完成,ROS1最终版Noetic也会出一版纪念版镜像配合教程,但博客更新主要集中于ROS2的相关应用。 usb_cam这是非常典型有价值的摄像头包。 主要有两个: ros2_usb_camera-foxy-devel usb_cam-ros2 代码差异还是有不少的。 推荐使用usb_cam。 ros2 launch usb_cam demo_launch.py 效果如下: 这个是640*480 如果需要1280*720,需要修改如下: usb_cam_node.cpp // declare '--node-name', dest='node_name', type=str, help='name for device', default='usb_cam ('usb_cam') # get path to params file params_path = os.path.join( usb_cam_dir,
TCP报文段结构 TCP即传输控制协议(Transmission Control Protocol ),它是Internet传输层协议,提供面向连接、 可靠、 有序、 字节流 传输服务。 SYN=1:建立连接请求控制段 。 seq=x:表示传输的报文段的第1个数据字节的序列号是x,此序列号代表整个报文段的序号,(sequence number,序号的意思)。 seq=u:传输的第一个数据字节的序号是u 。 客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态)。 2. (2). 所期望序号的报文段按序到达、且另一个按序报文段在等待ACK传输,TCP接收方立即发送单个累计ACK,确认以上两个按序到达报文段。 ? (3). TCP拥塞控制算法如下: 1. 慢启动 慢启动算法:在TCP连接建立时,每经 过1个RTT时间,拥塞窗口增大一倍。 ? MSS与RTT的变化关系如下图所示: ? 2.
USB总线以高效、便捷的特性得到广泛的应用,但是USB本身并不是专为工业控制开发的。工业控制具有实时性强,安全要求高,现场干扰大等特点,因此USB需要进行工业设计才能保证工业应用的可靠性。 支持工业供电、菊花链I/O扩展、浪涌和突波保护,适用于各种工业控制应用。 USB-5800工业特性解析 工业USB防误拔锁紧器:USB产品为方便连接,采用了弹片连接方式,但在工业控制场合,这种方式存在误碰,误拔的风险,使用工业USB防误拔锁紧器,对usb控制模块进行螺丝锁紧, USB断线监测,重连自动恢复:USB产品具有热插拔功能,为保证控制系统自动连接后继续正常运行,模块通过DEVICE ID进行模块锁定,防止出现模块恢复连接后产生混乱。 电压隔离; 6、输出保持:在严重电磁干扰条件下仍保持输出状态,以不干扰现场控制。
2.音频复合设备驱动 从前面的分析中可以看出,复合设备驱动围绕usb_composite_driver和usb_composite_dev两个数据结构展开,legacy方式的复合设备驱动也不例外。 调用UDC驱动接口,找到合适的USB设备控制器绑定composite_driver_template。 遍历udc_list链表,查找第一个USB控制器。 USB gadget configfs根据名称查找USB设备控制器,而legacy方式只匹配第一个USB设备控制器,无法匹配指定的USB设备控制器。 找到USB设备控制器后,UDC数据结构保存composite_driver_template,此时就完成了UDC绑定composite_driver_template。 、调用f_uac2驱动的 afunc_bind 函数。