对于设备驱动接口的认识

 

对于接口的认识

   接口对应的设备功能的抽象

  每一个设备或许有不同的接口

 

 比如一个雷帕鼠标 可能会有两种功能,一种是usb驱动, 另外一种是音频流驱动程序。

 (设备驱动种类)

那么他就需要两个接口来实现。

接口是对于设备功能来使用的。

 

 

因此我们要给自己的驱动程序分配一个接口来使用。

在libusb中使用 libusb_claim_interface(libusb_device_handle * _pHandle , int  interface_number);

 

这个interface_number用来决定选择使用的是哪个接口

在内核中有如下一个结构题用来抽象一个设备接口描述符

 

struct usb_interface_descriptor

{

       __u8  bLength;

       __u8  bDescriptorType;

       __u8  bInterfaceNumber;

       __u8   bAlternateSetting;

       __u8  bNumEndpoints;

       __u8  bInterfaceClass;

       __u8  bInterfaceSubClass;

       __u8  bInterfaceProtocal;

       __u8  iInterface;

}

 

因此libusb_claim_interface这个API是用来给驱动程序选择一个接口。

 

 

//接口描述符

对于__u8 应该是一个宏定义,他是一个占8个字节的unsigned char的重定义

typedef  unsigned char BYTE

typedef  BYTE  __u8

 

第一个数据变量  bLength

    代表该接口描述符号的长度  ,这个长度是固定的 #define UBS_DT_INTERFACE_SIZE 9

   这几个字母是按级别往下排列的 usb的datatable 数据表 的接口 的长度是 9

 

第二个变量bDescriptorType  

   用来表述该描述符的类型,对于接口描述符是一个固定的数值  即#define USB_DT_INTERFACE  0x04

 

第三个变量 bInterfaceNumber

 这个就是我们刚才传递进去的数据

 这个数据可能会有要求。

等等再探索它。

 

第四个变量

   bAlternateSetting

   这个变量是对接口的设置

   对于接口的设置有许多个选项,每一个选项有不同的设置,默认使用的是0号设置

 

第五个变量

   bNumEndpoints;

    这个变量用来描述该接口的端点个数,不包括0端点。

 

第六 7 8 个变量

__u8  bInterfaceClass;

     代表接口类别对于存储设备就是MASS STORAGE  , 用0x08表示, 对于Hub设备是用0x09表示。

 

第9个变量

 

iInterface 字符串描述符 用来存储一些额外的附加信息 如公司名字, 产品序列号。

 

 

接口描述符号的用户是谁呢?

接口描述符 构成接口描述符数组。我们选择其中一个来使用。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值