Hi List!
I'm Luca and I'm trying to write a kind of driver for USB SMARTCARD Reader on FreeBSD 8.2-STABLE.

The approach adopted is to use libusb20, but I've some problem using interrupt end point...

I successfully implemented a find_device() routine scanning all device and it works well.
Then I want to use all 3 endpoints provided by this calls of devices:
1 BULK OUT endpoint (to send messages)
1 BULK IN endpoint (to read replies)
1 IRQ IN endpoint (to read the change of the slot status)

I have no problem to open BULK endpoints, but the IRQ endpoint open fails.
The procedure I follow is:

libusb20_dev_open( pdev, 32 )
libusb20_dev_set_config_index( pdev, 0)
bin_ep = libusb20_tr_get_pointer( pdev, 0 );
libusb20_tr_open( bin_ep, 4096, 1, bin_ep_num );
bout_ep = libusb20_tr_get_pointer( pdev, 1 );
libusb20_tr_open( bout_ep, 4096, 1, bout_ep_num );
irq_ep = libusb20_tr_get_pointer( pdev, 2 );
libusb20_tr_open( irq_ep, 4096, 1, irq_ep_num );

The last open fails and I don't understand why. LIBUSB20 error code is -2 (LIBUSB20_ERROR_INVALID_PARAM) and errno is 22 (EINVAL). The smartcard reader devices has 1 configuration, 1 interface and 3 endpoints. These data are confirmed by my find_device routine and by usbconfig utility. The irq ep is the number 2 and the unique interface has bNumEndpoints = 0x0003.

Scanning the source code, I guess the error code comes form the ioctl( USB_FS_OPEN )

u.popen->ep_index >= f->fs_ep_max

Am I missing some initialization? Should I configure something else? Any help is really appreciated!

Thanks in advance


PS There is some examples of usage of libusb20? I read usbconfig source code and it's a great source of information, but I didn't found examples about transfers...
freebsd-usb@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to