2017-08-23 20 views
0

Digispark boardにアップロードしています。それはmicronucleusブートローダを使用し、私はuploader codeを見ることができます。私はそれをインターフェースとエンドポイントがカウント見るためにビットを変更した:インターフェイスエンドポイントのないCDCデバイスとのやりとりはどのように行われますか?

nucleus->device = usb_open(dev); 

    // added by me - start 
    int interfaces, endpoints, j; 
    struct usb_interface_descriptor *interface = NULL; 

    interfaces = dev->config->bNumInterfaces; 
    fprintf(stderr, "Found interfaces: %i\n", interfaces); 

    interface = &(dev->config->interface[0].altsetting[0]); 
    fprintf(stderr, "Endpoints: %i\n", interface->bNumEndpoints); 
    // added by me - end 

    // get nucleus info 
    unsigned char buffer[4]; 
    int res = usb_control_msg(nucleus->device, USB_ENDPOINT_IN| USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, 0, 0, (char *)buffer, 4, MICRONUCLEUS_USB_TIMEOUT); 

インタフェース#0は、エンドポイントを持っていないので、私はそれが働いているか疑問:

$./micronucleus --type intel-hex /tmp/Start.ino.hex 
> Please plug in the device ... 
> Press CTRL+C to terminate the program. 
Found interfaces: 1 
Endpoints: 0 
> Device is found! 
connecting: 40% complete 
> Device has firmware version 1.6 
> Available space for user applications: 6012 bytes 
> Suggested sleep time between sending pages: 8ms 
> Whole page count: 94 page size: 64 
> Erase function sleep duration: 752ms 
parsing: 60% complete 
> Erasing the memory ... 
erasing: 80% complete 
> Starting to upload ... 
writing: 100% complete 
>> Micronucleus done. Thank you! 

通常、私は、インターフェイスが2つのエンドポイントを持つことを期待します( )usb.hから出&に:

#define USB_ENDPOINT_IN   0x80 
#define USB_ENDPOINT_OUT  0x00 

誰もがusb_control_msg(nucleus->device, USB_ENDPOINT_IN| USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, 0, 0, (char *)buffer, 4, MICRONUCLEUS_USB_TIMEOUT);がエンドポイントなしで働いているかを私に説明できますか?

答えて

関連する問題