libusb Developers Guide
Prev |  | Next

# Chapter 8. Basic Examples

Before any communication can occur with a device, it needs to be found. This is accomplished by finding all of the busses and then finding all of the devices on all of the busses:

        	struct usb_bus *busses;

        	usb_init();
        	usb_find_busses();
        	usb_find_devices();

        	busses = usb_get_busses();

After this, the application should manually loop through all of the busess and all of the devices and matching the device by whatever criteria is needed:

        	struct usb_bus *bus;
        	int c, i, a;

        	/* ... */

        	for (bus = busses; bus; bus = bus->next) {
        		struct usb_device *dev;

        		for (dev = bus->devices; dev; dev = dev->next) {
        			/* Check if this device is a printer */
        			if (dev->descriptor.bDeviceClass == 7) {
        				/* Open the device, claim the interface and do your processing */
        				...
        			}

        			/* Loop through all of the configurations */
        			for (c = 0; c < dev->descriptor.bNumConfigurations; c++) {
        				/* Loop through all of the interfaces */
        				for (i = 0; i < dev->config[c].bNumInterfaces; i++) {
        					/* Loop through all of the alternate settings */
        					for (a = 0; a < dev->config[c].interface[i].num_altsetting; a++) {
        						/* Check if this interface is a printer */
        						if (dev->config[c].interface[i].altsetting[a].bInterfaceClass == 7) {
        							/* Open the device, set the alternate setting, claim the interface and do your processing */
        							...
        						}
        					}
        				}
        			}
        		}
        	}

Prev | Home | Next
Examples | Up | Examples in the source distribution