Add bxf debugging option and osm led modes
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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
diff --git a/cgminer.c b/cgminer.c
index f044b1d..615efdd 100644
--- a/cgminer.c
+++ b/cgminer.c
@@ -737,6 +737,11 @@ static char *set_int_1_to_10(const char *arg, int *i)
return set_int_range(arg, i, 1, 10);
}
+static char __maybe_unused *set_int_0_to_4(const char *arg, int *i)
+{
+ return set_int_range(arg, i, 0, 4);
+}
+
#ifdef USE_FPGA_SERIAL
static char *opt_add_serial;
static char *add_serial(char *arg)
@@ -1180,6 +1185,9 @@ static struct opt_table opt_config_table[] = {
OPT_WITH_ARG("--bxf-bits",
set_int_32_to_63, opt_show_intval, &opt_bxf_bits,
"Set max BXF/HXF bits for overclocking"),
+ OPT_WITH_ARG("--bxf-debug",
+ set_int_0_to_4, opt_show_intval, &opt_bxf_debug,
+ "BXF: Debug all USB I/O, > is to the board(s), < is from the board(s)"),
OPT_WITH_ARG("--bxf-temp-target",
set_int_0_to_200, opt_show_intval, &opt_bxf_temp_target,
"Set target temperature for BXF/HXF devices"),
@@ -1320,6 +1328,9 @@ static struct opt_table opt_config_table[] = {
OPT_WITHOUT_ARG("--no-submit-stale",
opt_set_invbool, &opt_submit_stale,
"Don't submit shares if they are detected as stale"),
+ OPT_WITH_ARG("--osm-led-mode",
+ set_int_0_to_4, opt_show_intval, &opt_osm_led_mode,
+ "Set LED mode for OneStringMiner devices"),
OPT_WITH_ARG("--pass|-p",
set_pass, NULL, &opt_set_null,
"Password for bitcoin JSON-RPC server"),
diff --git a/driver-bitfury.c b/driver-bitfury.c
index 673e1b0..19eb777 100644
--- a/driver-bitfury.c
+++ b/driver-bitfury.c
@@ -19,6 +19,8 @@ int opt_bxf_temp_target = BXF_TEMP_TARGET / 10;
int opt_nf1_bits = 50;
int opt_bxm_bits = 54;
int opt_bxf_bits = 54;
+int opt_bxf_debug;
+int opt_osm_led_mode = 4;
/* Wait longer 1/3 longer than it would take for a full nonce range */
#define BF1WAIT 1600
@@ -206,6 +208,13 @@ static bool bxf_send_msg(struct cgpu_info *bitfury, char *buf, enum usb_cmds cmd
if (unlikely(bitfury->usbinfo.nodev))
return false;
+ if (opt_bxf_debug) {
+ char *strbuf = str_text(buf);
+
+ applog(LOG_ERR, "%s %d: >BXF [%s]", bitfury->drv->name, bitfury->device_id, strbuf);
+ free(strbuf);
+ }
+
len = strlen(buf);
applog(LOG_DEBUG, "%s %d: Sending %s", bitfury->drv->name, bitfury->device_id, buf);
err = usb_write(bitfury, buf, len, &amount, cmd);
@@ -217,6 +226,22 @@ static bool bxf_send_msg(struct cgpu_info *bitfury, char *buf, enum usb_cmds cmd
return true;
}
+static bool bxf_send_debugmode(struct cgpu_info *bitfury)
+{
+ char buf[16];
+
+ sprintf(buf, "debug-mode %d\n", opt_bxf_debug);
+ return bxf_send_msg(bitfury, buf, C_BXF_DEBUGMODE);
+}
+
+static bool bxf_send_ledmode(struct cgpu_info *bitfury)
+{
+ char buf[16];
+
+ sprintf(buf, "led-mode %d\n", opt_osm_led_mode);
+ return bxf_send_msg(bitfury, buf, C_BXF_LEDMODE);
+}
+
/* Returns the amount received only if we receive a full message, otherwise
* it returns the err value. */
static int bxf_recv_msg(struct cgpu_info *bitfury, char *buf)
@@ -1042,7 +1067,7 @@ static void *bxf_get_results(void *userdata)
bxf_update_work(bitfury, info);
while (likely(!bitfury->shutdown)) {
- char *msg;
+ char *msg, *strbuf;
int err;
if (unlikely(bitfury->usbinfo.nodev))
@@ -1057,14 +1082,25 @@ static void *bxf_get_results(void *userdata)
if (!err)
continue;
- PARSE_BXF_MSG(submit);
+ if (opt_bxf_debug) {
+ strbuf = str_text(buf);
+ applog(LOG_ERR, "%s %d: < [%s]",
+ bitfury->drv->name, bitfury->device_id, strbuf);
+ free(strbuf);
+ }
+
+ PARSE_BXF_MSG(submit);
PARSE_BXF_MSG(temp);
PARSE_BXF_MSG(needwork);
PARSE_BXF_MSG(job);
PARSE_BXF_MSG(hwerror);
- applog(LOG_DEBUG, "%s %d: Unrecognised string %s",
- bitfury->drv->name, bitfury->device_id, buf);
+ if (buf[0] != '#') {
+ strbuf = str_text(buf);
+ applog(LOG_DEBUG, "%s %d: Unrecognised string %s",
+ bitfury->drv->name, bitfury->device_id, strbuf);
+ free(strbuf);
+ }
}
out:
return NULL;
@@ -1072,9 +1108,13 @@ out:
static bool bxf_prepare(struct cgpu_info *bitfury, struct bitfury_info *info)
{
+ bxf_send_ledmode(bitfury);
+ bxf_send_debugmode(bitfury);
+
mutex_init(&info->lock);
if (pthread_create(&info->read_thr, NULL, bxf_get_results, (void *)bitfury))
quit(1, "Failed to create bxf read_thr");
+
return bxf_send_clock(bitfury, info, opt_bxf_bits);
}
diff --git a/driver-bitfury.h b/driver-bitfury.h
index 028e17b..742d7b9 100644
--- a/driver-bitfury.h
+++ b/driver-bitfury.h
@@ -26,6 +26,8 @@ extern int opt_bxf_temp_target;
extern int opt_nf1_bits;
extern int opt_bxm_bits;
extern int opt_bxf_bits;
+extern int opt_bxf_debug;
+extern int opt_osm_led_mode;
#define NF1_PIN_LED 0
#define NF1_PIN_SCK_OVR 5
diff --git a/usbutils.h b/usbutils.h
index b05882e..aa67d39 100644
--- a/usbutils.h
+++ b/usbutils.h
@@ -376,6 +376,8 @@ struct cg_usb_info {
USB_ADD_COMMAND(C_BXF_MAXROLL, "BXFMaxRoll") \
USB_ADD_COMMAND(C_BXF_FLUSH, "BXFFlush") \
USB_ADD_COMMAND(C_BXF_CLOCK, "BXFClock") \
+ USB_ADD_COMMAND(C_BXF_LEDMODE, "BXFLedMode") \
+ USB_ADD_COMMAND(C_BXF_DEBUGMODE, "BXFDebugMode") \
USB_ADD_COMMAND(C_BXM_FLUSH, "BXMFlush") \
USB_ADD_COMMAND(C_BXM_SRESET, "BXMSReset") \
USB_ADD_COMMAND(C_BXM_SETLATENCY, "BXMSetLatency") \