]> git.decadent.org.uk Git - ap-utils.git/blobdiff - lib/scr.c
Imported Upstream version 1.5~pre1
[ap-utils.git] / lib / scr.c
index 72807a575af3123af3dbc2b4e426f75540d1d718..b0eeb0ca69164c7d8bc54911de5b0058c661b801 100644 (file)
--- a/lib/scr.c
+++ b/lib/scr.c
 #include <unistd.h>
 #include <string.h>
 #include "ap-utils.h"
-#include "ap-curses.h"
 #include <menu.h>
 
 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 +42,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)
@@ -92,56 +144,74 @@ void print_helperr(char *mess)
     wattrset(win_for_help, COLOR_PAIR(1));
 }
 
-void print_title(char *mess)
+void print_bold(WINDOW *wptr, char *mess)
 {
-    int i;
-    /* íÁÌÀÀ ÒÁÍËÕ */
-    for (i = 0; i < COLS - MCOLS - 1; i++)
-       mvwaddch(main_win, 0, i, ACS_BSBS);
-    wattrset(main_win, A_BOLD);
-    mvwaddstr(main_win, 0, COLS - MCOLS - strlen(mess) - 2, mess);
-    wattrset(main_win, A_NORMAL);
-    wrefresh(main_win);
-}
-
-void print_viewtype(int v)
-{
-    char message[7];
-
-    sprintf(message, "View: %c", v + '0');
-    wattrset(main_win, A_BOLD);
-    mvwaddstr(main_win, 0, 1, message);
-    wattrset(main_win, A_NORMAL);
-    wrefresh(main_win);
+    wattrset(wptr, A_BOLD);
+    waddstr(wptr, mess);
+    wattrset(wptr, A_NORMAL);
+    wrefresh(wptr);
 }
 
 void print_menusel(int y, int x, char *mess1, char *mess2)
 {
     mvwaddstr(main_sub, y, x, mess1);
-    wattrset(main_sub, A_BOLD);
-    waddstr(main_sub, mess2);
-    wattrset(main_sub, A_NORMAL);
-    wrefresh(main_sub);
+    print_bold(main_sub, mess2);
 }
 
 void print_bottom(char *mess)
 {
     int i;
     char message[100];
-    extern short ap_type;
-    extern char *ap_types[];
+    extern short ap_type, ap_vendorext;
+    extern char *ap_types[], *ap_vendorexts[][3];
 
-    sprintf(message, _("Current AP: %s Type: %s"), mess, ap_types[ap_type]);
+    sprintf(message, _("Current AP: %s Type: %s Ext: %s"),
+       mess, ap_types[ap_type], ap_vendorexts[ap_type][ap_vendorext]);
     /* íÁÌÀÀ ÒÁÍËÕ */
     for (i = 0; i < COLS - MCOLS - 1; i++)
        mvwaddch(main_win, LINES - 3, i, ACS_BSBS);
+
+    wmove(main_win, LINES - 3, COLS - MCOLS - strlen(message) - 1);
+    print_bold(main_win, message);
+}
+
+void print_top(char *title_left, char *title_right)
+{
+    int i = 0;
+
+    wmove(main_win, 0, 0);
+    while (i++ < COLS - MCOLS - 1)
+       waddch(main_win, ACS_BSBS);
+
     wattrset(main_win, A_BOLD);
-    mvwaddstr(main_win, LINES - 3, COLS - MCOLS - strlen(message) - 1,
-             message);
+    if (title_left)
+       mvwaddstr(main_win, 0, 2, title_left);
+
+    if (title_right)
+       mvwaddstr(main_win, 0, COLS - MCOLS - strlen(title_right) - 2,
+           title_right);
+
     wattrset(main_win, A_NORMAL);
     wrefresh(main_win);
 }
 
+void print_top_rssi(char *message_r)
+{
+    char message_l[200];
+
+    sprintf(message_l, "%s", VIEW);
+    switch (sts_viewtype) {
+       case dBm:
+          strcat(message_l, "RSSI in dBm");
+          break;
+       case percentage:
+          strcat(message_l, "RSSI in percentage");
+          break;
+       case rawval:
+          strcat(message_l, "RSSI in raw values");
+    }
+    print_top(message_l, message_r);
+}
 
 void clear_main(int m)
 {
@@ -157,3 +227,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;
+}
+