mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-10 23:08:07 +00:00
bflsc add volt stats
This commit is contained in:
parent
21fd80dfa4
commit
bd4d04b260
@ -68,7 +68,7 @@ struct bflsc_dev {
|
||||
// Stats
|
||||
float temp1;
|
||||
float temp2;
|
||||
float vcc1; // TODO? get V also
|
||||
float vcc1;
|
||||
float vcc2;
|
||||
float vmain;
|
||||
float temp1_max;
|
||||
@ -866,7 +866,7 @@ static void get_bflsc_statline_before(char *buf, struct cgpu_info *bflsc)
|
||||
}
|
||||
rd_unlock(&(sc_info->stat_lock));
|
||||
|
||||
tailsprintf(buf, "max%5.1fC%4.2fV | ", temp, vcc1);
|
||||
tailsprintf(buf, " max%3.0fC %4.2fV | ", temp, vcc1);
|
||||
}
|
||||
|
||||
static bool getok(struct cgpu_info *bflsc, enum usb_cmds cmd, int *err, int *amount)
|
||||
@ -987,13 +987,16 @@ static void bflsc_flash_led(struct cgpu_info *bflsc, int dev)
|
||||
static bool bflsc_get_temp(struct cgpu_info *bflsc, int dev)
|
||||
{
|
||||
struct bflsc_info *sc_info = (struct bflsc_info *)(bflsc->device_file);
|
||||
char buf[BFLSC_BUFSIZ+1];
|
||||
char temp_buf[BFLSC_BUFSIZ+1];
|
||||
char volt_buf[BFLSC_BUFSIZ+1];
|
||||
char *tmp;
|
||||
int err, amount;
|
||||
char *firstname, **fields, *lf;
|
||||
char xlink[17];
|
||||
int count;
|
||||
bool res;
|
||||
float temp, temp1, temp2;
|
||||
float vcc1, vcc2, vmain;
|
||||
|
||||
// Device is gone
|
||||
if (bflsc->usbinfo.nodev)
|
||||
@ -1026,7 +1029,29 @@ static bool bflsc_get_temp(struct cgpu_info *bflsc, int dev)
|
||||
return false;
|
||||
}
|
||||
|
||||
err = usb_ftdi_read_nl(bflsc, buf, sizeof(buf)-1, &amount, C_GETTEMPERATURE);
|
||||
err = usb_ftdi_read_nl(bflsc, temp_buf, sizeof(temp_buf)-1, &amount, C_GETTEMPERATURE);
|
||||
if (err < 0 || amount < 1) {
|
||||
mutex_unlock(&(bflsc->device_mutex));
|
||||
if (err < 0) {
|
||||
applog(LOG_ERR, "%s%i: Error: Get%s temp return invalid/timed out (%d:%d)",
|
||||
bflsc->drv->name, bflsc->device_id, xlink, amount, err);
|
||||
} else {
|
||||
applog(LOG_ERR, "%s%i: Error: Get%s temp returned nothing (%d:%d)",
|
||||
bflsc->drv->name, bflsc->device_id, xlink, amount, err);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// N.B. we only get the voltages if the temp succeeds - temp is the important one
|
||||
err = write_to_dev(bflsc, dev, BFLSC_VOLTAGE, BFLSC_VOLTAGE_LEN, &amount, C_REQUESTVOLTS);
|
||||
if (err < 0 || amount != BFLSC_VOLTAGE_LEN) {
|
||||
mutex_unlock(&(bflsc->device_mutex));
|
||||
applog(LOG_ERR, "%s%i: Error: Request%s volts invalid/timed out (%d:%d)",
|
||||
bflsc->drv->name, bflsc->device_id, xlink, amount, err);
|
||||
return false;
|
||||
}
|
||||
|
||||
err = usb_ftdi_read_nl(bflsc, volt_buf, sizeof(volt_buf)-1, &amount, C_GETTEMPERATURE);
|
||||
if (err < 0 || amount < 1) {
|
||||
mutex_unlock(&(bflsc->device_mutex));
|
||||
if (err < 0) {
|
||||
@ -1041,12 +1066,14 @@ static bool bflsc_get_temp(struct cgpu_info *bflsc, int dev)
|
||||
|
||||
mutex_unlock(&(bflsc->device_mutex));
|
||||
|
||||
res = breakdown(ALLCOLON, buf, &count, &firstname, &fields, &lf);
|
||||
res = breakdown(ALLCOLON, temp_buf, &count, &firstname, &fields, &lf);
|
||||
if (lf)
|
||||
*lf = '\0';
|
||||
if (!res || count != 2 || !lf) {
|
||||
applog(LOG_WARNING, "%s%i: Invalid%s temp reply: '%s%s'",
|
||||
bflsc->drv->name, bflsc->device_id, xlink, buf, lf ? LFSTR : BLANK);
|
||||
tmp = str_text(temp_buf);
|
||||
applog(LOG_WARNING, "%s%i: Invalid%s temp reply: '%s'",
|
||||
bflsc->drv->name, bflsc->device_id, xlink, tmp);
|
||||
free(tmp);
|
||||
freebreakdown(&count, &firstname, &fields);
|
||||
dev_error(bflsc, REASON_DEV_COMMS_ERROR);
|
||||
return false;
|
||||
@ -1055,6 +1082,33 @@ static bool bflsc_get_temp(struct cgpu_info *bflsc, int dev)
|
||||
temp = temp1 = (float)atoi(fields[0]);
|
||||
temp2 = (float)atoi(fields[1]);
|
||||
|
||||
res = breakdown(NOCOLON, volt_buf, &count, &firstname, &fields, &lf);
|
||||
if (lf)
|
||||
*lf = '\0';
|
||||
if (!res || count != 3 || !lf) {
|
||||
tmp = str_text(volt_buf);
|
||||
applog(LOG_WARNING, "%s%i: Invalid%s volt reply: '%s'",
|
||||
bflsc->drv->name, bflsc->device_id, xlink, tmp);
|
||||
free(tmp);
|
||||
freebreakdown(&count, &firstname, &fields);
|
||||
dev_error(bflsc, REASON_DEV_COMMS_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
vcc1 = (float)atoi(fields[0]) / 1000.0;
|
||||
vcc2 = (float)atoi(fields[1]) / 1000.0;
|
||||
vmain = (float)atoi(fields[2]) / 1000.0;
|
||||
if (vcc1 > 0 || vcc2 > 0 || vmain > 0) {
|
||||
wr_lock(&(sc_info->stat_lock));
|
||||
if (vcc1 > 0)
|
||||
sc_info->sc_devs[dev].vcc1 = vcc1;
|
||||
if (vcc2 > 0)
|
||||
sc_info->sc_devs[dev].vcc2 = vcc2;
|
||||
if (vmain > 0)
|
||||
sc_info->sc_devs[dev].vmain = vmain;
|
||||
wr_unlock(&(sc_info->stat_lock));
|
||||
}
|
||||
|
||||
if (temp1 > 0 || temp2 > 0) {
|
||||
wr_lock(&(sc_info->stat_lock));
|
||||
sc_info->sc_devs[dev].temp1 = temp1;
|
||||
|
@ -296,6 +296,7 @@ static const char *C_QUEJOB_S = "QueJob";
|
||||
static const char *C_QUEJOBSTATUS_S = "QueJobStatus";
|
||||
static const char *C_QUEFLUSH_S = "QueFlush";
|
||||
static const char *C_QUEFLUSHREPLY_S = "QueFlushReply";
|
||||
static const char *C_REQUESTVOLTS_S = "RequestVolts";
|
||||
|
||||
#ifdef EOL
|
||||
#undef EOL
|
||||
@ -763,6 +764,7 @@ static void cgusb_check_init()
|
||||
usb_commands[C_QUEJOBSTATUS] = C_QUEJOBSTATUS_S;
|
||||
usb_commands[C_QUEFLUSH] = C_QUEFLUSH_S;
|
||||
usb_commands[C_QUEFLUSHREPLY] = C_QUEFLUSHREPLY_S;
|
||||
usb_commands[C_REQUESTVOLTS] = C_REQUESTVOLTS_S;
|
||||
|
||||
stats_initialised = true;
|
||||
}
|
||||
|
@ -133,6 +133,7 @@ enum usb_cmds {
|
||||
C_QUEJOBSTATUS,
|
||||
C_QUEFLUSH,
|
||||
C_QUEFLUSHREPLY,
|
||||
C_REQUESTVOLTS,
|
||||
C_MAX
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user