summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-02-23 18:38:28 (UTC)
committer mickeyl <mickeyl>2004-02-23 18:38:28 (UTC)
commitd66f871dfeae78babeb1fa0b8a3e1c72dd10ea2b (patch) (side-by-side diff)
tree224c86eb4ab72154365ae450ce517c559b363bf0
parent19b274033fc05d5190cee2fa974c683892173c84 (diff)
downloadopie-d66f871dfeae78babeb1fa0b8a3e1c72dd10ea2b.zip
opie-d66f871dfeae78babeb1fa0b8a3e1c72dd10ea2b.tar.gz
opie-d66f871dfeae78babeb1fa0b8a3e1c72dd10ea2b.tar.bz2
The wireless applet uses now libopie2net instead of its own routines.
Display mode "ANTENNA" is fixed, "BAR GRAPH" is still broken but will be removed anyway, since nearly everyone used "ANTENNA".
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/wirelessapplet/networkinfo.cpp284
-rw-r--r--noncore/applets/wirelessapplet/networkinfo.h126
-rw-r--r--noncore/applets/wirelessapplet/wireless.cpp59
-rw-r--r--noncore/applets/wirelessapplet/wirelessapplet.pro4
4 files changed, 28 insertions, 445 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 )
+ if ( mustRepaint() )
{
- interface = 0;
- mustRepaint();
- return ;
+ qDebug( "WIFIAPPLET: A value has changed -> repainting." );
+ repaint();
}
- else
- if ( mustRepaint() )
- {
- //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 )