160ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson/* 260ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * libusb example program to list devices on the bus 360ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * Copyright (C) 2007 Daniel Drake <dsd@gentoo.org> 460ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * 560ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * This library is free software; you can redistribute it and/or 660ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * modify it under the terms of the GNU Lesser General Public 760ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * License as published by the Free Software Foundation; either 860ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * version 2.1 of the License, or (at your option) any later version. 960ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * 1060ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * This library is distributed in the hope that it will be useful, 1160ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * but WITHOUT ANY WARRANTY; without even the implied warranty of 1260ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1360ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * Lesser General Public License for more details. 1460ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * 1560ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * You should have received a copy of the GNU Lesser General Public 1660ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * License along with this library; if not, write to the Free Software 1760ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 1860ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson */ 1960ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 2060ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson#include <stdio.h> 2160ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson#include <sys/types.h> 2260ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 2360ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson#include <libusb.h> 2460ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 2560ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampsonstatic void print_devs(libusb_device **devs) 2660ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson{ 2760ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson libusb_device *dev; 2860ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson int i = 0; 2960ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 3060ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson while ((dev = devs[i++]) != NULL) { 3160ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson struct libusb_device_descriptor desc; 3260ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson int r = libusb_get_device_descriptor(dev, &desc); 3360ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson if (r < 0) { 3460ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson fprintf(stderr, "failed to get device descriptor"); 3560ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson return; 3660ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson } 3760ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 3860ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson printf("%04x:%04x (bus %d, device %d)\n", 3960ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson desc.idVendor, desc.idProduct, 4060ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson libusb_get_bus_number(dev), libusb_get_device_address(dev)); 4160ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson } 4260ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson} 4360ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 4460ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampsonint main(void) 4560ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson{ 4660ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson libusb_device **devs; 4760ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson int r; 4860ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson ssize_t cnt; 4960ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 5060ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson r = libusb_init(NULL); 5160ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson if (r < 0) 5260ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson return r; 5360ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 5460ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson cnt = libusb_get_device_list(NULL, &devs); 5560ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson if (cnt < 0) 5660ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson return (int) cnt; 5760ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 5860ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson print_devs(devs); 5960ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson libusb_free_device_list(devs, 1); 6060ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 6160ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson libusb_exit(NULL); 6260ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson return 0; 6360ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson} 6460ed380e961ed65bf2ddeb16d43121cdbeba6d3eAdam Hampson 65