From 5e94494e9c552f20f5cb4b711537d3ea429e8498 Mon Sep 17 00:00:00 2001 From: Joe Marcus Clarke Date: Sun, 16 Feb 2003 23:32:35 +0000 Subject: Add FreeBSD Aironet support to the wireless applet. This uses code borrowed from ancontrol. It was tested with PC340 and PC350 Aironet cards. Since I don't own any wi-driven cards, I was not able to add support for those. Contributions welcome... --- x11/gnome-applets/Makefile | 1 + .../files/patch-wireless_wireless-applet.c | 232 +++++++++++++++++++++ 2 files changed, 233 insertions(+) create mode 100644 x11/gnome-applets/files/patch-wireless_wireless-applet.c (limited to 'x11/gnome-applets') diff --git a/x11/gnome-applets/Makefile b/x11/gnome-applets/Makefile index b0eeba4d3e62..13d2de49c425 100644 --- a/x11/gnome-applets/Makefile +++ b/x11/gnome-applets/Makefile @@ -7,6 +7,7 @@ PORTNAME= gnomeapplets2 PORTVERSION= 2.2.0 +PORTREVISION= 1 CATEGORIES= x11 gnome MASTER_SITES= ${MASTER_SITE_GNOME} MASTER_SITE_SUBDIR= sources/gnome-applets/2.2 diff --git a/x11/gnome-applets/files/patch-wireless_wireless-applet.c b/x11/gnome-applets/files/patch-wireless_wireless-applet.c new file mode 100644 index 000000000000..11615ad4fa10 --- /dev/null +++ b/x11/gnome-applets/files/patch-wireless_wireless-applet.c @@ -0,0 +1,232 @@ +--- wireless/wireless-applet.c.orig Sun Feb 16 00:12:42 2003 ++++ wireless/wireless-applet.c Sun Feb 16 18:19:34 2003 +@@ -30,12 +30,24 @@ + #include + #include + ++#ifdef __FreeBSD__ ++#include ++#include ++#include ++#include ++#include ++#endif ++ + #include + #include + #include + #include + ++#ifdef __FreeBSD__ ++#define CFG_DEVICE "an0" ++#else + #define CFG_DEVICE "eth0" ++#endif + #define CFG_UPDATE_INTERVAL 2 + + typedef enum { +@@ -93,6 +105,10 @@ + WirelessApplet *applet); + static void wireless_applet_about_cb (BonoboUIComponent *uic, + WirelessApplet *applet); ++#ifdef __FreeBSD__ ++static int an_getval(WirelessApplet *applet, char *device, struct an_req *areq); ++static void get_an_data(WirelessApplet *applet, char *device, long int *level); ++#endif + + static const BonoboUIVerb wireless_menu_verbs [] = { + BONOBO_UI_UNSAFE_VERB ("WirelessProperties", +@@ -150,7 +166,9 @@ + g_free (tmp); + + /* Update the image */ ++#ifndef __FreeBSD__ + percent = CLAMP (percent, 0, 100); ++#endif + + if (applet->pixmaps[percent] != applet->current_pixmap) + { +@@ -234,6 +252,7 @@ + int percent; + + /* Calculate the percentage based on the link quality */ ++#ifndef __FreeBSD__ + if (level < 0) { + percent = -1; + } else { +@@ -244,6 +263,9 @@ + percent = CLAMP (percent, 0, 100); + } + } ++#else ++ percent = (int)level; ++#endif + + if (percent < 0) { + applet->state = BUSTED_LINK; +@@ -387,22 +409,107 @@ + applet->show_dialogs = show; + } + ++#ifdef __FreeBSD__ ++static int ++an_getval(WirelessApplet *applet, char *device, struct an_req *areq) ++{ ++ struct ifreq ifr; ++ int s; ++ ++ bzero((char *)&ifr, sizeof(ifr)); ++ ++ strlcpy(ifr.ifr_name, device, sizeof(ifr.ifr_name)); ++ ifr.ifr_data = (caddr_t)areq; ++ ++ s = socket(AF_INET, SOCK_DGRAM, 0); ++ ++ if (s == -1) { ++ gtk_tooltips_set_tip (applet->tips, ++ GTK_WIDGET (applet), ++ "Socket Error", ++ NULL); ++ return 0; ++ } ++ ++ if (ioctl(s, SIOCGAIRONET, &ifr) == -1) { ++ gtk_tooltips_set_tip (applet->tips, ++ GTK_WIDGET (applet), ++ "ioctl Error", ++ NULL); ++ return 0; ++ } ++ ++ close(s); ++ return 1; ++} ++ ++static void ++get_an_data (WirelessApplet *applet, char *device, long int *level) ++{ ++ struct an_req areq; ++ struct an_ltv_status *sts; ++ struct an_ltv_rssi_map an_rssimap; ++ long int signal_strength; ++ int rssimap_valid = 0; ++ ++ an_rssimap.an_len = sizeof(an_rssimap); ++ an_rssimap.an_type = AN_RID_RSSI_MAP; ++ rssimap_valid = an_getval(applet, device, (struct an_req*)&an_rssimap); ++ ++ areq.an_len = sizeof(areq); ++ areq.an_type = AN_RID_STATUS; ++ ++ (void)an_getval(applet, device, &areq); ++ ++ sts = (struct an_ltv_status *)&areq; ++ if (rssimap_valid) ++ signal_strength = (long int)(an_rssimap.an_entries[ ++ sts->an_normalized_strength].an_rss_pct); ++ else ++ signal_strength = (long int)(sts->an_normalized_strength); ++ ++ memcpy(level, &signal_strength, sizeof(level)); ++} ++#endif ++ + /* check stats, modify the state attribute */ + static void + wireless_applet_read_device_state (WirelessApplet *applet) + { +- long int level, noise; +- double link; ++ long int level; + char device[256]; ++#ifdef __FreeBSD__ ++ struct if_nameindex *ifstart, *ifs; ++#else ++ long int noise; ++ double link; + char line[256]; ++#endif + + /* resest list of available wireless devices */ + g_list_foreach (applet->devices, (GFunc)g_free, NULL); + g_list_free (applet->devices); + applet->devices = NULL; + ++#ifdef __FreeBSD__ ++ ifs = ifstart = if_nameindex(); ++#endif + /* Here we begin to suck... */ + do { ++#ifdef __FreeBSD__ ++ if (ifs == NULL || ifs->if_name == NULL) { ++ break; ++ } ++ strlcpy(device, ifs->if_name, 6); ++ if (g_strncasecmp(device, "an", 2)==0) { ++ applet->devices = g_list_prepend (applet->devices, g_strdup (device)); ++ if (g_strcasecmp(applet->device, device)==0) { ++ get_an_data(applet, device, &level); ++ wireless_applet_update_state (applet, device, 0, level, 0); ++ } ++ } ++ ifs++; ++#else + char *ptr; + + fgets (line, 256, applet->file); +@@ -435,6 +542,7 @@ + wireless_applet_update_state (applet, device, link, level, noise); + } + } ++#endif + } while (1); + + if (g_list_length (applet->devices)==1) { +@@ -446,15 +554,21 @@ + } + + /* rewind the /proc/net/wireless file */ ++#ifdef __FreeBSD__ ++ if_freenameindex(ifstart); ++#else + rewind (applet->file); ++#endif + } + + static int + wireless_applet_timeout_handler (WirelessApplet *applet) + { ++#ifndef __FreeBSD__ + if (applet->file == NULL) { + return FALSE; + } ++#endif + + wireless_applet_read_device_state (applet); + +@@ -517,6 +631,7 @@ + static void + start_file_read (WirelessApplet *applet) + { ++#ifndef __FreeBSD__ + applet->file = fopen ("/proc/net/wireless", "rt"); + if (applet->file == NULL) { + gtk_tooltips_set_tip (applet->tips, +@@ -525,6 +640,7 @@ + NULL); + show_error_dialog (_("There doesn't seem to be any wireless devices configured on your system.\nPlease verify your configuration if you think this is incorrect.")); + } ++#endif + } + + static void +@@ -766,7 +882,9 @@ + applet->prefs = NULL; + } + ++#ifndef __FreeBSD__ + fclose (applet->file); ++#endif + } + + static GtkWidget * -- cgit v1.2.3