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