avalon for timeout allow d='calculate it' and fix uninitialised
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
diff --git a/ASIC-README b/ASIC-README
index 433b9c2..e485032 100644
--- a/ASIC-README
+++ b/ASIC-README
@@ -169,6 +169,7 @@ to replace it. It should be changed according to the frequency (last setting).
It is possible to set this a little lower if you are trying to tune for short
block mining (eg p2pool) but much lower and the device will start creating
duplicate shares.
+A value of 'd' means cgminer will calculate it for you based on the frequency
Sample settings for valid different frequencies (last 2 values):
34:375 *
diff --git a/driver-avalon.c b/driver-avalon.c
index 98dc835..3ef85e4 100644
--- a/driver-avalon.c
+++ b/driver-avalon.c
@@ -17,6 +17,7 @@
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
+#include <ctype.h>
#include <dirent.h>
#include <unistd.h>
#ifndef WIN32
@@ -332,11 +333,17 @@ static int avalon_reset(struct cgpu_info *avalon, bool initial)
return 0;
}
+static int avalon_calc_timeout(int frequency)
+{
+ return AVALON_TIMEOUT_FACTOR / frequency;
+}
+
static bool get_options(int this_option_offset, int *baud, int *miner_count,
int *asic_count, int *timeout, int *frequency)
{
char buf[BUFSIZ+1];
char *ptr, *comma, *colon, *colon2, *colon3, *colon4;
+ bool timeout_default;
size_t max;
int i, tmp;
@@ -419,18 +426,23 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
colon2, AVALON_DEFAULT_ASIC_NUM);
}
+ timeout_default = false;
if (colon3 && *colon3) {
colon4 = strchr(colon3, ':');
if (colon4)
*(colon4++) = '\0';
- tmp = atoi(colon3);
- if (tmp > 0 && tmp <= 0xff)
- *timeout = tmp;
+ if (tolower(*colon3) == 'd')
+ timeout_default = true;
else {
- quit(1, "Invalid avalon-options for "
- "timeout (%s) must be 1 ~ %d",
- colon3, 0xff);
+ tmp = atoi(colon3);
+ if (tmp > 0 && tmp <= 0xff)
+ *timeout = tmp;
+ else {
+ quit(1, "Invalid avalon-options for "
+ "timeout (%s) must be 1 ~ %d",
+ colon3, 0xff);
+ }
}
if (colon4 && *colon4) {
tmp = atoi(colon4);
@@ -439,6 +451,8 @@ static bool get_options(int this_option_offset, int *baud, int *miner_count,
AVALON_MIN_FREQUENCY, AVALON_MAX_FREQUENCY);
}
*frequency = tmp;
+ if (timeout_default)
+ *timeout = avalon_calc_timeout(*frequency);
}
}
}
@@ -645,8 +659,7 @@ static int bitburner_get_core_voltage(struct cgpu_info *avalon)
static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found)
{
- int baud, uninitialised_var(miner_count), uninitialised_var(asic_count),
- uninitialised_var(timeout), frequency = 0;
+ int baud, miner_count, asic_count, timeout, frequency;
int this_option_offset = ++option_offset;
struct avalon_info *info;
struct cgpu_info *avalon;
@@ -655,6 +668,12 @@ static bool avalon_detect_one(libusb_device *dev, struct usb_find_devices *found
avalon = usb_alloc_cgpu(&avalon_drv, AVALON_MINER_THREADS);
+ baud = AVALON_IO_SPEED;
+ miner_count = AVALON_DEFAULT_MINER_NUM;
+ asic_count = AVALON_DEFAULT_ASIC_NUM;
+ timeout = AVALON_DEFAULT_TIMEOUT;
+ frequency = AVALON_DEFAULT_FREQUENCY;
+
configured = get_options(this_option_offset, &baud, &miner_count,
&asic_count, &timeout, &frequency);
@@ -910,7 +929,7 @@ static void avalon_rotate_array(struct cgpu_info *avalon)
static void avalon_set_timeout(struct avalon_info *info)
{
- info->timeout = AVALON_TIMEOUT_FACTOR / info->frequency;
+ info->timeout = avalon_calc_timeout(info->frequency);
}
static void avalon_set_freq(struct cgpu_info *avalon, int frequency)