|
|
|
@ -58,9 +58,11 @@
@@ -58,9 +58,11 @@
|
|
|
|
|
|
|
|
|
|
// If initialisation fails the first time,
|
|
|
|
|
// sleep this amount (ms) and try again
|
|
|
|
|
#define REINIT_TIME_MS 1000 |
|
|
|
|
// But try this many times
|
|
|
|
|
#define REINIT_COUNT 6 |
|
|
|
|
#define REINIT_TIME_FIRST_MS 100 |
|
|
|
|
// Max ms per sleep
|
|
|
|
|
#define REINIT_TIME_MAX_MS 800 |
|
|
|
|
// Keep trying up to this many us
|
|
|
|
|
#define REINIT_TIME_MAX 3000000 |
|
|
|
|
|
|
|
|
|
static const char *blank = ""; |
|
|
|
|
|
|
|
|
@ -133,6 +135,8 @@ static bool bitforce_detect_one(struct libusb_device *dev, struct usb_find_devic
@@ -133,6 +135,8 @@ static bool bitforce_detect_one(struct libusb_device *dev, struct usb_find_devic
|
|
|
|
|
char devpath[20]; |
|
|
|
|
int err, amount; |
|
|
|
|
char *s; |
|
|
|
|
struct timeval init_start, init_now; |
|
|
|
|
int init_sleep, init_count; |
|
|
|
|
|
|
|
|
|
struct cgpu_info *bitforce = NULL; |
|
|
|
|
bitforce = calloc(1, sizeof(*bitforce)); |
|
|
|
@ -152,7 +156,10 @@ static bool bitforce_detect_one(struct libusb_device *dev, struct usb_find_devic
@@ -152,7 +156,10 @@ static bool bitforce_detect_one(struct libusb_device *dev, struct usb_find_devic
|
|
|
|
|
(int)(bitforce->usbdev->bus_number), |
|
|
|
|
(int)(bitforce->usbdev->device_address)); |
|
|
|
|
|
|
|
|
|
int init_count = 0; |
|
|
|
|
|
|
|
|
|
init_count = 0; |
|
|
|
|
init_sleep = REINIT_TIME_FIRST_MS; |
|
|
|
|
gettimeofday(&init_start, NULL); |
|
|
|
|
reinit: |
|
|
|
|
|
|
|
|
|
bitforce_initialise(bitforce, false); |
|
|
|
@ -164,19 +171,22 @@ reinit:
@@ -164,19 +171,22 @@ reinit:
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ((err = usb_ftdi_read_nl(bitforce, buf, sizeof(buf)-1, &amount, C_GETIDENTIFY)) < 0 || amount < 1) { |
|
|
|
|
// Maybe it was still processing previous work?
|
|
|
|
|
if (++init_count <= REINIT_COUNT) { |
|
|
|
|
if (init_count < 2) { |
|
|
|
|
applog(LOG_WARNING, "%s detect (%s) 1st init failed - retrying (%d:%d)", |
|
|
|
|
init_count++; |
|
|
|
|
gettimeofday(&init_now, NULL); |
|
|
|
|
if (us_tdiff(&init_now, &init_start) <= REINIT_TIME_MAX) { |
|
|
|
|
if (init_count == 2) { |
|
|
|
|
applog(LOG_WARNING, "%s detect (%s) 2nd init failed (%d:%d) - retrying", |
|
|
|
|
bitforce->drv->dname, devpath, amount, err); |
|
|
|
|
} |
|
|
|
|
nmsleep(REINIT_TIME_MS); |
|
|
|
|
nmsleep(init_sleep); |
|
|
|
|
if ((init_sleep * 2) <= REINIT_TIME_MAX_MS) |
|
|
|
|
init_sleep *= 2; |
|
|
|
|
goto reinit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (init_count > 0) |
|
|
|
|
applog(LOG_WARNING, "%s detect (%s) init failed %d times", |
|
|
|
|
bitforce->drv->dname, devpath, init_count); |
|
|
|
|
applog(LOG_WARNING, "%s detect (%s) init failed %d times %.2fs", |
|
|
|
|
bitforce->drv->dname, devpath, init_count, tdiff(&init_now, &init_start)); |
|
|
|
|
|
|
|
|
|
if (err < 0) { |
|
|
|
|
applog(LOG_ERR, "%s detect (%s) error identify reply (%d:%d)", |
|
|
|
|