freebsd 6.3 smart card reader usb hang?
kurganme
me at NOSPAMkurganme.cjb.net
Thu May 8 11:38:51 UTC 2008
Hi everybody,
I have a device, an usb smart card reader (I use it succesfully under
Windows Linux and MacOS-X), to which I'd like to send some messages.
I wrote a simple code in C to send a "request status" message, but it
not works.
The process hangs writing to the endpoint.
I'm sure that the message I send is correct (I take it from the API
documentation of the device).
I have tried to run the code on different PCs with different usb
controllers (Intel, VIA, nVidia)
The code is:
> cat >test_device.c
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <dev/usb/usb.h>
int main() {
int d, i;
struct usb_ctl_request req;
unsigned char buffer[256];
d = open("/dev/ugen0.2", O_RDWR);
printf("opening...\n");
if(d<0) {
fprintf(stderr, "open error (%d).\n", errno);
exit(1);
}
printf("writing...\n");
if(write(d, "\x01\x01\x00\x00", 4)<0) {
fprintf(stderr, "write error (%d).\n", errno);
close(d);
exit(1);
}
printf("reading...\n");
if(read(d, buffer, 20)<0) {
fprintf(stderr, "read error (%d).\n", errno);
close(d);
exit(1);
}
for(i=0; i<20; i++) printf("%02x", buffer[i]);
printf("\n");
printf("closing...\n");
close(d);
return 0;
}
> gcc test_device.c
I have activeted the debug option this way:
> sudo sysctl hw.usb.debug=15
> sudo sysctl hw.usb.uhci.debug=15
> sudo sysctl hw.usb.ugen.debug=15
When I execute the code, it hangs on writing:
> sudo ./a.out
opening...
writing...<hang>
This is the Log I obtained:
---- BEGIN KERNEL LOG ----
ugenopen: flag=3, mode=8192, unit=0 endpt=2
ugenopen: sc=0xc4f66000, endpt=2, dir=0, sce=0xc4f6639c
usbd_open_pipe: iface=0xc4f5f1e0 address=0x2 flags=0x0
usbd_setup_pipe: dev=0xc4f4fc80 iface=0xc4f5f1e0 ep=0xc4f4d2cc
pipe=0xed0bf964
uhci_open: pipe=0xc52e7400, addr=2, endpt=2 (1)
ugenopen: sc=0xc4f66000, endpt=2, dir=1, sce=0xc4f6647c
usbd_open_pipe: iface=0xc4f5f1e0 address=0x82 flags=0x0
usbd_setup_pipe: dev=0xc4f4fc80 iface=0xc4f5f1e0 ep=0xc4f4d2d8
pipe=0xed0bf964
uhci_open: pipe=0xc53f7100, addr=2, endpt=130 (1)
ugen0: ugenwrite: 2
usbd_alloc_xfer() = 0xc4eede00
ugenwrite: transfer 4 bytes
usbd_bulk_transfer: start transfer 4 bytes
usbd_transfer: xfer=0xc4eede00, flags=0, pipe=0xc52e7400, running=0
usbd_dump_queue: pipe=0xc52e7400
usb_allocmem: use frag=0xc4f21f00 size=4
usb_insert_transfer: pipe=0xc52e7400 running=0 timeout=0
uhci_device_bulk_start: xfer=0xc4eede00 len=4 flags=0 ii=0xc4eede74
uhci_alloc_std_chain: addr=2 endpt=2 len=4 speed=2 flags=0x0
uhci_alloc_std_chain: maxp=64 ntd=1
uhci_alloc_std_chain: nexttog=1
uhci_device_bulk_transfer: data(1)
TD(0xc4ee9f80) at 0025df80 = link=0x00000005 status=0x198003ff
token=0x006102e1 buffer=0x3ca35f00
5<T,VF> 198003ff<ACTIVE,IOC>,errcnt=3,actlen=0
pid=e1,addr=2,endpt=2,D=0,maxlen=4
uhci_add_bulk: sqh=0xc4ee8f40
uhci_start_loop: add
uhci_device_bulk_transfer: data(2)
TD(0xc4ee9f80) at 0025df80 = link=0x00000005 status=0x19880003
token=0x006102e1 buffer=0x3ca35f00
5<T,VF> 19880003<NAK,ACTIVE,IOC>,errcnt=3,actlen=4
pid=e1,addr=2,endpt=2,D=0,maxlen=4
---- END KERNEL LOG ----
I add also some informations about Kernel and usb device:
> ident /boot/kernel/kernel | grep /dev/usb/
$FreeBSD: src/sys/dev/usb/ehci.c,v 1.36.2.4 2007/08/20 13:04:04
truckman Exp $
$FreeBSD: src/sys/dev/usb/ehci_pci.c,v 1.18.2.2 2007/09/26
17:33:18 jhb Exp $
$FreeBSD: src/sys/dev/usb/hid.c,v 1.25.2.1 2006/03/25 04:46:52
iedowse Exp $
$FreeBSD: src/sys/dev/usb/if_aue.c,v 1.90.2.7 2007/02/10 15:17:34
mlaier Exp $
$FreeBSD: src/sys/dev/usb/if_axe.c,v 1.30.2.6 2007/05/21 18:13:11
brueffer Exp $
$FreeBSD: src/sys/dev/usb/if_cdce.c,v 1.7.2.7 2006/11/14 12:54:38
flz Exp $
$FreeBSD: src/sys/dev/usb/if_cue.c,v 1.57.2.4 2007/05/21 18:10:48
brueffer Exp $
$FreeBSD: src/sys/dev/usb/if_kue.c,v 1.64.2.6 2007/05/21 18:14:12
brueffer Exp $
$FreeBSD: src/sys/dev/usb/if_ural.c,v 1.10.2.11 2007/03/31
22:00:44 sam Exp $
$FreeBSD: src/sys/dev/usb/if_rue.c,v 1.21.2.5 2007/05/21 18:10:48
brueffer Exp $
$FreeBSD: src/sys/dev/usb/ohci.c,v 1.154.2.4 2006/06/26 00:31:25
iedowse Exp $
$FreeBSD: src/sys/dev/usb/ohci_pci.c,v 1.44.2.1 2006/01/29
01:26:46 iedowse Exp $
$FreeBSD: src/sys/dev/usb/ugen.c,v 1.103.2.1 2006/09/24 14:55:48
iedowse Exp $
$FreeBSD: src/sys/dev/usb/uhci.c,v 1.162.2.1 2006/03/01 01:59:04
iedowse Exp $
$FreeBSD: src/sys/dev/usb/uhci_pci.c,v 1.57 2005/03/01 07:50:11
imp Exp $
$FreeBSD: src/sys/dev/usb/uhid.c,v 1.77.2.5 2007/06/17 09:38:26
brueffer Exp $
$FreeBSD: src/sys/dev/usb/uhub.c,v 1.69.2.1 2005/12/18 15:51:31
iedowse Exp $
$FreeBSD: src/sys/dev/usb/ukbd.c,v 1.52.2.8 2007/10/25 16:56:15
jhb Exp $
$FreeBSD: src/sys/dev/usb/ulpt.c,v 1.66.2.2 2007/06/17 09:38:26
brueffer Exp $
$FreeBSD: src/sys/dev/usb/ums.c,v 1.77.2.5 2007/06/17 09:38:26
brueffer Exp $
$FreeBSD: src/sys/dev/usb/urio.c,v 1.35.2.1 2007/06/17 09:38:27
brueffer Exp $
$FreeBSD: src/sys/dev/usb/usb.c,v 1.106.2.2 2007/06/17 09:38:27
brueffer Exp $
$FreeBSD: src/sys/dev/usb/usb_ethersubr.c,v 1.20 2005/03/25
12:42:30 sobomax Exp $
$FreeBSD: src/sys/dev/usb/usb_mem.c,v 1.7.2.1 2007/05/21 18:10:48
brueffer Exp $
$FreeBSD: src/sys/dev/usb/usb_quirks.c,v 1.41.2.8 2007/04/28
20:31:30 maxim Exp $
$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.76.2.3 2006/03/01
01:59:05 iedowse Exp $
$FreeBSD: src/sys/dev/usb/usbdi.c,v 1.91.2.1 2005/12/15 00:36:00
iedowse Exp $
$FreeBSD: src/sys/dev/usb/usbdi_util.c,v 1.34 2005/03/01 08:01:22
sobomax Exp $
$FreeBSD: src/sys/dev/usb/uscanner.c,v 1.63.2.7 2007/11/04
03:28:31 luigi Exp $
> uname -a
FreeBSD sspia.dummy.loc 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #0: Thu
May 8 11:51:43 CEST 2008
root at amd.dummy.loc:/usr/obj/usr/src/sys/GENERIC_USB_DEBUG i386
> dmesg | grep -iE '^.hci[0-9]|usb[0-9]'
uhci0: <Intel 82801DB (ICH4) USB controller USB-A> port 0xe000-0xe01f
irq 5 at device 29.0 on pci0
uhci0: [GIANT-LOCKED]
uhci0: LegSup = 0x2f00
usb0: <Intel 82801DB (ICH4) USB controller USB-A> on uhci0
usb0: USB revision 1.0
ehci0: <Intel 82801DB/L/M (ICH4) USB 2.0 controller> mem
0xe8300000-0xe83003ff irq 3 at device 29.7 on pci0
ehci0: [GIANT-LOCKED]
usb1: EHCI version 1.0
usb1: companion controller, 2 ports each: usb0
usb1: <Intel 82801DB/L/M (ICH4) USB 2.0 controller> on ehci0
usb1: USB revision 2.0
usb1: handing over full speed device on port 2 to usb0
> sudo usbdevs -v
Controller /dev/usb0:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000),
Intel(0x0000), rev 1.00
port 1 powered
port 2 addr 2: full speed, power 100 mA, config 1, ACR38 USB
Reader(0x9000), ACS(0x072f), rev 1.00
Controller /dev/usb1:
addr 1: high speed, self powered, config 1, EHCI root hub(0x0000),
Intel(0x0000), rev 1.00
port 1 powered
port 2 powered
> sudo lsusb -v
Bus /dev/usb0 Device /dev/ugen0: ID 072f:9000 Advanced Card Systems, Ltd
ACR38 AC1038-based Smart Card Reader
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x072f Advanced Card Systems, Ltd
idProduct 0x9000 ACR38 AC1038-based Smart Card Reader
bcdDevice 1.00
iManufacturer 1 ACS
iProduct 2 ACR38 USB Reader
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 0 (Defined at Interface level)
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 2
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Device Status: 0x0000
(Bus Powered)
I hope that someone can help me.
Regars
Kurganme
More information about the freebsd-usb
mailing list