Hello all I am having trouble communicating with a custom HID device using FreeBSD 7.2.
I was trying to use uhid, but it looks like it doesn't do interrupt out transfers. Open and read work fine, but write() errors with EIO The device is a simple PIC based IO board. When sent 64 bytes, it responds with 64 bytes. Oddly enough, my Windows version using ReadFile and WriteFile works perfectly. I'm looking into upgrading to BSD 8.0, but we have a lot of legacy code for USB that won't compile under BSD8, so I'd rather avoid it. I wrote a small test program - under BSD 8.0, it no longer hangs, but it still doesn't write, so I'm not sure 8.0 is the answer. Although it looks like the naming changed for 8. For instance, my device would be ugen0, and the first endpoint would be ugen0.1. On 8.0, ugen0-ugen4 are always there, and plugging the device in gets me ugen2.1 - not sure where the interrupt endpoint went! Here's a quick look at the test code, and output with hw.usb.debug on void errp(void); // printfs errors in nice format unsigned char io_buf[65]; //Allocate a memory buffer equal to our endpoint size + 1 NOT ON STACK!! int main(int argc,char *argv[]) { int bw; int i; int err; int device; char devname[64]; if (argc != 2) { printf("Specify device\n"); exit(1); } sprintf(devname,"/dev/%s",argv[1]); device = open(devname,O_RDWR);//|O_NONBLOCK|O_NDELAY ); printf("Open dev %s: %d\n",devname,device); for(i=0;i<5;i++) { bw = write(device,io_buf,64); printf("write %d bytes to %d returned %d\n",64,device,bw); if (bw == (-1)) errp(); bw = read(device,io_buf,64); printf("read %d bytes\n",bw); if (bw == (-1)) errp(); } close(device); exit(0); } #./iotest ugen0.1 May 26 15:40:10 kernel: usbd_open_pipe: iface=0xc54dc960 address=0x1 flags=0x0 May 26 15:40:10 kernel: usbd_setup_pipe: dev=0xc5335a80 iface=0xc54dc960 ep=0xc54dc9cc pipe=0xe7b9b958 May 26 15:40:10 kernel: usbd_open_pipe_intr: address=0x81 flags=0x4 len=64 May 26 15:40:10 kernel: usbd_open_pipe: iface=0xc54dc960 address=0x81 flags=0x1 May 26 15:40:10 kernel: usbd_setup_pipe: dev=0xc5335a80 iface=0xc54dc960 ep=0xc54dc9c0 pipe=0xe7b9b930 May 26 15:40:10 kernel: usbd_alloc_xfer() = 0xc529c600 May 26 15:40:10 kernel: usbd_transfer: xfer=0xc529c600, flags=4, pipe=0xc57b9480, running=0 May 26 15:40:10 kernel: usbd_dump_queue: pipe=0xc57b9480 May 26 15:40:10 kernel: usb_insert_transfer: pipe=0xc57b9480 running=0 timeout=0 Open dev /dev/ugen0.1: 3 May 26 15:40:10 kernel: usbd_alloc_xfer() = 0xc528c000 May 26 15:40:10 kernel: usbd_intr_transfer: start transfer 64 bytes May 26 15:40:10 kernel: usbd_transfer: xfer=0xc528c000, flags=0, pipe=0xc57c2a00, running=0 May 26 15:40:10 kernel: usbd_dump_queue: pipe=0xc57c2a00 May 26 15:40:10 kernel: usb_insert_transfer: pipe=0xc57c2a00 running=0 timeout=0 Stalls here, until CTRL-C May 26 15:40:22 kernel: usbd_intr_transfer: tsleep=-1 May 26 15:40:22 kernel: usbd_ar_pipe: pipe=0xc57c2a00 May 26 15:40:22 kernel: usbd_dump_queue: pipe=0xc57c2a00 May 26 15:40:22 kernel: xfer=0xc528c000 May 26 15:40:22 kernel: usbd_ar_pipe: pipe=0xc57c2a00 xfer=0xc528c000 (methods=0xc0c50924) May 26 15:40:22 kernel: usb_schedsoftintr: polling=0 May 26 15:40:22 kernel: usb_transfer_complete: pipe=0xc57c2a00 xfer=0xc528c000 status=6 actlen=0 May 26 15:40:22 kernel: usb_transfer_complete: repeat=0 new head=0 May 26 15:40:22 kernel: usbd_free_xfer: 0xc528c000 May 26 15:40:22 kernel: usbd_ar_pipe: pipe=0xc57c2a00 May 26 15:40:22 kernel: usbd_dump_queue: pipe=0xc57c2a00 May 26 15:40:22 kernel: usbd_ar_pipe: pipe=0xc57b9480 May 26 15:40:22 kernel: usbd_dump_queue: pipe=0xc57b9480 May 26 15:40:22 kernel: xfer=0xc529c600 May 26 15:40:22 kernel: usbd_ar_pipe: pipe=0xc57b9480 xfer=0xc529c600 (methods=0xc0c50924) May 26 15:40:22 kernel: usb_schedsoftintr: polling=0 May 26 15:40:22 kernel: usb_transfer_complete: pipe=0xc57b9480 xfer=0xc529c600 status=6 actlen=0 May 26 15:40:22 kernel: usb_transfer_complete: repeat=0 new head=0 May 26 15:40:29 kernel: usb_event_thread: woke up May 26 15:40:29 kernel: usb_discover May 26 15:40:29 kernel: usb_event_thread: woke up May 26 15:40:29 kernel: usb_discover May 26 15:40:29 kernel: usb_event_thread: woke up Any ideas? Sam _______________________________________________ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"