summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-03-01 14:19:27 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-03-01 14:19:27 +0000
commit29f5d2357e1a08a14fe223200817708cb7e62ad6 (patch)
treedf68a65d1ec4dc1fbe8e6a2f0a307bb32c342c6b
parent206f1f79c84a66a7c4582f971f2e36b0d1f1372e (diff)
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
-rw-r--r--xpp/fpga_load.c21
1 files changed, 21 insertions, 0 deletions
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;
}