From 29f5d2357e1a08a14fe223200817708cb7e62ad6 Mon Sep 17 00:00:00 2001 From: Tzafrir Cohen Date: Sun, 1 Mar 2009 14:19:27 +0000 Subject: fpga_load.c: Flush USB device buffer on startup. Fixes some firmware loading issues. git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/trunk@6054 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- xpp/fpga_load.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/xpp/fpga_load.c b/xpp/fpga_load.c index 1652457..d99e3e7 100644 --- a/xpp/fpga_load.c +++ b/xpp/fpga_load.c @@ -360,6 +360,23 @@ int recv_usb(const char *msg, struct my_usb_device *mydev, char *buf, size_t len return ret; } +int flush_read(struct my_usb_device *mydev) +{ + char tmpbuf[BUFSIZ]; + int ret; + + memset(tmpbuf, 0, BUFSIZ); + ret = recv_usb("flush_read", mydev, tmpbuf, sizeof(tmpbuf), TIMEOUT); + if(ret < 0 && ret != -ETIMEDOUT) { + ERR("ret=%d\n", ret); + return ret; + } else if(ret > 0) { + DBG("Got %d bytes:\n", ret); + dump_packet(__FUNCTION__, tmpbuf, ret); + } + return 0; +} + #ifdef XORCOM_INTERNAL int eeprom_set(struct my_usb_device *mydev, const struct myeeprom *eeprom) { @@ -638,6 +655,10 @@ int my_usb_device_init(const char devpath[], struct my_usb_device *mydev, const ERR("Clearing input endpoint: %s\n", usb_strerror()); return 0; } + if(flush_read(mydev) < 0) { + ERR("flush_read failed\n"); + return 0; + } return 1; } -- cgit v1.2.3