Browse Source

api.c poolpriority changes

nfactor-troky
Kano 13 years ago
parent
commit
854a80ff03
  1. 9
      API-README
  2. 74
      api.c
  3. 11
      compat.h

9
API-README

@ -321,7 +321,14 @@ miner.php - an example web page to access the API
Feature Changelog for external applications using the API: Feature Changelog for external applications using the API:
API V1.14 API V1.15
Added API commands:
'poolpriority'
----------
API V1.14 (cgminer v2.5.0)
Modified API commands: Modified API commands:
'stats' - more icarus timing stats added 'stats' - more icarus timing stats added

74
api.c

@ -166,7 +166,7 @@ static const char SEPARATOR = '|';
#define SEPSTR "|" #define SEPSTR "|"
static const char GPUSEP = ','; static const char GPUSEP = ',';
static const char *APIVERSION = "1.14"; static const char *APIVERSION = "1.15";
static const char *DEAD = "Dead"; static const char *DEAD = "Dead";
static const char *SICK = "Sick"; static const char *SICK = "Sick";
static const char *NOSTART = "NoStart"; static const char *NOSTART = "NoStart";
@ -339,7 +339,6 @@ static const char *JSON_PARAMETER = "parameter";
#define MSG_ACCDENY 45 #define MSG_ACCDENY 45
#define MSG_ACCOK 46 #define MSG_ACCOK 46
#define MSG_ENAPOOL 47 #define MSG_ENAPOOL 47
#define MSG_POOLPRIO 73
#define MSG_DISPOOL 48 #define MSG_DISPOOL 48
#define MSG_ALRENAP 49 #define MSG_ALRENAP 49
#define MSG_ALRDISP 50 #define MSG_ALRDISP 50
@ -373,6 +372,8 @@ static const char *JSON_PARAMETER = "parameter";
#define MSG_MINESTATS 70 #define MSG_MINESTATS 70
#define MSG_MISCHK 71 #define MSG_MISCHK 71
#define MSG_CHECK 72 #define MSG_CHECK 72
#define MSG_POOLPRIO 73
#define MSG_DUPPID 74
enum code_severity { enum code_severity {
SEVERITY_ERR, SEVERITY_ERR,
@ -386,6 +387,7 @@ enum code_parameters {
PARAM_GPU, PARAM_GPU,
PARAM_PGA, PARAM_PGA,
PARAM_CPU, PARAM_CPU,
PARAM_PID,
PARAM_GPUMAX, PARAM_GPUMAX,
PARAM_PGAMAX, PARAM_PGAMAX,
PARAM_CPUMAX, PARAM_CPUMAX,
@ -503,6 +505,7 @@ struct CODES {
{ SEVERITY_SUCC, MSG_ACCOK, PARAM_NONE, "Privileged access OK" }, { SEVERITY_SUCC, MSG_ACCOK, PARAM_NONE, "Privileged access OK" },
{ SEVERITY_SUCC, MSG_ENAPOOL, PARAM_POOL, "Enabling pool %d:'%s'" }, { SEVERITY_SUCC, MSG_ENAPOOL, PARAM_POOL, "Enabling pool %d:'%s'" },
{ SEVERITY_SUCC, MSG_POOLPRIO,PARAM_NONE, "Changed pool priorities" }, { SEVERITY_SUCC, MSG_POOLPRIO,PARAM_NONE, "Changed pool priorities" },
{ SEVERITY_ERR, MSG_DUPPID, PARAM_PID, "Duplicate pool specified %d" },
{ SEVERITY_SUCC, MSG_DISPOOL, PARAM_POOL, "Disabling pool %d:'%s'" }, { SEVERITY_SUCC, MSG_DISPOOL, PARAM_POOL, "Disabling pool %d:'%s'" },
{ SEVERITY_INFO, MSG_ALRENAP, PARAM_POOL, "Pool %d:'%s' already enabled" }, { SEVERITY_INFO, MSG_ALRENAP, PARAM_POOL, "Pool %d:'%s' already enabled" },
{ SEVERITY_INFO, MSG_ALRDISP, PARAM_POOL, "Pool %d:'%s' already disabled" }, { SEVERITY_INFO, MSG_ALRDISP, PARAM_POOL, "Pool %d:'%s' already disabled" },
@ -1064,6 +1067,7 @@ static char *message(int messageid, int paramid, char *param2, bool isjson)
case PARAM_GPU: case PARAM_GPU:
case PARAM_PGA: case PARAM_PGA:
case PARAM_CPU: case PARAM_CPU:
case PARAM_PID:
sprintf(buf, codes[i].description, paramid); sprintf(buf, codes[i].description, paramid);
break; break;
case PARAM_POOL: case PARAM_POOL:
@ -2132,46 +2136,62 @@ static void enablepool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __
static void poolpriority(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group) static void poolpriority(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group)
{ {
SETUP_STRTOK_TS; char *ptr, *next;
int total_pools_ = total_pools; // Keep a local copy, to be more threadsafe int i, pr, prio = 0;
char *a;
int i, prio = 0, e = -1;
if (total_pools_ == 0) { // TODO: all cgminer code needs a mutex added everywhere for change
// access to total_pools and also parts of the pools[] array,
// just copying total_pools here wont solve that
if (total_pools == 0) {
strcpy(io_buffer, message(MSG_NOPOOL, 0, NULL, isjson)); strcpy(io_buffer, message(MSG_NOPOOL, 0, NULL, isjson));
return; return;
} }
bool pools_changed[total_pools_]; if (param == NULL || *param == '\0') {
for (i = 0; i < total_pools_; ++i) strcpy(io_buffer, message(MSG_MISPID, 0, NULL, isjson));
return;
}
bool pools_changed[total_pools];
for (i = 0; i < total_pools; ++i)
pools_changed[i] = false; pools_changed[i] = false;
a = strtok_ts(param, ","); next = param;
do { while (next && *next) {
i = strtol(a, &a, 10); ptr = next;
if (unlikely(*a > 0x20 || i < 0 || i >= total_pools)) { next = strchr(ptr, ',');
e = (*a > 0x20) ? -2 : i; if (next)
continue; *(next++) = '\0';
i = atoi(ptr);
if (i < 0 || i >= total_pools) {
strcpy(io_buffer, message(MSG_INVPID, i, NULL, isjson));
return;
} }
if (pools_changed[i]) {
strcpy(io_buffer, message(MSG_DUPPID, i, NULL, isjson));
return;
}
pools[i]->prio = prio++; pools[i]->prio = prio++;
pools_changed[i] = true; pools_changed[i] = true;
} while ( (a = strtok_ts(NULL, ",")) ); }
for (i = 0; i < total_pools_; ++i) // In priority order, cycle through the unchanged pools and append them
if (!pools_changed[i]) for (pr = 0; pr < total_pools; pr++)
pools[i]->prio = prio++; for (i = 0; i < total_pools; i++) {
if (!pools_changed[i] && pools[i]->prio == pr) {
pools[i]->prio = prio++;
pools_changed[i] = true;
break;
}
}
if (current_pool()->prio) if (current_pool()->prio)
switch_pools(NULL); switch_pools(NULL);
if (e != -1) {
if (e == -2)
strcpy(io_buffer, message(MSG_MISPID, 0, NULL, isjson));
else
strcpy(io_buffer, message(MSG_INVPID, e, NULL, isjson));
return;
}
strcpy(io_buffer, message(MSG_POOLPRIO, 0, NULL, isjson)); strcpy(io_buffer, message(MSG_POOLPRIO, 0, NULL, isjson));
} }

11
compat.h

@ -9,10 +9,6 @@
#include <windows.h> #include <windows.h>
// NOTE: Windows strtok uses a thread-local static buffer, so this is safe
#define SETUP_STRTOK_TS /*nothing needed*/
#define strtok_ts strtok
#include "miner.h" // for timersub #include "miner.h" // for timersub
static inline int nanosleep(const struct timespec *req, struct timespec *rem) static inline int nanosleep(const struct timespec *req, struct timespec *rem)
@ -76,13 +72,8 @@ typedef long suseconds_t;
#endif #endif
#define PTH(thr) ((thr)->pth.p) #define PTH(thr) ((thr)->pth.p)
#else /* ! WIN32 */ #else
#define PTH(thr) ((thr)->pth) #define PTH(thr) ((thr)->pth)
#define SETUP_STRTOK_TS char*_strtok_ts_saveptr
#define strtok_ts(str, delim) strtok_r(str, delim, &_strtok_ts_saveptr)
#endif /* WIN32 */ #endif /* WIN32 */
#endif /* __COMPAT_H__ */ #endif /* __COMPAT_H__ */

Loading…
Cancel
Save