任桥伟《我是USB》usb_parse_confiuratiion中一小段代码的疑问
关于LINUX配置描述符usb_parse_confiuratiion中一小段代码的疑问
本人模拟出内核usb_parse_confiuratiion函数中一小段代码如下:
static void Main(string[] args)
{
int[] ms;
ms = new int[20];
int[] nalts;
nalts= new int[20];
int[] inum;
inum=new int []{1,2,3,6,5,4,8,9,7,10};
int i,n,p;
n=0;
p=0;
do while (p < 10)
{
for (i = 0; i < n; ++i)
{
if (ms[i] == inum[p])
break;
}
if (i < n)
{
++nalts[i];
}
else
{
ms[n] = inum[p];
nalts[n] = 1;
++n;
}
p++;
} while (p < 10);
}
}
其中inum[p]表示不断收到的接口号,书上说ms[n]返回的是由接口序列号组成的数组,对应的nalts[n]是由各个接口号中的设置数组成的数组,但本人调试后发现ms[n]返回是不断收到的接口号,nalts[n]返回的全是1,(内核地址:drivers/usb/core/config.c中原代码如下:
for (i = 0; i < n; ++i) {
if (inums[i] == inum)
break;
}
if (i < n) {
if (nalts[i] < 255)
++nalts[i];
} else if (n < USB_MAXINTERFACES) {
inums[n] = inum;
nalts[n] = 1;
++n;
}
求高人指点,为什么nalts[n]返回的全是1?此例来自任桥伟《我是USB》110页
------解决方案--------------------
因为你碰到的每个interface都只有一个setting