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.altsetting); fprintf(stderr, "Endpoints: %i\n", interface->bNumEndpoints); // added by me - end // get nucleus info unsigned char buffer; 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);
I wonder how it's working because interface #0 has no endpoints:
$./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!
Usually i expect interface to have 2 endpoints (in & out from usb.h):
#define USB_ENDPOINT_IN 0x80 #define USB_ENDPOINT_OUT 0x00
Can anyone explain me how
usb_control_msg(nucleus->device, USB_ENDPOINT_IN| USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, 0, 0, (char *)buffer, 4, MICRONUCLEUS_USB_TIMEOUT); is working without endpoint?