I occasionally get my libftdi application locking up with an error on 
ftdi_write_data().  I would like to recover from this automatically, but I 
don't know what caused the error.  The code for ftdi_write_data() calls 
libusb_bulk_transfer().  If it gets an error it returns a generic (-1).



Would it be reasonable to pass through the error from libusb_bulk_transfer() 
directly so I can diagnose the error?



Here's a snippet of the existing code.  I've highlighted the problem area in 
yellow.





int ftdi_write_data(struct ftdi_context *ftdi, const unsigned char *buf, int 
size)

{

     int offset = 0;

     int actual_length;



     if (ftdi == NULL || ftdi->usb_dev == NULL)

         ftdi_error_return(-666, "USB device unavailable");



     while (offset < size)

     {

         int write_size = ftdi->writebuffer_chunksize;



         if (offset+write_size > size)

             write_size = size-offset;



         if (libusb_bulk_transfer(ftdi->usb_dev, ftdi->in_ep, (unsigned char 
*)buf+offset, write_size, &actual_length, ftdi->usb_write_timeout) < 0)

             ftdi_error_return(-1, "usb bulk write failed");





Could we change to something like this where we pass through the specific 
negative error code from libusb_bulk_transfer()?  It seems that it might make 
it easier to figure out how to recover from an ftdi_write_data error.



     int err;

     if ((err=libusb_bulk_transfer(ftdi->usb_dev, ftdi->in_ep, (unsigned char 
*)buf+offset, write_size, &actual_length, ftdi->usb_write_timeout) < 0)) {

          Ftdi_error_return(err, "usb bulk write failed");

      }



Any suggestions for how to recover from ftdi_write_data() errors would be 
appreciated.  It seems like knowing the lower level error code might be 
helpful..



Currently, I just flush the buffers but it rarely fixes the problem.



Kind regards,

--

Rick Walker




--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscr...@developer.intra2net.com   

Reply via email to