У кого есть документ или блог о гаджетах ?

#usb-descriptor #gadgetfs

Вопрос:

Я нахожу пример в http://www.linux-usb.org/gadget/usb.c, но это меньше для меня. Я хочу написать дескриптор для gadgetfs, однако это всегда неправильно.Я понял, что мое неправильное представление о дескрипторе или гаджетах. Мне нужно больше документов или примеров для этого! очень, очень спасибо!!

Код дескриптора генерации. Параметр «dev» взят с USB-устройства.

 int gen_gadget_descriptor(char* descriptor,struct libusb_device* dev){
    char* ptr = descriptor;
    //前四字节为0
    ptr[0] = ptr[1] = ptr[2] = ptr[3] = 0;
    ptr  = 4;

    struct libusb_device_descriptor devDesc;
    libusb_get_device_descriptor(dev, amp;devDesc);

    struct libusb_config_descriptor* confDesc;
    libusb_get_config_descriptor(dev,0,amp;confDesc);

    for (int l = 0; l < devDesc.bNumConfigurations; l  ) {
        //加入配置描述符
        memcpy(ptr, amp;confDesc[l], confDesc->bLength);
        ptr  = confDesc[l].bLength;
        //遍历配置描述符中的接口结构体的数量
        int nbIfaces = confDesc->bNumInterfaces;
        for (int i = 0; i<nbIfaces; i  ) {
            //遍历该接口结构体下的接口描述符
            for (int j = 0; j<confDesc->interface[i].num_altsetting; j  ) {
                //加入接口描述符
                memcpy(ptr, amp;confDesc->interface[i].altsetting[j], confDesc->interface[i].altsetting[j].bLength);
                ptr  = confDesc->interface[i].altsetting->bLength;
                //遍历接口描述符下的端点描述符
                for (int k = 0; k<confDesc->interface[i].altsetting[j].bNumEndpoints; k  ) {
                    memcpy(ptr, amp;confDesc->interface[i].altsetting[j].endpoint[k], 
                        confDesc->interface[i].altsetting[j].endpoint[k].bLength);
                    ptr  = confDesc->interface[i].altsetting[j].endpoint[k].bLength;
                }
            }
        }
        libusb_free_config_descriptor(confDesc);
    }


    //加入设备描述符

    printf("devDesc.length=%dn",devDesc.bLength);
    memcpy(ptr, (char*)amp;devDesc,sizeof(struct usb_device_descriptor));
    ptr  = sizeof(struct usb_device_descriptor);
    int descriptorLen = ptr - descriptor;

    return descriptorLen;
}