接口描述符&端点描述符 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 iptorType |
8 |
80 |
0x0B |
接口类型 |
bFirst Interface |
8 |
88 |
0x00 |
起 始接口号是0 |
bInter faceCount |
8 |
96 |
0x02 |
接口数为2 |
bFunc tionClass |
8 |
104 |
0xE0 |
该 接口属于无 线控制器类 |
bFunctio nSubClass |
8 |
112 |
0x01 |
该接口属于R F控制器子类 |
bFunctio nProtocol |
8 |
120 |
0x03 |
该接口 使用设备线 适配器同步 流接口协议 |
** iFunction** |
8 |
128 |
0x05 |
接 口字符串描 述符索引为5 |
3.2、控制接口¶
3.2.1、RNDIS控制接口描述符(9字节)¶
字段 |
长度(位) |
偏 移量(位) |
十六进制值 |
说明 |
---|---|---|---|---|
bLength |
8 |
136 |
0x09 |
描述符 大小为9字节 |
bDescr iptorType |
8 |
144 |
0x04 |
接口 描述符类型 |
bInterf aceNumber |
8 |
152 |
0x00 |
此接口号 的索引为0。 |
bAlterna teSetting |
8 |
160 |
0x00 |
用于选择此 接口的备用 设置的值为0 |
bNum Endpoints |
8 |
168 |
0x01 |
此接 口使用的端 点数为1(不 包括端点0) |
bInter faceClass |
8 |
176 |
0xE0 |
接口实现无 线控制器类 |
bInterfac eSubClass |
8 |
184 |
0x01 |
接 口实现射频 控制器子类 |
bInterfac eProtocol |
8 |
192 |
0x03 |
接口 使用设备线 适配器同步 流接口协议 |
i Interface |
8 |
200 |
0x03 |
接 口字符串描 述符索引为3 |
3.2.2、RNDIS CDC Header功能描述符(5字节)¶
Header功能描述符表示功能描述符的开始,其他紧跟的内容就是此设备的功能描述符的内容。bcdCDC表示的是CDC的版本。
字段 |
长度(位) |
偏 移量(位) |
十六进制值 |
说明 |
---|---|---|---|---|
bLength |
8 |
208 |
0x05 |
描述符 的大小,以 字节为单位 |
bDescr iptorType |
8 |
216 |
0x24 |
描述符类型 |
bDescript orSubType |
8 |
224 |
0x00 |
描 述符子类型 |
bcdCDC |
16 |
232 |
0x0110 |
USB通信 类定义通信 规范1.10版 |
3.2.3、RNDIS CDC Call Management功能描述符(4字节)¶
Call Management描述的就是电话相关的东西,AT指令集的支持情况。 bDataInterface表示如有电话时,电话数据内容对应的接口号。
字段 |
长度(位) |
偏 移量(位) |
十六进制值 |
说明 |
---|---|---|---|---|
bLength |
8 |
248 |
0x05 |
描述符 的大小,以 字节为单位 |
bDescr iptorType |
8 |
256 |
0x24 |
描述符类型 |
bDescript orSubType |
8 |
264 |
0x01 |
描 述符子类型 |
bmCap abilities |
8 |
272 |
0x00 |
Bit0:设备 是否自己处 理呼叫管理1 Bit1:设备是 否可以通过 数据类接口 发送/接收呼 叫管理信息0 |
bData Interface |
8 |
280 |
0x01 |
可选用 于呼叫管理 的数据类接 口的接口号 |
3.2.4、RNDIS CDC ACM功能描述符(4字节)¶
ACM(Abstract Control Model),即抽象控制模型,PSTN下,除了ACM模型还有还有DLM(Direct Line Mode), TCM(Telephone Control Model)。
字段 |
长 度 ( 位 ) |
偏移 量( 位) |
十 六 进 制 值 |
说明 |
---|---|---|---|---|
bLength* |
8 |
288 |
0 x04 |
描述符的大小,以字节为单位 |
bDescri ptorType |
8 |
296 |
0 x24 |
描述符类型 |
** bDescripto rSubType** |
8 |
304 |
0 x02 |
描述符子类型 |
bmCapa bilities |
8 |
312 |
0 x00 |
第0位:设备是否支持Set_Comm_Feature 、Clear_Comm_Feature和Get_Comm_Fea ture的组合请求第1位:设备是否支持Se t_Line_Coding、Set_Control_Line_St ate、Get_Line_Coding和Serial_State 1的通知组合 |
3.2.5、RNDIS CDC Union功能描述符(5字节)¶
Union描述符就是用来告诉主机端,哪些接口是联合在一起的,对应着一个功能,这个功能需要主机装载对应的驱动来实现,因此,功能与驱动是一对一的关系。这里bControlInterface值为0,则表示接口0为控制接口,bSubBoardinateInterface0值为1,表示接口1为控制接口0的下级接口,即数据接口。在CDC标准中,控制接口是必须的,而数据接口是可选的,因此,数据接口为控制接口的附属。
字段 |
长 度(位) |
偏移 量(位) |
解码 |
十 六进制值 |
说明 |
---|---|---|---|---|---|
b Length |
8 |
320 |
0x05 |
0x05 |
描 述符的大 小,以字 节为单位 |
b Descript orType |
8 |
328 |
0x24 |
0x24 |
描 述符类型 |
bDes criptorS ubType |
8 |
336 |
0x06 |
0x06 |
描述 符子类型 |
bCo ntrolInt erface |
8 |
344 |
0x00 |
0x00 |
通信或数 据类接口 的接口号 |
** bSubordi nateInte rface0** |
8 |
352 |
0x01 |
0x01 |
下级接口 的接口号 |
3.2.6、RNDIS 通知端点描述符(7字节)¶
字段 |
长度(位) |
偏 移量(位) |
十六进制值 |
说明 |
---|---|---|---|---|
bLength |
8 |
360 |
0x07 |
描述符 大小为7字节 |
bDescr iptorType |
8 |
368 |
0x05 |
端点 描述符类型 |
bEndpoi ntAddress |
8 |
376 |
0x82 |
这 是端点号为 2的输入端点 |
bmA ttributes |
8 |
384 |
0x03 |
类型-传输 :中断低功 耗:无Pkt大 小调整:无 |
wMaxP acketSize |
16 |
392 |
0x0008 |
此终结点的 最大数据包 大小为8字节 。如果是高 速,则每帧 增加0个事务 |
** bInterval** |
8 |
408 |
0x09 |
轮询 间隔值为每 9帧。如果高 速,每256帧 |
3.3、数据接口¶
3.3.1、RNDIS数据接口描述符(9字节)¶
字段 |
长度(位) |
偏 移量(位) |
十六进制值 |
说明 |
---|---|---|---|---|
bLength |
8 |
416 |
0x09 |
描述符 大小为9字节 |
bDescr iptorType |
8 |
424 |
0x04 |
接口 描述符类型 |
bAlterna teSetting |
8 |
432 |
0x01 |
此 接口号为1。 |
bAlterna teSetting |
8 |
440 |
0x00 |
用于选择此 接口的备用 设置的值为0 |
bNum Endpoints |
8 |
448 |
0x02 |
此接 口使用的端 点数为2(不 包括端点0) |
bInter faceClass |
8 |
456 |
0x0A |
接口实现 数据接口类 |
bInterfac eProtocol |
8 |
472 |
0x00 |
接口使用 不需要特定 于类的协议 |
bInterfac eSubClass |
8 |
464 |
0x00 |
子类编码为0 |
i Interface |
8 |
480 |
0x04 |
接 口字符串描 述符索引为4 |
3.3.2、RNDIS数据输入端点描述符(7字节)¶
字段 |
长度(位) |
偏 移量(位) |
十六进制值 |
说明 |
---|---|---|---|---|
bLength |
8 |
488 |
0x07 |
描述符 大小为7字节 |
bDescr iptorType |
8 |
496 |
0x05 |
端点 描述符类型 |
bEndpoi ntAddress |
8 |
504 |
0x81 |
这是端点号 为1的IN端点 |
bmA ttributes |
8 |
512 |
0x02 |
类型-传输 :批量包大 小调整:否 |
wMaxP acketSize |
16 |
520 |
0x0200 |
此 终结点的最 大数据包大 小为512字节 。如果是高 速,则每帧 增加0个事务 |
** bInterval** |
8 |
536 |
0x00 |
轮询间隔 值为每0帧。 高速未定义 |
3.3.3、RNDIS数据输出端点描述符(7字节)¶
字段 |
长度(位) |
偏 移量(位) |
十六进制值 |
说明 |
---|---|---|---|---|
bLength |
8 |
544 |
0x07 |
描述符 大小为7字节 |
bDescr iptorType |
8 |
552 |
0x05 |
端点 描述符类型 |
bEndpoi ntAddress |
8 |
560 |
0x01 |
这 是端点号为 1的输出端点 |
bmA ttributes |
8 |
568 |
0x02 |
类型-传输 :批量包大 小调整:否 |
wMaxP acketSize |
16 |
576 |
0x0200 |
此 终结点的最 大数据包大 小为512字节 。如果是高 速,则每帧 增加0个事务 |
** bInterval** |
8 |
592 |
0x00 |
轮询间隔 值为每0帧。 |