Skip to content
This repository has been archived by the owner on May 27, 2020. It is now read-only.

Commit

Permalink
Merge pull request #227 from luke-jr/serialusb
Browse files Browse the repository at this point in the history
FPGA - allow device detect override without an open failure
  • Loading branch information
ckolivas committed Jun 19, 2012
2 parents f70577b + 4dee0d0 commit d594aaf
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 12 deletions.
7 changes: 7 additions & 0 deletions README
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@ FPGA mining boards(BitForce, Icarus, ModMiner, Ztex) only options:

--scan-serial|-S <arg> Serial port to probe for FPGA mining device

This option is only for BitForce, Icarus, and/or ModMiner FPGAs

By default, cgminer will scan for autodetected FPGAs unless at least one
-S is specified for that driver. If you specify -S and still want cgminer
to scan, you must also use "-S auto". If you want to prevent cgminer from
Expand All @@ -210,6 +212,11 @@ FPGA mining boards(BitForce, Icarus, ModMiner, Ztex) only options:
On windows <arg> is usually of the format \\.\COMn
(where n = the correct device number for the FPGA device)

The official supplied binaries are compiled with support for all FPGAs.
To force the code to only attempt detection with a specific driver,
prepend the argument with the driver name followed by a colon.
For example, "icarus:/dev/ttyUSB0" or "bitforce:\\.\COM5"

For other FPGA details see the FPGA-README


Expand Down
6 changes: 4 additions & 2 deletions driver-bitforce.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@ static bool bitforce_detect_one(const char *devpath)
char *s;
char pdevbuf[0x100];

applog(LOG_DEBUG, "BitForce Detect: Attempting to open %s", devpath);

int fdDev = BFopen(devpath);
if (unlikely(fdDev == -1)) {
applog(LOG_DEBUG, "BitForce Detect: Failed to open %s", devpath);
applog(LOG_ERR, "BitForce Detect: Failed to open %s", devpath);
return false;
}
BFwrite(fdDev, "ZGX", 3);
Expand Down Expand Up @@ -96,7 +98,7 @@ static char bitforce_detect_auto()

static void bitforce_detect()
{
serial_detect_auto("bitforce", bitforce_detect_one, bitforce_detect_auto);
serial_detect_auto(bitforce_api.dname, bitforce_detect_one, bitforce_detect_auto);
}

static void get_bitforce_statline_before(char *buf, struct cgpu_info *bitforce)
Expand Down
4 changes: 3 additions & 1 deletion driver-icarus.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,8 @@ static bool icarus_detect_one(const char *devpath)
unsigned char ob_bin[64], nonce_bin[ICARUS_READ_SIZE];
char *nonce_hex;

applog(LOG_DEBUG, "Icarus Detect: Attempting to open %s", devpath);

fd = icarus_open2(devpath, true);
if (unlikely(fd == -1)) {
applog(LOG_ERR, "Icarus Detect: Failed to open %s", devpath);
Expand Down Expand Up @@ -444,7 +446,7 @@ static bool icarus_detect_one(const char *devpath)

static void icarus_detect()
{
serial_detect("icarus", icarus_detect_one);
serial_detect(icarus_api.dname, icarus_detect_one);
}

static bool icarus_prepare(struct thr_info *thr)
Expand Down
2 changes: 1 addition & 1 deletion driver-modminer.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ modminer_detect_auto()
static void
modminer_detect()
{
serial_detect_auto("modminer", modminer_detect_one, modminer_detect_auto);
serial_detect_auto(modminer_api.dname, modminer_detect_one, modminer_detect_auto);
}

#define bailout(...) return _bailout(-1, modminer, __VA_ARGS__);
Expand Down
13 changes: 9 additions & 4 deletions fpgautils.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,20 +119,25 @@ serial_autodetect_devserial(detectone_func_t detectone, const char*prodname)
}

char
_serial_detect(const char*dnamec, size_t dnamel, detectone_func_t detectone, autoscan_func_t autoscan, bool forceauto)
_serial_detect(const char*dname, detectone_func_t detectone, autoscan_func_t autoscan, bool forceauto)
{
if (total_devices == MAX_DEVICES)
return 0;

struct string_elist *iter, *tmp;
const char*s;
const char*s, *p;
bool inhibitauto = false;
char found = 0;
size_t dnamel = strlen(dname);

list_for_each_entry_safe(iter, tmp, &scan_devices, list) {
s = iter->string;
if (!strncmp(dnamec, iter->string, dnamel))
s += dnamel;
if ((p = strchr(s, ':')) && p[1] != '\0') {
size_t plen = p - s;
if (plen != dnamel || strncasecmp(s, dname, plen))
continue;
s = p + 1;
}
if (!strcmp(s, "auto"))
forceauto = true;
else
Expand Down
8 changes: 4 additions & 4 deletions fpgautils.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@
typedef bool(*detectone_func_t)(const char*);
typedef char(*autoscan_func_t)();

extern char _serial_detect(const char*dnamec, size_t dnamel, detectone_func_t, autoscan_func_t, bool force_autoscan);
extern char _serial_detect(const char*dname, detectone_func_t, autoscan_func_t, bool force_autoscan);
#define serial_detect_fauto(dname, detectone, autoscan) \
_serial_detect(dname ":", sizeof(dname), detectone, autoscan, true)
_serial_detect(dname, detectone, autoscan, true)
#define serial_detect_auto(dname, detectone, autoscan) \
_serial_detect(dname ":", sizeof(dname), detectone, autoscan, false)
_serial_detect(dname, detectone, autoscan, false)
#define serial_detect(dname, detectone) \
_serial_detect(dname ":", sizeof(dname), detectone, NULL, false)
_serial_detect(dname, detectone, NULL, false)
extern char serial_autodetect_devserial(detectone_func_t, const char*prodname);
extern char serial_autodetect_udev (detectone_func_t, const char*prodname);

Expand Down

0 comments on commit d594aaf

Please sign in to comment.