Date: Tue, 22 Jul 2008 22:20:09 -0600 From: Andrew Falanga <af300wsm@gmail.com> To: Lowell Gilbert <freebsd-questions-local@be-well.ilk.org> Cc: "freebsd-questions@freebsd.org" <freebsd-questions@freebsd.org> Subject: Re: Has anyone used libusb for accessing usb devices here? Message-ID: <200807222220.10176.af300wsm@gmail.com> In-Reply-To: <44bq0qc7b1.fsf@be-well.ilk.org> References: <340a29540807220721r10e36a99v1a2fa74e2bb2dfa0@mail.gmail.com> <44bq0qc7b1.fsf@be-well.ilk.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 22 July 2008 08:38:58 Lowell Gilbert wrote: > "Andrew Falanga" <af300wsm@gmail.com> writes: > > I'd like to know if anyone here on the list has ever used libusb > > (http://libusb.sourceforge.net) for accessing usb devices. I > > successfully compiled and installed it on my FreeBSD 7 laptop but when > > I run a test program no USB HUBs are found. The same test on a Fedora > > box works fine. I was wondering what the magic is for FreeBSD since > > the web site claims the package works on FreeBSD. > > libusb is in ports, and a number of other ports use it. > (See "make search key=libusb".) > That should provide a variety of working examples. Ok, I've installed from the ports collection this time (at home now on my 6.2p11 box) and I'm seeing busses in my computer. However, when I plug in my USB thumb drive, a Sandisk Cruizer Micro that the kernel does see as da0 (verified in /var/log/messages), I don't get any devices shown. Below is the code to the program I'm using. It's a hack of the basic example on the libusb.sourceforge.net website docs. #include <iostream> #include <usb.h> int main(void) { usb_init(); struct usb_bus *busses; usb_init(); usb_find_busses(); usb_find_devices(); busses = usb_get_busses(); if(busses) std::cout << "we found some busses" << std::endl; else std::cout << "no busses were found" << std::endl; struct usb_bus *bus; int c, i, a, bussCount(0); /* ... */ for (bus = busses; bus; bus = bus->next) { std::cout << "enumerating buss: " << ++bussCount << std::endl; struct usb_device *dev; // loop through each device and display its vid pid for (dev = bus->devices; dev; dev = dev->next) { struct usb_device_descriptor* pUsbDev = &dev->descriptor; if(pUsbDev->bDeviceClass == 0x09) std::cout << "Device is a HUB\n"; if(pUsbDev->bDeviceClass == 0x07) std::cout << "Device is a printer:\n"; if(pUsbDev->bDeviceClass == 0x08) std::cout << "Device is a mass storage device:\n"; std::cout << "Device Class: " << (int)pUsbDev->bDeviceClass << std::endl; std::cout << "VID: " << std::dec << pUsbDev->idVendor << " " << std::hex << pUsbDev->idVendor << std::endl; std::cout << "PID: " << std::dec << pUsbDev->idProduct << " " << std::hex << pUsbDev->idProduct << std::endl; if(dev->num_children > 0) { struct usb_device* pChild = *(dev->children); while(pChild) { std::cout << "Childs device class: " << std::dec << pChild->descriptor.bDeviceClass << " " << std::hex << pChild->descriptor.bDeviceClass << std::endl; pChild = pChild->next; } } } } return 0; } Any ideas why I'm not seeing any devices? Andy
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807222220.10176.af300wsm>