i expect that the bulk data read on the wire would be the same data in "buf". i see different data on the wire than that returned by "buf" 50% of the time.
isoc reads seem to be consistent. and both isoc/bulk writes are correct. i only have one "buf". i've tried making "buf" a static pointer: static WORD * buf; and when ever user wants to do transfers i have to read the "size" they pass in and do a "kmalloc" for "buf". after each transaction "buf" is freed. but definitely not until transaction is done. i even have a print statement right after transaction completes (see below) and it proves that "buf" is bad. anyone have any ideas? snippet of my code is below. thanks, -charyll angderson int usbx_submit_trans(struct usbxDevice *usbxPtr, struct usb_device *dev, struct _Transaction *trans, WORD *buf) { int i,j,k; usbx_show_trans(trans); switch(trans->type) { case USBX_R_BULK: FILL_BULK_URB(usbxPtr->usbx_urb, dev, usb_rcvbulkpipe(dev, trans->endpoint), buf, trans->size, usbx_urb_complete, usbxPtr); break; default: dbg("invaid trans type!"); break; } usbx_submit_urb(usbxPtr->usbx_urb); interruptible_sleep_on_timeout(&(usbxPtr->wait), trans->timeout); if (usbxPtr->usbx_urb->status!=0) { err("TIMEOUT awoken %i (%s) status=0x%x",current->pid,current->comm,usbxPtr->usbx_urb->status); //ca debug usbx_unlink_urb(usbxPtr->usbx_urb); // remove urb safely } switch (trans->type) { case USBX_R_BULK: dbg("usbx_submit_trans: print buffer read .. address=0x%lx", (DWORD)&buf); for (i=0; i<(trans->size/2); i++) { dbg(" %x ",(WORD)buf[i]); } break; default: break; } return usbxPtr->usbx_urb->status; } _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-users