Date: Sat, 29 Sep 2007 07:42:16 -0700 From: Chuck T. <freebsdfan@hotmail.com> To: Xiaofan Chen <xiaofanc@gmail.com> Cc: freebsd-usb@freebsd.org Subject: RE: snd_uaudio with libusb ? Message-ID: <BAY116-W369496EF9838627D320790C7B30@phx.gbl> In-Reply-To: <a276da400709290213v6d747d3bh4f3e4de212d5b602@mail.gmail.com> References: <BAY116-W4072AA56B15EBD7B73FAC9C7B20@phx.gbl> <a276da400709281906m28bacac2r80c27074e222c597@mail.gmail.com> <BAY116-W245D862663F945A3204C2CC7B30@phx.gbl> <a276da400709290213v6d747d3bh4f3e4de212d5b602@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> On 9/29/07, Chuck T. <freebsdfan@hotmail.com> wrote: > > > > >I think your device is a USB composite USB device with two > > >interfaces (one for USB audio and the other for GPIO). How > > >do you control the GPIO under Linux (by control transfer > > >or interrupt/bulk transfer)? If the Linux application indeed > > >works at the same time as the USB audio, then Linux > > >does bind different driver to different interfaces (one for > > >the usb audio interface and no driver for the GPIO interface). > > > > I talk to the GPIO bits via vendor specific requests to the control pip= e. > > I do a usb_open() when my application loads and never close it. When I= need > > to set a GPIO bit I use usb_control_msg(). I've never "looked under th= e > > covers" to see why it works, but it does. > > >=20 > So this works under Linux but not FreeBSD. Maybe this is just a limitatio= n > of libusb under FreeBSD. Anyway, it is said that libusb is just a thin > wrapper on top of USB. You may want to use the lower level api instead. Yes I believe that is the case. I'm hoping there is a simple fix that will= allow me to use libusb for OS portability. I don't want to have to write OS spec= ific code if I can avoid it. I've been using FreeBSD since the 1.0 and I really want my app to run on FreeBSD but frankly 90% of the users will probably be running on Linux anyway. > I confess I do not know further (like how to bind ugen to individual inte= rfaces > and use IOCTL to perform usb transfer). But if post some codes, > others may be able to help you. Sure. I doubt it will help as the problem is related to libusb but here's = my code: static usb_dev_handle *udev =3D NULL; void UsbKeyRadio(int bKey) { int ret; char Buf[2] =3D {0xff,0xff}; if(bKey) { // Set PTT bit low Buf[0] =3D 0; } else { // Set PTT bit high Buf[0] =3D 0x20; } ret =3D usb_control_msg(udev,USB_TYPE_VENDOR,WRITE_GPIO,0,0,Buf,2,1000); if(ret !=3D 2) { LOG_ERROR(("%s#%d: usb_control_msg returned %d (%s)\n",__FUNCTION__, __LINE__,ret,Err2String(errno))); } } int UsbInit(void) { struct usb_bus *bus; struct usb_device *dev =3D NULL; int Ret =3D ERR_USB_DEV_OPEN; // assume the worse usb_init(); usb_find_busses(); usb_find_devices(); for (bus =3D usb_busses; bus && dev =3D=3D NULL; bus =3D bus->next) { for (dev =3D bus->devices; dev; dev =3D dev->next) { if(dev->descriptor.idVendor =3D=3D 0x074d &&=20 dev->descriptor.idProduct =3D=3D 0x3556) { break; } else if(dev->descriptor.idVendor =3D=3D 0x077d &&=20 dev->descriptor.idProduct =3D=3D 0x07af) { break; } } } if(dev !=3D NULL) { if((udev =3D usb_open(dev)) !=3D NULL) { Ret =3D 0; } } else { LOG_ERROR(("%s: USB device not found\n",__FUNCTION__)); } return Ret; } _________________________________________________________________ Connect to the next generation of MSN Messenger=A0 http://imagine-msn.com/messenger/launch80/default.aspx?locale=3Den-us&sourc= e=3Dwlmailtagline=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BAY116-W369496EF9838627D320790C7B30>