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)
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)
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);
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;
+}
+