X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2Fscr.c;h=20a75ed790d06f881ee73885171cc1c94665ba2f;hb=refs%2Ftags%2Fupstream%2F1.4.2.pre2.a;hp=72807a575af3123af3dbc2b4e426f75540d1d718;hpb=6a9e980b8799891e0a5467a0126a60b169c8f4eb;p=ap-utils.git diff --git a/lib/scr.c b/lib/scr.c index 72807a5..20a75ed 100644 --- a/lib/scr.c +++ b/lib/scr.c @@ -27,6 +27,8 @@ extern WINDOW *main_sub, *win_for_help, *main_win; +enum { dBm, percentage, rawval } sts_viewtype = dBm; + void scroll_rows(struct MacListStat *first, int begin, int end, int row, int stat) @@ -41,33 +43,84 @@ scroll_rows(struct MacListStat *first, int begin, int end, int row, curr = curr->next; i = 0; while (end-- > begin) { - if (stat==1) { + if (stat == 1) { + /* NWN view */ + sprintf(message, + (sts_viewtype == dBm) ? + "%4u %02X%02X%02X%02X%02X%02X %3u%5u %3udBm" + : + (sts_viewtype == percentage) ? + "%4u %02X%02X%02X%02X%02X%02X %3u%5u %3u%%" + : + "%4u %02X%02X%02X%02X%02X%02X %3u%5u %3u", + begin + i, curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, + curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, + curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, + curr->quality, + curr->idle, + conv_rssi(curr->rssi) + ); + } else if (stat == 2) { + /* ATMEL410_SBRIDGES (firmware 1.4k.1) view */ sprintf(message, - "%4u %02X%02X%02X%02X%02X%02X %3u%5u %3u", - begin + i, curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, - curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, - curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, - curr->quality, curr->idle, curr->rssi); - } else if(stat==2) { + (sts_viewtype == dBm) ? + "%2u %02X%02X%02X%02X%02X%02X %3d%% %4ddBm %3u %2u %s" + : + (sts_viewtype == percentage) ? + "%2u %02X%02X%02X%02X%02X%02X %3d%% %3u%% %3u %2u %s" + : + "%2u %02X%02X%02X%02X%02X%02X %3d%% %3u %3u %2u %s", + begin + i, + curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, + curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, + curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, + curr->quality, + conv_rssi(curr->rssi), + curr->Status, + curr->Port, + inet_ntoa(curr->IP) + ); + } else if (stat == 3) { + /* ATMEL12350_VERNET view */ sprintf(message, - "%2u %02X%02X%02X%02X%02X%02X %3d%% %4ddBm %3u %2u %s", - begin + i, - curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, - curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, - curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, - curr->quality, curr->rssi, curr->Status, curr->Port, inet_ntoa(curr->IP)); + (sts_viewtype == dBm) ? + "%2u %02X%02X%02X%02X%02X%02X %02X%02X%02X%02X%02X%02X " + "%4ddBm %3u %2u %s" + : + (sts_viewtype == percentage) ? + "%2u %02X%02X%02X%02X%02X%02X %02X%02X%02X%02X%02X%02X " + " %3u%% %3u %2u %s" + : + "%2u %02X%02X%02X%02X%02X%02X %02X%02X%02X%02X%02X%02X " + " %3u %3u %2u %s", + begin + i, + curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, + curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, + curr->addr[4] & 0xFF, curr->addr[5] & 0xFF, + curr->ParentMacAddress[0] & 0xFF, + curr->ParentMacAddress[1] & 0xFF, + curr->ParentMacAddress[2] & 0xFF, + curr->ParentMacAddress[3] & 0xFF, + curr->ParentMacAddress[4] & 0xFF, + curr->ParentMacAddress[5] & 0xFF, + conv_rssi(curr->rssi), + curr->Status, + curr->Port, + inet_ntoa(curr->IP) + ); } else { - sprintf(message, "%4u %02X%02X%02X%02X%02X%02X", - begin + i, curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, - curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, - curr->addr[4] & 0xFF, curr->addr[5] & 0xFF); + /* generic ATMEL view */ + sprintf(message, "%2u %02X%02X%02X%02X%02X%02X", + begin + i, curr->addr[0] & 0xFF, curr->addr[1] & 0xFF, + curr->addr[2] & 0xFF, curr->addr[3] & 0xFF, + curr->addr[4] & 0xFF, curr->addr[5] & 0xFF + ); } mvwaddstr(main_sub, row + i, 0, message); i++; curr = curr->next; } wrefresh(main_sub); - } void print_help(char *mess) @@ -104,17 +157,33 @@ void print_title(char *mess) wrefresh(main_win); } -void print_viewtype(int v) +void print_viewtype(char *mess) { - char message[7]; - - sprintf(message, "View: %c", v + '0'); + /* + * note: when used to update with different strlen(mess) than previous one, + * call print_title() before this one so that the top line gets updated ! + */ wattrset(main_win, A_BOLD); - mvwaddstr(main_win, 0, 1, message); + mvwaddstr(main_win, 0, 1, "View: "); + waddstr(main_win, mess); wattrset(main_win, A_NORMAL); wrefresh(main_win); } +void print_viewtype_rssi() +{ + switch (sts_viewtype) { + case dBm: + print_viewtype("RSSI in dBm"); + return; + case percentage: + print_viewtype("RSSI in percentage"); + return; + case rawval: + print_viewtype("RSSI in raw values"); + } +} + void print_menusel(int y, int x, char *mess1, char *mess2) { mvwaddstr(main_sub, y, x, mess1); @@ -157,3 +226,18 @@ void clear_main_new(int m, int n) waddch(main_sub, ' '); wrefresh(main_sub); } + +int conv_rssi(int raw_rssi) +{ + switch (sts_viewtype) { + case dBm: + return (-96 + raw_rssi); + case percentage: + return ((int)((minimum (raw_rssi, 40)) * (float)2.5)); + case rawval: + return raw_rssi; + } + /* Should never happen */ + return -1; +} +