07.06.2013 Views

Scsi - Index of

Scsi - Index of

Scsi - Index of

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

intf 来代替.<br />

us 之所以重要,是因为接下来很多函数都要用到它以及它的各个成员.实际上目前这个函<br />

数,associate_dev 所做的事情就是为us 的各成员赋值,毕竟此刻us 和我们之前提到的那些struct<br />

usb_device 啊,struct usb_interface 啊,还没有一点关系.因而,这个函数,以及这之后的好几个函数都<br />

是<br />

为了给us 的各成员赋上适当的值,之所以如此兴师动众去为它赋值,主要就是因为后面要利用它.所谓天下<br />

没有免费的午餐.<br />

432 行,本来无须多讲,因为只是一个debug 语句,不过提一下__FUNCTION__这个"宏",gcc 2.95 以<br />

后的版本支持这么一个冬冬,这个"宏"在编译的时候会被转换为函数名(字符串),这里自然就是<br />

"associate_dev"这么一个字符串,于是函数执行到这里就会打印一句话告诉世人我们执行到这个函数来<br />

了,这种做法显然会有利于咱们调试程序.不过这个冬冬实际上不是宏,因为预处理器对她一无所知.她的心<br />

只有编译器才懂.<br />

435 行,pusb_dev,就是point <strong>of</strong> usb device 的意思.struct us_data 中的一个成员,按照我们刚才<br />

约定的规矩,此刻我将说us 的一个成员,us->pusb_dev= interface_to_usbdev(intf),<br />

interface_to_usbdev 我们前面已经讲过,其含义正如字面表示的那样,把一个struct interface 结构体<br />

的<br />

指针转换成一个struct usb_device 的结构体指针.前面我们说过,struct usb_device 对我们没有什么<br />

用,<br />

但是usb core 层的一些函数要求使用这个参数,所以我们不得已而为止,正所谓人在江湖身不由己.<br />

436 行,把intf 赋给us 的pusb_intf.<br />

437 行,us 的ifnum, 先看intf 的cur_altsetting,这个容易令外行混淆.usb 设备有一个<br />

configuration 的概念,这个我们前面讲协议的时候说了,而这里又有一个setting,咋一看有些奇怪,这两个<br />

词不是一回事吗.这时候,就体现出外语水平了,上过新东方没上过新东方,背没背过俞敏洪的GRE 红宝书,<br />

在这时候就体现出差距了.还是拿我们最熟悉的手机来打比方,configuration 不说了,setting,一个手机可<br />

能各种配置都确定了,是振动还是铃声已经确定了,各种功能都确定了,但是声音的大小还可以变吧,通常手<br />

机的音量是一格一格的变动,大概也就5,6 格,那么这个可以算一个setting 吧.这里cur_altsetting 就是<br />

表<br />

示的当前的这个setting,或者说设置.cur_altsetting 是一个struct usb_host_interface 的指针,这个<br />

结<br />

构体定义于include/linux/usb.h:<br />

51 /* host-side wrapper for one interface setting's parsed descriptors */<br />

52 struct usb_host_interface {<br />

53 struct usb_interface_descriptor desc;<br />

54<br />

55 /* array <strong>of</strong> desc.bNumEndpoint endpoints associated with this<br />

56 * interface setting. these will be in no particular order.<br />

57 */<br />

58 struct usb_host_endpoint *endpoint;<br />

59<br />

60 unsigned char *extra; /* Extra descriptors */<br />

61 int extralen;<br />

35<br />

62 };<br />

它的成员desc 是一个struct usb_interface_descriptor 结构体变量,这个结构体的定义是和usb 协议

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!