mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-11 07:17:58 +00:00
Convert the log and status portions of the screen to two separate ncurses windows for simpler cleaner output.
This commit is contained in:
parent
c59e2ab8b6
commit
ccf2ea914f
108
main.c
108
main.c
@ -518,7 +518,7 @@ static inline int cpu_from_thr_id(int thr_id)
|
||||
return (thr_id - gpu_threads) % num_processors;
|
||||
}
|
||||
|
||||
static WINDOW * mainwin;
|
||||
static WINDOW *mainwin, *statuswin, *logwin;
|
||||
static double total_secs = 0.1;
|
||||
static char statusline[256];
|
||||
static int cpucursor, gpucursor, logstart, logcursor;
|
||||
@ -532,79 +532,63 @@ static inline void print_status(int thr_id)
|
||||
if (unlikely(!curses_active))
|
||||
return;
|
||||
|
||||
move(2,0);
|
||||
printw("Totals: %s", statusline);
|
||||
clrtoeol();
|
||||
wmove(statuswin, 0, 0);
|
||||
wattron(statuswin, A_BOLD);
|
||||
wprintw(statuswin, PROGRAM_NAME " version " VERSION);
|
||||
wattroff(statuswin, A_BOLD);
|
||||
wmove(statuswin, 1, 0);
|
||||
whline(statuswin, '-', 80);
|
||||
wmove(statuswin, 2,0);
|
||||
wprintw(statuswin, "Totals: %s", statusline);
|
||||
wclrtoeol(statuswin);
|
||||
wmove(statuswin, 3, 0);
|
||||
whline(statuswin, '-', 80);
|
||||
wmove(statuswin, logstart - 1, 0);
|
||||
whline(statuswin, '-', 80);
|
||||
|
||||
if (thr_id >= 0 && thr_id < gpu_threads) {
|
||||
int gpu = gpu_from_thr_id(thr_id);
|
||||
struct cgpu_info *cgpu = &gpus[gpu];
|
||||
|
||||
move(gpucursor + gpu, 0);
|
||||
printw("GPU %d: [%.1f Mh/s] [Q:%d A:%d R:%d HW:%d E:%.0f%% U:%.2f/m] ",
|
||||
wmove(statuswin, gpucursor + gpu, 0);
|
||||
wprintw(statuswin, "GPU %d: [%.1f Mh/s] [Q:%d A:%d R:%d HW:%d E:%.0f%% U:%.2f/m]",
|
||||
gpu, cgpu->total_mhashes / total_secs,
|
||||
cgpu->getworks, cgpu->accepted, cgpu->rejected, cgpu->hw_errors,
|
||||
cgpu->efficiency, cgpu->utility);
|
||||
clrtoeol();
|
||||
wclrtoeol(statuswin);
|
||||
} else if (thr_id >= gpu_threads) {
|
||||
int cpu = cpu_from_thr_id(thr_id);
|
||||
struct cgpu_info *cgpu = &cpus[cpu];
|
||||
|
||||
move(cpucursor + cpu, 0);
|
||||
printw("CPU %d: [%.1f Mh/s] [Q:%d A:%d R:%d HW:%d E:%.0f%% U:%.2f/m]",
|
||||
wmove(statuswin, cpucursor + cpu, 0);
|
||||
wprintw(statuswin, "CPU %d: [%.1f Mh/s] [Q:%d A:%d R:%d HW:%d E:%.0f%% U:%.2f/m]",
|
||||
cpu, cgpu->total_mhashes / total_secs,
|
||||
cgpu->getworks, cgpu->accepted, cgpu->rejected, cgpu->hw_errors,
|
||||
cgpu->efficiency, cgpu->utility);
|
||||
clrtoeol();
|
||||
wclrtoeol(statuswin);
|
||||
}
|
||||
|
||||
move(logcursor, 0);
|
||||
refresh();
|
||||
}
|
||||
|
||||
static void refresh_display(void)
|
||||
{
|
||||
int i, x;
|
||||
|
||||
if (unlikely(!curses_active))
|
||||
return;
|
||||
|
||||
move(0,0);
|
||||
attron(A_BOLD);
|
||||
printw(PROGRAM_NAME " version " VERSION);
|
||||
attroff(A_BOLD);
|
||||
clrtoeol();
|
||||
move(1, 0);
|
||||
clrtoeol();
|
||||
hline('-', 80);
|
||||
move(3, 0);
|
||||
clrtoeol();
|
||||
hline('-', 80);
|
||||
move(logstart, 0);
|
||||
clrtoeol();
|
||||
hline('-', 80);
|
||||
|
||||
for (i = 0; i < mining_threads; i++)
|
||||
print_status(i);
|
||||
|
||||
move(logcursor, 0);
|
||||
redrawwin(mainwin);
|
||||
wrefresh(statuswin);
|
||||
}
|
||||
|
||||
void log_curses(const char *f, va_list ap)
|
||||
{
|
||||
int x;
|
||||
int x, y, logx, logy;
|
||||
|
||||
if (unlikely(!curses_active))
|
||||
return;
|
||||
|
||||
/* Scroll log output downwards */
|
||||
getmaxyx(mainwin, logcursor, x);
|
||||
move(--logcursor, 0);
|
||||
vw_printw(mainwin, f, ap);
|
||||
clrtoeol();
|
||||
|
||||
refresh_display();
|
||||
getmaxyx(mainwin, y, x);
|
||||
getmaxyx(logwin, logy, logx);
|
||||
y -= logcursor;
|
||||
/* Detect screen size change */
|
||||
if (x != logx || y != logy) {
|
||||
wresize(logwin, y, x);
|
||||
redrawwin(logwin);
|
||||
redrawwin(statuswin);
|
||||
}
|
||||
vw_printw(logwin, f, ap);
|
||||
wrefresh(logwin);
|
||||
}
|
||||
|
||||
static bool submit_fail = false;
|
||||
@ -1736,7 +1720,7 @@ static void *wakeup_thread(void *userdata)
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
struct thr_info *thr;
|
||||
unsigned int i, j = 0;
|
||||
unsigned int i, j = 0, x, y;
|
||||
char name[32];
|
||||
|
||||
if (unlikely(pthread_mutex_init(&hash_lock, NULL)))
|
||||
@ -1804,7 +1788,7 @@ int main (int argc, char *argv[])
|
||||
mining_threads = opt_n_threads + gpu_threads;
|
||||
gpucursor = logcursor;
|
||||
cpucursor = gpucursor + nDevs;
|
||||
logstart = cpucursor + (opt_n_threads ? num_processors : 0);
|
||||
logstart = cpucursor + (opt_n_threads ? num_processors : 0) + 1;
|
||||
logcursor = logstart + 1;
|
||||
|
||||
if (!rpc_userpass) {
|
||||
@ -1982,16 +1966,17 @@ int main (int argc, char *argv[])
|
||||
pthread_mutex_unlock(&hash_lock);
|
||||
|
||||
/* Set up the ncurses interface */
|
||||
if ((mainwin = initscr()) == NULL) {
|
||||
applog(LOG_ERR, "Failed to initscr");
|
||||
return 1;
|
||||
}
|
||||
idlok(mainwin, true);
|
||||
scrollok(mainwin, true);
|
||||
mainwin = initscr();
|
||||
statuswin = newwin(logstart, 80, 0, 0);
|
||||
getmaxyx(mainwin, y, x);
|
||||
logwin = newwin(y - logcursor, 0, logcursor, 0);
|
||||
idlok(logwin, true);
|
||||
scrollok(logwin, true);
|
||||
leaveok(logwin, true);
|
||||
leaveok(statuswin, true);
|
||||
curses_active = true;
|
||||
getmaxyx(mainwin, logcursor, i);
|
||||
move(logcursor, 0);
|
||||
refresh_display();
|
||||
for (i = 0; i < mining_threads; i++)
|
||||
print_status(i);
|
||||
|
||||
/* Now that everything's ready put enough work in the queue */
|
||||
for (i = 0; i < opt_queue + mining_threads; i++) {
|
||||
@ -2011,7 +1996,8 @@ int main (int argc, char *argv[])
|
||||
|
||||
applog(LOG_INFO, "workio thread dead, exiting.");
|
||||
|
||||
delwin(mainwin);
|
||||
delwin(logwin);
|
||||
delwin(statuswin);
|
||||
endwin();
|
||||
refresh();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user