/* * turn the heartbeat alive. * right thing would be to pass counter to each subsequent timeout * as an argument to heartbeat() incrementing every turn, * i.e. avoiding the static hbcnt, but doing timeout_set() on each * timeout_add() sounds ugly, guts of struct timeout looks ugly * to ponder in even more. */ void heartbeat(void *v) { static u_int hbcnt = 0, ocp_total, ocp_idle; int toggle, cp_mask, cp_total, cp_idle; timeout_add(&heartbeat_tmo, hz / 16); cp_idle = cp_time[CP_IDLE]; cp_total = cp_time[CP_USER] + cp_time[CP_NICE] + cp_time[CP_SYS] + cp_time[CP_INTR] + cp_time[CP_IDLE]; if (cp_total == ocp_total) cp_total = ocp_total + 1; if (cp_idle == ocp_idle) cp_idle = ocp_idle + 1; cp_mask = 0xf0 >> (cp_idle - ocp_idle) * 4 / (cp_total - ocp_total); cp_mask &= 0xf0; ocp_total = cp_total; ocp_idle = cp_idle; /* * do this: * * |~| |~| * _| |_| |_,_,_,_ * 0 1 2 3 4 6 7 */ toggle = 0; if (hbcnt++ < 8 && hbcnt & 1) toggle = PALED_HEARTBEAT; hbcnt &= 15; ledctl(cp_mask, (~cp_mask & 0xf0) | PALED_NETRCV | PALED_NETSND | PALED_DISK, toggle); }
int main(int argc, char *argv[]){ if(argc != 2){ printf("Uso: ledctl_invoke 0x[0..7]\n"); return -1; } int num = strtol(argv[1], NULL, 16); if(ledctl(num) < 0){ perror("Ledctl error: "); return -1; } return 0; }