From 0954a229955276e670285a5bc43024edb661e959 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Thu, 16 Aug 2012 22:30:06 +1000 Subject: [PATCH] Offset libusb reads/writes by length written as well in ztex. --- libztex.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/libztex.c b/libztex.c index 95c83f74..e4276a37 100644 --- a/libztex.c +++ b/libztex.c @@ -607,16 +607,17 @@ int libztex_scanDevices(struct libztex_dev_list*** devs_p) int libztex_sendHashData(struct libztex_device *ztex, unsigned char *sendbuf) { - int cnt, ret; + int cnt, ret, len; if (ztex == NULL || ztex->hndl == NULL) return 0; - ret = 44; + ret = 44; len = 0; while (ret > 0) { - cnt = libusb_control_transfer(ztex->hndl, 0x40, 0x80, 0, 0, sendbuf, ret, 1000); - if (cnt >= 0) + cnt = libusb_control_transfer(ztex->hndl, 0x40, 0x80, 0, 0, sendbuf + len, ret, 1000); + if (cnt >= 0) { ret -= cnt; - else + len += cnt; + } else if (cnt != LIBUSB_ERROR_TIMEOUT) break; } @@ -628,8 +629,8 @@ int libztex_sendHashData(struct libztex_device *ztex, unsigned char *sendbuf) int libztex_readHashData(struct libztex_device *ztex, struct libztex_hash_data nonces[]) { int bufsize = 12 + ztex->extraSolutions * 4; + int cnt, i, j, ret, len; unsigned char *rbuf; - int cnt, i, j, ret; if (ztex->hndl == NULL) return 0; @@ -639,12 +640,13 @@ int libztex_readHashData(struct libztex_device *ztex, struct libztex_hash_data n applog(LOG_ERR, "%s: Failed to allocate memory for reading nonces", ztex->repr); return 0; } - ret = bufsize * ztex->numNonces; + ret = bufsize * ztex->numNonces; len = 0; while (ret > 0) { - cnt = libusb_control_transfer(ztex->hndl, 0xc0, 0x81, 0, 0, rbuf, ret, 1000); - if (cnt >= 0) + cnt = libusb_control_transfer(ztex->hndl, 0xc0, 0x81, 0, 0, rbuf + len, ret, 1000); + if (cnt >= 0) { ret -= cnt; - else + len += cnt; + } else if (cnt != LIBUSB_ERROR_TIMEOUT) break; }