From: Thomas Jarosch Date: Sat, 26 Jul 2003 20:44:06 +0000 (+0000) Subject: libftdi: (tomj) implemented read X-Git-Tag: v0.2~4 X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=commitdiff_plain;h=cbabb7d3356f831ba4499583535c006c76c53d14 libftdi: (tomj) implemented read --- diff --git a/ftdi/ftdi.c b/ftdi/ftdi.c index bd45248..01d8f1a 100644 --- a/ftdi/ftdi.c +++ b/ftdi/ftdi.c @@ -199,8 +199,10 @@ int ftdi_write_data(struct ftdi_context *ftdi, unsigned char *buf, int size) { write_size = size-offset; ret=usb_bulk_write(ftdi->usb_dev, 2, buf+offset, write_size, ftdi->usb_timeout); - if (ret == -1) + if (ret == -1) { + ftdi->error_str = "bulk write failed"; return -1; + } offset += write_size; } @@ -210,14 +212,29 @@ int ftdi_write_data(struct ftdi_context *ftdi, unsigned char *buf, int size) { int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size) { - /* - unsigned char buf[64]; - int read_bytes; - - read_bytes = usb_bulk_read (udev, 0x81, (char *)&buf, 64, USB_TIMEOUT); - */ - ftdi->error_str = "Not implemented yet"; - return -1; + static unsigned char readbuf[64]; + int ret = 1; + int offset = 0; + + while (offset < size && ret > 0) { + ret = usb_bulk_read (ftdi->usb_dev, 0x81, readbuf, 64, ftdi->usb_timeout); + // Skip FTDI status bytes + if (ret >= 2) + ret-=2; + + if (ret > 0) { + memcpy (buf+offset, readbuf+2, ret); + } + + if (ret == -1) { + ftdi->error_str = "bulk read failed"; + return -1; + } + + offset += ret; + } + + return offset; } @@ -507,3 +524,4 @@ int ftdi_erase_eeprom(struct ftdi_context *ftdi) { return 0; } +