接口描述符&端点描述符 RNDIS =========================== 三、RNDIS网卡 -------------   RNDIS 是 Remote Network Driver Interface Specification(远程网络驱动程序接口规范) 的首字母缩写,实际上的作用为 TCP/IP over USB,也即视 USB 设备(如手机)为网卡,是基于USB实现RNDIS实际上就是TCP/IP over USB,从而使 Windows 可以通过 USB 设备连接网络。   TCP/IP 协议族,简称为 TCP/IP, 其名称源于其最早的两个核心协议 TCP(Transmission Control Protocol,传输控制协议)和 IP (Internet Protocol,网际协议),它规定了设备连接网络的方式以及数据如何传输的标准。   8910平台支持RNDIS功能,并且默认处于开启状态。模块只要能联网,正常情况下只要将模块接入电脑(windows、linux)电脑就会识别出来一块网卡,不需要经历ppp拨号那样复杂的流程就可以访问联网。 3.1、RNDIS接口关联描述符(8字节) --------------------------------- +-------------+------------+-------------+------------+-------------+ | 字段 | 长度(位) | 偏 | 十六进制值 | 说明 | | | | 移量(位) | | | +=============+============+=============+============+=============+ | **bLength** | 8 | 72 | 0x08 | 描述符 | | | | | | 大小为8字节 | +-------------+------------+-------------+------------+-------------+ | **bDescr | 8 | 80 | 0x0B | 接口类型 | | iptorType** | | | | | +-------------+------------+-------------+------------+-------------+ | **bFirst | 8 | 88 | 0x00 | 起 | | Interface** | | | | 始接口号是0 | +-------------+------------+-------------+------------+-------------+ | **bInter | 8 | 96 | 0x02 | 接口数为2 | | faceCount** | | | | | +-------------+------------+-------------+------------+-------------+ | **bFunc | 8 | 104 | 0xE0 | 该 | | tionClass** | | | | 接口属于无 | | | | | | 线控制器类 | +-------------+------------+-------------+------------+-------------+ | **bFunctio | 8 | 112 | 0x01 | 该接口属于R | | nSubClass** | | | | F控制器子类 | +-------------+------------+-------------+------------+-------------+ | **bFunctio | 8 | 120 | 0x03 | 该接口 | | nProtocol** | | | | 使用设备线 | | | | | | 适配器同步 | | | | | | 流接口协议 | +-------------+------------+-------------+------------+-------------+ | ** | 8 | 128 | 0x05 | 接 | | iFunction** | | | | 口字符串描 | | | | | | 述符索引为5 | +-------------+------------+-------------+------------+-------------+ .. figure:: https://img-blog.csdnimg.cn/20210109174558545.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.2、控制接口 ------------- 3.2.1、RNDIS控制接口描述符(9字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------+------------+-------------+------------+-------------+ | 字段 | 长度(位) | 偏 | 十六进制值 | 说明 | | | | 移量(位) | | | +=============+============+=============+============+=============+ | **bLength** | 8 | 136 | 0x09 | 描述符 | | | | | | 大小为9字节 | +-------------+------------+-------------+------------+-------------+ | **bDescr | 8 | 144 | 0x04 | 接口 | | iptorType** | | | | 描述符类型 | +-------------+------------+-------------+------------+-------------+ | **bInterf | 8 | 152 | 0x00 | 此接口号 | | aceNumber** | | | | 的索引为0。 | +-------------+------------+-------------+------------+-------------+ | **bAlterna | 8 | 160 | 0x00 | 用于选择此 | | teSetting** | | | | 接口的备用 | | | | | | 设置的值为0 | +-------------+------------+-------------+------------+-------------+ | **bNum | 8 | 168 | 0x01 | 此接 | | Endpoints** | | | | 口使用的端 | | | | | | 点数为1(不 | | | | | | 包括端点0) | +-------------+------------+-------------+------------+-------------+ | **bInter | 8 | 176 | 0xE0 | 接口实现无 | | faceClass** | | | | 线控制器类 | +-------------+------------+-------------+------------+-------------+ | **bInterfac | 8 | 184 | 0x01 | 接 | | eSubClass** | | | | 口实现射频 | | | | | | 控制器子类 | +-------------+------------+-------------+------------+-------------+ | **bInterfac | 8 | 192 | 0x03 | 接口 | | eProtocol** | | | | 使用设备线 | | | | | | 适配器同步 | | | | | | 流接口协议 | +-------------+------------+-------------+------------+-------------+ | **i | 8 | 200 | 0x03 | 接 | | Interface** | | | | 口字符串描 | | | | | | 述符索引为3 | +-------------+------------+-------------+------------+-------------+ .. figure:: https://img-blog.csdnimg.cn/20210109182434811.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.2.2、RNDIS CDC Header功能描述符(5字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   Header功能描述符表示功能描述符的开始,其他紧跟的内容就是此设备的功能描述符的内容。bcdCDC表示的是CDC的版本。 +-------------+------------+-------------+------------+-------------+ | 字段 | 长度(位) | 偏 | 十六进制值 | 说明 | | | | 移量(位) | | | +=============+============+=============+============+=============+ | **bLength** | 8 | 208 | 0x05 | 描述符 | | | | | | 的大小,以 | | | | | | 字节为单位 | +-------------+------------+-------------+------------+-------------+ | **bDescr | 8 | 216 | 0x24 | 描述符类型 | | iptorType** | | | | | +-------------+------------+-------------+------------+-------------+ | **bDescript | 8 | 224 | 0x00 | 描 | | orSubType** | | | | 述符子类型 | +-------------+------------+-------------+------------+-------------+ | **bcdCDC** | 16 | 232 | 0x0110 | USB通信 | | | | | | 类定义通信 | | | | | | 规范1.10版 | +-------------+------------+-------------+------------+-------------+ .. figure:: https://img-blog.csdnimg.cn/2021010918245821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.2.3、RNDIS CDC Call Management功能描述符(4字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   Call Management描述的就是电话相关的东西,AT指令集的支持情况。 bDataInterface表示如有电话时,电话数据内容对应的接口号。 +-------------+------------+-------------+------------+-------------+ | 字段 | 长度(位) | 偏 | 十六进制值 | 说明 | | | | 移量(位) | | | +=============+============+=============+============+=============+ | **bLength** | 8 | 248 | 0x05 | 描述符 | | | | | | 的大小,以 | | | | | | 字节为单位 | +-------------+------------+-------------+------------+-------------+ | **bDescr | 8 | 256 | 0x24 | 描述符类型 | | iptorType** | | | | | +-------------+------------+-------------+------------+-------------+ | **bDescript | 8 | 264 | 0x01 | 描 | | orSubType** | | | | 述符子类型 | +-------------+------------+-------------+------------+-------------+ | **bmCap | 8 | 272 | 0x00 | Bit0:设备 | | abilities** | | | | 是否自己处 | | | | | | 理呼叫管理1 | | | | | | Bit1:设备是 | | | | | | 否可以通过 | | | | | | 数据类接口 | | | | | | 发送/接收呼 | | | | | | 叫管理信息0 | +-------------+------------+-------------+------------+-------------+ | **bData | 8 | 280 | 0x01 | 可选用 | | Interface** | | | | 于呼叫管理 | | | | | | 的数据类接 | | | | | | 口的接口号 | +-------------+------------+-------------+------------+-------------+ .. figure:: https://img-blog.csdnimg.cn/20210109182523969.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.2.4、RNDIS CDC ACM功能描述符(4字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   ACM(Abstract Control Model),即抽象控制模型,PSTN下,除了ACM模型还有还有DLM(Direct Line Mode), TCM(Telephone Control Model)。 +------------+-----+------+-----+------------------------------------+ | 字段 | 长 | 偏移 | 十 | 说明 | | | 度 | 量( | 六 | | | | ( | 位) | 进 | | | | 位 | | 制 | | | | ) | | 值 | | +============+=====+======+=====+====================================+ | * | 8 | 288 | 0 | 描述符的大小,以字节为单位 | | *bLength** | | | x04 | | +------------+-----+------+-----+------------------------------------+ | **bDescri | 8 | 296 | 0 | 描述符类型 | | ptorType** | | | x24 | | +------------+-----+------+-----+------------------------------------+ | ** | 8 | 304 | 0 | 描述符子类型 | | bDescripto | | | x02 | | | rSubType** | | | | | +------------+-----+------+-----+------------------------------------+ | **bmCapa | 8 | 312 | 0 | 第0位:设备是否支持Set_Comm_Feature | | bilities** | | | x00 | 、Clear_Comm_Feature和Get_Comm_Fea | | | | | | ture的组合请求第1位:设备是否支持Se | | | | | | t_Line_Coding、Set_Control_Line_St | | | | | | ate、Get_Line_Coding和Serial_State | | | | | | 1的通知组合 | +------------+-----+------+-----+------------------------------------+ .. figure:: https://img-blog.csdnimg.cn/20210109182557614.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.2.5、RNDIS CDC Union功能描述符(5字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   Union描述符就是用来告诉主机端,哪些接口是联合在一起的,对应着一个功能,这个功能需要主机装载对应的驱动来实现,因此,功能与驱动是一对一的关系。这里bControlInterface值为0,则表示接口0为控制接口,bSubBoardinateInterface0值为1,表示接口1为控制接口0的下级接口,即数据接口。在CDC标准中,控制接口是必须的,而数据接口是可选的,因此,数据接口为控制接口的附属。 +----------+----------+----------+------+----------+----------+ | 字段 | 长 | 偏移 | 解码 | 十 | 说明 | | | 度(位) | 量(位) | | 六进制值 | | +==========+==========+==========+======+==========+==========+ | **b | 8 | 320 | 0x05 | 0x05 | 描 | | Length** | | | | | 述符的大 | | | | | | | 小,以字 | | | | | | | 节为单位 | +----------+----------+----------+------+----------+----------+ | **b | 8 | 328 | 0x24 | 0x24 | 描 | | Descript | | | | | 述符类型 | | orType** | | | | | | +----------+----------+----------+------+----------+----------+ | **bDes | 8 | 336 | 0x06 | 0x06 | 描述 | | criptorS | | | | | 符子类型 | | ubType** | | | | | | +----------+----------+----------+------+----------+----------+ | **bCo | 8 | 344 | 0x00 | 0x00 | 通信或数 | | ntrolInt | | | | | 据类接口 | | erface** | | | | | 的接口号 | +----------+----------+----------+------+----------+----------+ | ** | 8 | 352 | 0x01 | 0x01 | 下级接口 | | bSubordi | | | | | 的接口号 | | nateInte | | | | | | | rface0** | | | | | | +----------+----------+----------+------+----------+----------+ .. figure:: https://img-blog.csdnimg.cn/20210109182612146.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.2.6、RNDIS 通知端点描述符(7字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------+------------+-------------+------------+-------------+ | 字段 | 长度(位) | 偏 | 十六进制值 | 说明 | | | | 移量(位) | | | +=============+============+=============+============+=============+ | **bLength** | 8 | 360 | 0x07 | 描述符 | | | | | | 大小为7字节 | +-------------+------------+-------------+------------+-------------+ | **bDescr | 8 | 368 | 0x05 | 端点 | | iptorType** | | | | 描述符类型 | +-------------+------------+-------------+------------+-------------+ | **bEndpoi | 8 | 376 | 0x82 | 这 | | ntAddress** | | | | 是端点号为 | | | | | | 2的输入端点 | +-------------+------------+-------------+------------+-------------+ | **bmA | 8 | 384 | 0x03 | 类型-传输 | | ttributes** | | | | :中断低功 | | | | | | 耗:无Pkt大 | | | | | | 小调整:无 | +-------------+------------+-------------+------------+-------------+ | **wMaxP | 16 | 392 | 0x0008 | 此终结点的 | | acketSize** | | | | 最大数据包 | | | | | | 大小为8字节 | | | | | | 。如果是高 | | | | | | 速,则每帧 | | | | | | 增加0个事务 | +-------------+------------+-------------+------------+-------------+ | ** | 8 | 408 | 0x09 | 轮询 | | bInterval** | | | | 间隔值为每 | | | | | | 9帧。如果高 | | | | | | 速,每256帧 | +-------------+------------+-------------+------------+-------------+ .. figure:: https://img-blog.csdnimg.cn/2021010918263120.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.3、数据接口 ------------- 3.3.1、RNDIS数据接口描述符(9字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------+------------+-------------+------------+-------------+ | 字段 | 长度(位) | 偏 | 十六进制值 | 说明 | | | | 移量(位) | | | +=============+============+=============+============+=============+ | **bLength** | 8 | 416 | 0x09 | 描述符 | | | | | | 大小为9字节 | +-------------+------------+-------------+------------+-------------+ | **bDescr | 8 | 424 | 0x04 | 接口 | | iptorType** | | | | 描述符类型 | +-------------+------------+-------------+------------+-------------+ | **bAlterna | 8 | 432 | 0x01 | 此 | | teSetting** | | | | 接口号为1。 | +-------------+------------+-------------+------------+-------------+ | **bAlterna | 8 | 440 | 0x00 | 用于选择此 | | teSetting** | | | | 接口的备用 | | | | | | 设置的值为0 | +-------------+------------+-------------+------------+-------------+ | **bNum | 8 | 448 | 0x02 | 此接 | | Endpoints** | | | | 口使用的端 | | | | | | 点数为2(不 | | | | | | 包括端点0) | +-------------+------------+-------------+------------+-------------+ | **bInter | 8 | 456 | 0x0A | 接口实现 | | faceClass** | | | | 数据接口类 | +-------------+------------+-------------+------------+-------------+ | **bInterfac | 8 | 472 | 0x00 | 接口使用 | | eProtocol** | | | | 不需要特定 | | | | | | 于类的协议 | +-------------+------------+-------------+------------+-------------+ | **bInterfac | 8 | 464 | 0x00 | 子类编码为0 | | eSubClass** | | | | | +-------------+------------+-------------+------------+-------------+ | **i | 8 | 480 | 0x04 | 接 | | Interface** | | | | 口字符串描 | | | | | | 述符索引为4 | +-------------+------------+-------------+------------+-------------+ .. figure:: https://img-blog.csdnimg.cn/20210109182652980.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.3.2、RNDIS数据输入端点描述符(7字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------+------------+-------------+------------+-------------+ | 字段 | 长度(位) | 偏 | 十六进制值 | 说明 | | | | 移量(位) | | | +=============+============+=============+============+=============+ | **bLength** | 8 | 488 | 0x07 | 描述符 | | | | | | 大小为7字节 | +-------------+------------+-------------+------------+-------------+ | **bDescr | 8 | 496 | 0x05 | 端点 | | iptorType** | | | | 描述符类型 | +-------------+------------+-------------+------------+-------------+ | **bEndpoi | 8 | 504 | 0x81 | 这是端点号 | | ntAddress** | | | | 为1的IN端点 | +-------------+------------+-------------+------------+-------------+ | **bmA | 8 | 512 | 0x02 | 类型-传输 | | ttributes** | | | | :批量包大 | | | | | | 小调整:否 | +-------------+------------+-------------+------------+-------------+ | **wMaxP | 16 | 520 | 0x0200 | 此 | | acketSize** | | | | 终结点的最 | | | | | | 大数据包大 | | | | | | 小为512字节 | | | | | | 。如果是高 | | | | | | 速,则每帧 | | | | | | 增加0个事务 | +-------------+------------+-------------+------------+-------------+ | ** | 8 | 536 | 0x00 | 轮询间隔 | | bInterval** | | | | 值为每0帧。 | | | | | | 高速未定义 | +-------------+------------+-------------+------------+-------------+ .. figure:: https://img-blog.csdnimg.cn/20210109182711325.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述 3.3.3、RNDIS数据输出端点描述符(7字节) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------+------------+-------------+------------+-------------+ | 字段 | 长度(位) | 偏 | 十六进制值 | 说明 | | | | 移量(位) | | | +=============+============+=============+============+=============+ | **bLength** | 8 | 544 | 0x07 | 描述符 | | | | | | 大小为7字节 | +-------------+------------+-------------+------------+-------------+ | **bDescr | 8 | 552 | 0x05 | 端点 | | iptorType** | | | | 描述符类型 | +-------------+------------+-------------+------------+-------------+ | **bEndpoi | 8 | 560 | 0x01 | 这 | | ntAddress** | | | | 是端点号为 | | | | | | 1的输出端点 | +-------------+------------+-------------+------------+-------------+ | **bmA | 8 | 568 | 0x02 | 类型-传输 | | ttributes** | | | | :批量包大 | | | | | | 小调整:否 | +-------------+------------+-------------+------------+-------------+ | **wMaxP | 16 | 576 | 0x0200 | 此 | | acketSize** | | | | 终结点的最 | | | | | | 大数据包大 | | | | | | 小为512字节 | | | | | | 。如果是高 | | | | | | 速,则每帧 | | | | | | 增加0个事务 | +-------------+------------+-------------+------------+-------------+ | ** | 8 | 592 | 0x00 | 轮询间隔 | | bInterval** | | | | 值为每0帧。 | +-------------+------------+-------------+------------+-------------+ .. figure:: https://img-blog.csdnimg.cn/20210109182723499.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70 :alt: 在这里插入图片描述 在这里插入图片描述