-rw-r--r-- | noncore/applets/wirelessapplet/networkinfo.cpp | 284 | ||||
-rw-r--r-- | noncore/applets/wirelessapplet/networkinfo.h | 126 | ||||
-rw-r--r-- | noncore/applets/wirelessapplet/wireless.cpp | 55 | ||||
-rw-r--r-- | noncore/applets/wirelessapplet/wirelessapplet.pro | 4 |
4 files changed, 26 insertions, 443 deletions
diff --git a/noncore/applets/wirelessapplet/networkinfo.cpp b/noncore/applets/wirelessapplet/networkinfo.cpp deleted file mode 100644 index e0c487b..0000000 --- a/noncore/applets/wirelessapplet/networkinfo.cpp +++ b/dev/null @@ -1,284 +0,0 @@ -/********************************************************************** -** MNetwork* classes -** -** Encapsulate network information -** -** Copyright (C) 2002, Michael Lauer -** mickey@tm.informatik.uni-frankfurt.de -** http://www.Vanille.de -** -** Based on portions of the Wireless Extensions -** Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com> -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -**********************************************************************/ - -#include "networkinfo.h" - -#include <arpa/inet.h> -#include <sys/socket.h> -#include <linux/if_ether.h> -#include <netinet/ip.h> -#include <sys/ioctl.h> -#include <linux/wireless.h> - -#include <unistd.h> -#include <math.h> -#include <errno.h> -#include <string.h> - -#include <stdlib.h> - -#include <qstring.h> -#include <qfile.h> -#include <qtextstream.h> - -/* estimated wireless signal strength and noise level values - based on experimentation with Orinoco and Prism2 cards. - Seem to be correct, but please inform me, if you got values - outside these boundaries. :Mickey: */ - -#define IW_UPPER 220 -#define IW_LOWER 140 - -#define PROCNETDEV "/proc/net/dev" -#define PROCNETWIRELESS "/proc/net/wireless" - -//#define MDEBUG 0 -#undef MDEBUG - -//--------------------------------------------------------------------------- -// class MNetworkInterface -// - -MNetworkInterface::MNetworkInterface( const char* name ) - :name( name ) -{ - struct ifreq ifr; - struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr; - fd = socket( AF_INET, SOCK_DGRAM, 0 ); -} - -MNetworkInterface::~MNetworkInterface() -{ - if ( fd != -1 ) - close( fd ); -} - -bool MNetworkInterface::updateStatistics() -{ - return true; -} - -//--------------------------------------------------------------------------- -// class MWirelessNetworkInterface -// - -MWirelessNetworkInterface::MWirelessNetworkInterface( const char* n ) - :MNetworkInterface( n ) -{ - signal = 0; - noise = 0; - quality = 0; -} - -MWirelessNetworkInterface::~MWirelessNetworkInterface() -{ -} - -int MWirelessNetworkInterface::qualityPercent() -{ - return ( quality*100 ) / 92; -} - -int MWirelessNetworkInterface::signalPercent() -{ - return ( ( signal-IW_LOWER ) * 100 ) / IW_UPPER; -} - -int MWirelessNetworkInterface::noisePercent() -{ - return ( ( noise-IW_LOWER ) * 100 ) / IW_UPPER; -} - -bool MWirelessNetworkInterface::updateStatistics() -{ - bool base = MNetworkInterface::updateStatistics(); - if ( !base ) - return false; - - const char* buffer[200]; - - struct iwreq iwr; - memset( &iwr, 0, sizeof( iwr ) ); - iwr.u.essid.pointer = (caddr_t) buffer; - iwr.u.essid.length = IW_ESSID_MAX_SIZE; - iwr.u.essid.flags = 0; - - // check if it is an IEEE 802.11 standard conform - // wireless device by sending SIOCGIWESSID - // which also gives back the Extended Service Set ID - // (see IEEE 802.11 for more information) - - strcpy( iwr.ifr_ifrn.ifrn_name, (const char*) name ); - int result = ioctl( fd, SIOCGIWESSID, &iwr ); - if ( result == 0 ) - { - hasWirelessExtensions = true; - iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0'; - essid = iwr.u.essid.pointer; - } - else essid = "*** Unknown ***"; - - // Address of associated access-point - - result = ioctl( fd, SIOCGIWAP, &iwr ); - if ( result == 0 ) - { - APAddr.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", - iwr.u.ap_addr.sa_data[0]&0xff, - iwr.u.ap_addr.sa_data[1]&0xff, - iwr.u.ap_addr.sa_data[2]&0xff, - iwr.u.ap_addr.sa_data[3]&0xff, - iwr.u.ap_addr.sa_data[4]&0xff, - iwr.u.ap_addr.sa_data[5]&0xff ); - } else APAddr = "*** Unknown ***"; - - iwr.u.data.pointer = (caddr_t) buffer; - iwr.u.data.length = IW_ESSID_MAX_SIZE; - iwr.u.data.flags = 0; - - result = ioctl( fd, SIOCGIWNICKN, &iwr ); - if ( result == 0 ) - { - iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0'; - nick = iwr.u.data.pointer; - } else nick = "*** Unknown ***"; - - result = ioctl( fd, SIOCGIWMODE, &iwr ); - if ( result == 0 ) - mode = ( iwr.u.mode == IW_MODE_ADHOC ) ? "Ad-Hoc" : "Managed"; - else mode = "*** Unknown ***"; - - result = ioctl( fd, SIOCGIWFREQ, &iwr ); - if ( result == 0 ) - freq = double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000; - else freq = 0; - - // gather link quality from /proc/net/wireless - - char c; - QString status; - QString name; - QFile wfile( PROCNETWIRELESS ); - bool hasFile = wfile.open( IO_ReadOnly ); - QTextStream wstream( &wfile ); - if ( hasFile ) - { - wstream.readLine(); // skip the first two lines - wstream.readLine(); // because they only contain headers - } - if ( ( !hasFile ) || ( wstream.atEnd() ) ) - { -#ifdef MDEBUG - qDebug( "WIFIAPPLET: D'oh! Someone removed the card..." ); -#endif - quality = -1; - signal = IW_LOWER; - noise = IW_LOWER; - return false; - } - - wstream >> name >> status >> quality >> c >> signal >> c >> noise; - -#ifdef MDEBUG - if ( quality > 92 ) - qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality ); - - if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) ) - qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal ); - - if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) ) - qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise ); -#endif - - return true; - -} - -//--------------------------------------------------------------------------- -// class Network -// - -MNetwork::MNetwork() -{ - procfile = PROCNETDEV; -} - -MNetwork::~MNetwork() -{ -} - -//--------------------------------------------------------------------------- -// class WirelessNetwork -// - -MWirelessNetwork::MWirelessNetwork() -{ - procfile = PROCNETWIRELESS; -} - -MWirelessNetwork::~MWirelessNetwork() -{ -} - -MNetworkInterface* MWirelessNetwork::createInterface( const char* n ) const -{ - return new MWirelessNetworkInterface( n ); -} - -//--------------------------------------------------------------------------- -// class NetworkInterface -// - -MNetworkInterface* MNetwork::getFirstInterface() -{ - enumerateInterfaces(); - InterfaceMapIterator it( interfaces ); - return ( it.count() > 0 ) ? it.toFirst() : 0; -} - -void MNetwork::enumerateInterfaces() -{ - interfaces.clear(); - QString str; - QFile f( procfile ); - bool hasFile = f.open( IO_ReadOnly ); - if ( !hasFile ) - return; - QTextStream s( &f ); - s.readLine(); - s.readLine(); - while ( !s.atEnd() ) - { - s >> str; - str.truncate( str.find( ':' ) ); -#ifdef MDEBUG - qDebug( "WIFIAPPLET: found interface '%s'", (const char*) str ); -#endif - interfaces.insert( str, createInterface( str ) ); - s.readLine(); - } -} - -MNetworkInterface* MNetwork::createInterface( const char* n ) const -{ - return new MNetworkInterface( n ); -} diff --git a/noncore/applets/wirelessapplet/networkinfo.h b/noncore/applets/wirelessapplet/networkinfo.h deleted file mode 100644 index 7e50bc4..0000000 --- a/noncore/applets/wirelessapplet/networkinfo.h +++ b/dev/null @@ -1,126 +0,0 @@ -/********************************************************************** -** MNetwork* classes -** -** Encapsulates network information -** -** Copyright (C) 2002, Michael Lauer -** mickey@tm.informatik.uni-frankfurt.de -** http://www.Vanille.de -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -**********************************************************************/ - -#ifndef NETWORKINFO_H -#define NETWORKINFO_H - -#include <qstring.h> -#include <qdict.h> - -//--------------------------------------------------------------------------- -// class MNetworkInterface -// - -class MNetworkInterface -{ -public: - - MNetworkInterface( const char* name = "eth0" ); - virtual ~MNetworkInterface(); - - bool isLoopback() { return isLoopbackInterface; }; - const QString& getName() { return name; }; - - virtual bool updateStatistics(); - -protected: - - int fd; - const QString name; - bool isLoopbackInterface; - bool isIrda; - bool isTunnel; -}; - -//--------------------------------------------------------------------------- -// class MWirelessNetworkInterface -// - -class MWirelessNetworkInterface : public MNetworkInterface -{ -public: - MWirelessNetworkInterface( const char* name = "wlan0" ); - virtual ~MWirelessNetworkInterface(); - - int noisePercent(); - int qualityPercent(); - int signalPercent(); - - QString APAddr; - QString essid; - QString mode; - QString nick; - QString rate; - double freq; - int channel; - - virtual bool updateStatistics(); - -private: - int quality; - int signal; - int noise; - - bool hasWirelessExtensions; -}; - -//--------------------------------------------------------------------------- -// class MNetwork -// - -class MNetwork -{ -public: - MNetwork(); - virtual ~MNetwork(); - - typedef QDict<MNetworkInterface> InterfaceMap; - typedef QDictIterator<MNetworkInterface> InterfaceMapIterator; - - bool hasInterfaces() const { return interfaces.isEmpty(); }; - int numInterfaces() const { return interfaces.count(); }; - - MNetworkInterface* getFirstInterface(); - -protected: - QString procfile; - InterfaceMap interfaces; - - virtual MNetworkInterface* createInterface( const char* name ) const; - -private: - void enumerateInterfaces(); -}; - -//--------------------------------------------------------------------------- -// class MWirelessNetwork -// - -class MWirelessNetwork : public MNetwork -{ -public: - MWirelessNetwork(); - virtual ~MWirelessNetwork(); - -protected: - virtual MNetworkInterface* createInterface( const char* name ) - const; -}; - -#endif diff --git a/noncore/applets/wirelessapplet/wireless.cpp b/noncore/applets/wirelessapplet/wireless.cpp index dc9742a..72ac380 100644 --- a/noncore/applets/wirelessapplet/wireless.cpp +++ b/noncore/applets/wirelessapplet/wireless.cpp @@ -1,79 +1,78 @@ /********************************************************************** ** Copyright (C) 2002-2004 Michael 'Mickey' Lauer <mickey@vanille.de> ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "wireless.h" -#include "networkinfo.h" #include "mgraph.h" #include "advancedconfig.h" #include "connect0.xpm" #include "connect1.xpm" #include "connect2.xpm" #include "connect3.xpm" #include "connect4.xpm" #include "connect5.xpm" #include "nowireless.xpm" /* OPIE */ #include <opie2/onetwork.h> #include <opie2/otaskbarapplet.h> #include <qpe/qpeapplication.h> #include <qpe/config.h> /* QT */ #include <qpoint.h> #include <qradiobutton.h> #include <qpushbutton.h> #include <qpainter.h> #include <qlabel.h> #include <qslider.h> #include <qbuttongroup.h> #include <qlayout.h> #include <qframe.h> #include <qpixmap.h> #include <qstring.h> #include <qfile.h> #include <qtextstream.h> /* STD */ #include <sys/types.h> #include <signal.h> #define STYLE_BARS 0 #define STYLE_ANTENNA 1 -//#define MDEBUG -#undef MDEBUG +#define MDEBUG +//#undef MDEBUG WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const char *name ) : QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), applet( applet ) { readConfig(); writeConfigEntry( "UpdateFrequency", updateFrequency ); writeConfigEntry( "DisplayStyle", displayStyle ); setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); QGridLayout *grid = new QGridLayout( this, 3, 2, 6, 2, "top layout" ); /* status label */ statusLabel = new QLabel( this, "statuslabel" ); QString text( "Wireless Status:<br>" "*** Unknown ***<br>" "Card not inserted ?<br>" "Or Sharp ROM ?<br>" "CELL: 00:00:00:00:00:00" ); /* QString text( "Station: Unknown<br>" "ESSID: Unknown<br>" "MODE: Unknown<br>" "FREQ: Unknown<br>" @@ -304,74 +303,68 @@ void WirelessApplet::updateDHCPConfig( bool ESSID, bool FREQ, bool AP, bool MODE rocMODE = MODE; } void WirelessApplet::updateDelayChange( int delay ) { if ( timer ) killTimer( timer ); delay *= 1000; if ( delay == 0 ) delay = 50; timer = startTimer( delay ); } void WirelessApplet::displayStyleChange( int style ) { visualStyle = style; repaint(); } WirelessApplet::~WirelessApplet() {} void WirelessApplet::timerEvent( QTimerEvent* ) { - /* - + qDebug( "WirelessApplet::timerEvent" ); OWirelessNetworkInterface* iface = interface; if ( iface ) { - bool statResult = iface->updateStatistics(); - if ( !statResult ) - { - interface = 0; - mustRepaint(); - return ; - } - else if ( mustRepaint() ) { - //qDebug( "WIFIAPPLET: A value has changed -> repainting." ); + qDebug( "WIFIAPPLET: A value has changed -> repainting." ); repaint(); } if ( status->isVisible() ) + { updatePopupWindow(); } - else checkInterface(); - - */ + } + else + { + checkInterface(); + } } void WirelessApplet::mousePressEvent( QMouseEvent * ) { if ( status->isVisible() ) status->hide(); else status->show( true ); } bool WirelessApplet::mustRepaint() { OWirelessNetworkInterface* iface = interface; // check if there are enough changes to justify a (flickering) repaint // has the interface changed? if ( iface != oldiface ) { oldiface = iface; if ( iface ) { #ifdef MDEBUG @@ -429,102 +422,102 @@ bool WirelessApplet::mustRepaint() { #ifdef MDEBUG qDebug( "WIFIAPPLET: AP has changed." ); #endif renewDHCP(); } else if ( rocMODE && ( oldMODE != iface->mode() ) ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: MODE has changed." ); #endif renewDHCP(); } oldESSID = iface->SSID(); oldMODE = iface->mode(); oldFREQ = iface->frequency(); oldAP = iface->associatedAP().toString(); return false; } void WirelessApplet::updatePopupWindow() { - MWirelessNetworkInterface * iface = ( MWirelessNetworkInterface* ) interface; - int qualityH = iface->qualityPercent(); + OWirelessNetworkInterface* iface = interface; + int qualityH = iface->signalStrength(); if ( status->mgraph ) status->mgraph->addValue( qualityH, false ); QString freqString; - QString cell = ( iface->mode == "Managed" ) ? "AP: " : "Cell: "; - freqString.sprintf( "%.3f GHz", iface->freq ); - status->statusLabel->setText( "Station: " + iface->nick + "<br>" + - "ESSID: " + iface->essid + "<br>" + - "MODE: " + iface->mode + "<br>" + + QString cell = ( iface->mode() == "Managed" ) ? "AP: " : "Cell: "; + freqString.sprintf( "%.3f GHz", iface->frequency() ); + status->statusLabel->setText( "Station: " + iface->nickName() + "<br>" + + "ESSID: " + iface->SSID() + "<br>" + + "MODE: " + iface->mode() + "<br>" + "FREQ: " + freqString + "<br>" + - cell + " " + iface->APAddr ); + cell + " " + iface->associatedAP().toString() ); } const char** WirelessApplet::getQualityPixmap() { - MWirelessNetworkInterface * iface = ( MWirelessNetworkInterface* ) interface; + OWirelessNetworkInterface* iface = interface; if ( !iface ) return ( const char** ) nowireless_xpm; - int qualityH = iface->qualityPercent(); + int qualityH = iface->signalStrength(); if ( qualityH < 0 ) return ( const char** ) nowireless_xpm; if ( visualStyle == STYLE_ANTENNA ) { if ( qualityH < 1 ) return ( const char** ) connect0_xpm; if ( qualityH < 17 ) return ( const char** ) connect1_xpm; if ( qualityH < 34 ) return ( const char** ) connect2_xpm; if ( qualityH < 50 ) return ( const char** ) connect3_xpm; if ( qualityH < 65 ) return ( const char** ) connect4_xpm; return ( const char** ) connect5_xpm; } return 0; // please draw your bars } void WirelessApplet::paintEvent( QPaintEvent* ) { - MWirelessNetworkInterface * iface = ( MWirelessNetworkInterface* ) interface; + OWirelessNetworkInterface* iface = interface; QPainter p( this ); QColor color; const char** pixmap = getQualityPixmap(); if ( pixmap ) p.drawPixmap( 0, 1, pixmap ); else { - int noiseH = iface->noisePercent() * ( height() - 3 ) / 100; - int signalH = iface->signalPercent() * ( height() - 3 ) / 100; - int qualityH = iface->qualityPercent() * ( height() - 3 ) / 100; + int noiseH = 30; // iface->noisePercent() * ( height() - 3 ) / 100; + int signalH = 50; // iface->signalPercent() * ( height() - 3 ) / 100; + int qualityH = iface->signalStrength(); // iface->qualityPercent() * ( height() - 3 ) / 100; double intensity; int pixelHeight; int pixelWidth = 2; int Hue; int barSpace = 3; int leftoffset = 0; int bottomoffset = 2; // draw noise indicator pixelHeight = noiseH; Hue = 50; for ( int i = 0; i < pixelHeight; ++i ) { intensity = 50 + ( ( double ) i / ( double ) pixelHeight ) * 205; color.setHsv( Hue, 255, intensity ); p.setPen ( color ); p.drawLine( leftoffset, height() - bottomoffset - i, pixelWidth + leftoffset, height() - bottomoffset - i ); } // draw signal indicator pixelHeight = signalH; Hue = 100; leftoffset += pixelWidth + barSpace; diff --git a/noncore/applets/wirelessapplet/wirelessapplet.pro b/noncore/applets/wirelessapplet/wirelessapplet.pro index 7bd7380..636b2d3 100644 --- a/noncore/applets/wirelessapplet/wirelessapplet.pro +++ b/noncore/applets/wirelessapplet/wirelessapplet.pro @@ -1,13 +1,13 @@ TEMPLATE = lib CONFIG += qt plugin warn_on release -HEADERS = wireless.h networkinfo.h mgraph.h advancedconfig.h -SOURCES = wireless.cpp networkinfo.cpp mgraph.cpp advancedconfig.cpp +HEADERS = wireless.h mgraph.h advancedconfig.h +SOURCES = wireless.cpp mgraph.cpp advancedconfig.cpp INTERFACES = advancedconfigbase.ui TARGET = wirelessapplet DESTDIR = $(OPIEDIR)/plugins/applets INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lopiecore2 -lopienet2 VERSION = 0.1.1 include ( $(OPIEDIR)/include.pro ) |