diff options
author | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2009-03-01 14:19:27 +0000 |
---|---|---|
committer | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2009-03-01 14:19:27 +0000 |
commit | 29f5d2357e1a08a14fe223200817708cb7e62ad6 (patch) | |
tree | df68a65d1ec4dc1fbe8e6a2f0a307bb32c342c6b /xpp/fpga_load.c | |
parent | 206f1f79c84a66a7c4582f971f2e36b0d1f1372e (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
Diffstat (limited to 'xpp/fpga_load.c')
-rw-r--r-- | xpp/fpga_load.c | 21 |
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; } |