Browse Source

Cope with timeouts and partial reads in ztex code.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
e796284cbe
  1. 25
      libztex.c

25
libztex.c

@ -607,11 +607,19 @@ int libztex_scanDevices(struct libztex_dev_list*** devs_p)
int libztex_sendHashData(struct libztex_device *ztex, unsigned char *sendbuf) int libztex_sendHashData(struct libztex_device *ztex, unsigned char *sendbuf)
{ {
int cnt; int cnt, ret;
if (ztex == NULL || ztex->hndl == NULL) if (ztex == NULL || ztex->hndl == NULL)
return 0; return 0;
cnt = libusb_control_transfer(ztex->hndl, 0x40, 0x80, 0, 0, sendbuf, 44, 1000); ret = 44;
while (ret > 0) {
cnt = libusb_control_transfer(ztex->hndl, 0x40, 0x80, 0, 0, sendbuf, ret, 1000);
if (cnt >= 0)
ret -= cnt;
else
if (cnt != LIBUSB_ERROR_TIMEOUT)
break;
}
if (unlikely(cnt < 0)) if (unlikely(cnt < 0))
applog(LOG_ERR, "%s: Failed sendHashData with err %d", ztex->repr, cnt); applog(LOG_ERR, "%s: Failed sendHashData with err %d", ztex->repr, cnt);
@ -621,7 +629,7 @@ int libztex_sendHashData(struct libztex_device *ztex, unsigned char *sendbuf)
int libztex_readHashData(struct libztex_device *ztex, struct libztex_hash_data nonces[]) { int libztex_readHashData(struct libztex_device *ztex, struct libztex_hash_data nonces[]) {
int bufsize = 12 + ztex->extraSolutions * 4; int bufsize = 12 + ztex->extraSolutions * 4;
unsigned char *rbuf; unsigned char *rbuf;
int cnt, i, j; int cnt, i, j, ret;
if (ztex->hndl == NULL) if (ztex->hndl == NULL)
return 0; return 0;
@ -631,7 +639,16 @@ 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); applog(LOG_ERR, "%s: Failed to allocate memory for reading nonces", ztex->repr);
return 0; return 0;
} }
cnt = libusb_control_transfer(ztex->hndl, 0xc0, 0x81, 0, 0, rbuf, bufsize * ztex->numNonces, 1000); ret = bufsize * ztex->numNonces;
while (ret > 0) {
cnt = libusb_control_transfer(ztex->hndl, 0xc0, 0x81, 0, 0, rbuf, ret, 1000);
if (cnt >= 0)
ret -= cnt;
else
if (cnt != LIBUSB_ERROR_TIMEOUT)
break;
}
if (unlikely(cnt < 0)) { if (unlikely(cnt < 0)) {
applog(LOG_ERR, "%s: Failed readHashData with err %d", ztex->repr, cnt); applog(LOG_ERR, "%s: Failed readHashData with err %d", ztex->repr, cnt);
free(rbuf); free(rbuf);

Loading…
Cancel
Save