]> git.decadent.org.uk Git - ap-utils.git/blobdiff - lib/scr.c
Imported Upstream version 1.4.2~pre2~a
[ap-utils.git] / lib / scr.c
index 72807a575af3123af3dbc2b4e426f75540d1d718..20a75ed790d06f881ee73885171cc1c94665ba2f 100644 (file)
--- 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;
+}
+