summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/wirelessapplet/networkinfo.cpp3
-rw-r--r--noncore/applets/wirelessapplet/wireless.cpp8
2 files changed, 6 insertions, 5 deletions
diff --git a/noncore/applets/wirelessapplet/networkinfo.cpp b/noncore/applets/wirelessapplet/networkinfo.cpp
index 8531fd5..2274d99 100644
--- a/noncore/applets/wirelessapplet/networkinfo.cpp
+++ b/noncore/applets/wirelessapplet/networkinfo.cpp
@@ -1,246 +1,247 @@
1/********************************************************************** 1/**********************************************************************
2** MNetwork* classes 2** MNetwork* classes
3** 3**
4** Encapsulate network information 4** Encapsulate network information
5** 5**
6** Copyright (C) 2002, Michael Lauer 6** Copyright (C) 2002, Michael Lauer
7** mickey@tm.informatik.uni-frankfurt.de 7** mickey@tm.informatik.uni-frankfurt.de
8** http://www.Vanille.de 8** http://www.Vanille.de
9** 9**
10** Based on portions of the Wireless Extensions 10** Based on portions of the Wireless Extensions
11** Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com> 11** Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
12** 12**
13** This file may be distributed and/or modified under the terms of the 13** This file may be distributed and/or modified under the terms of the
14** GNU General Public License version 2 as published by the Free Software 14** GNU General Public License version 2 as published by the Free Software
15** Foundation and appearing in the file LICENSE.GPL included in the 15** Foundation and appearing in the file LICENSE.GPL included in the
16** packaging of this file. 16** packaging of this file.
17** 17**
18** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 18** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
19** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 19** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20** 20**
21**********************************************************************/ 21**********************************************************************/
22 22
23#include "networkinfo.h" 23#include "networkinfo.h"
24 24
25#include <arpa/inet.h> 25#include <arpa/inet.h>
26#include <sys/socket.h> 26#include <sys/socket.h>
27#include <linux/if_ether.h> 27#include <linux/if_ether.h>
28#include <netinet/ip.h> 28#include <netinet/ip.h>
29#include <sys/ioctl.h> 29#include <sys/ioctl.h>
30#include <linux/wireless.h> 30#include <linux/wireless.h>
31 31
32#include <unistd.h> 32#include <unistd.h>
33#include <math.h> 33#include <math.h>
34#include <errno.h> 34#include <errno.h>
35#include <string.h> 35#include <string.h>
36 36
37#include <stdlib.h> 37#include <stdlib.h>
38 38
39#include <qstring.h> 39#include <qstring.h>
40#include <qfile.h> 40#include <qfile.h>
41#include <qtextstream.h> 41#include <qtextstream.h>
42 42
43/* estimated wireless signal strength and noise level values 43/* estimated wireless signal strength and noise level values
44 based on experimentation with Orinoco and Prism2 cards. 44 based on experimentation with Orinoco and Prism2 cards.
45 Seem to be correct, but please inform me, if you got values 45 Seem to be correct, but please inform me, if you got values
46 outside these boundaries. :Mickey: */ 46 outside these boundaries. :Mickey: */
47 47
48#define IW_UPPER 220 48#define IW_UPPER 220
49#define IW_LOWER 140 49#define IW_LOWER 140
50 50
51#define PROCNETDEV "/proc/net/dev" 51#define PROCNETDEV "/proc/net/dev"
52#define PROCNETWIRELESS "/proc/net/wireless" 52#define PROCNETWIRELESS "/proc/net/wireless"
53 53
54#define MDEBUG 0 54//#define MDEBUG 0
55#undef MDEBUG
55 56
56//--------------------------------------------------------------------------- 57//---------------------------------------------------------------------------
57// class MNetworkInterface 58// class MNetworkInterface
58// 59//
59 60
60MNetworkInterface::MNetworkInterface( const char* name ) 61MNetworkInterface::MNetworkInterface( const char* name )
61 :name( name ) 62 :name( name )
62{ 63{
63 struct ifreq ifr; 64 struct ifreq ifr;
64 struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr; 65 struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr;
65 fd = socket( AF_INET, SOCK_DGRAM, 0 ); 66 fd = socket( AF_INET, SOCK_DGRAM, 0 );
66} 67}
67 68
68MNetworkInterface::~MNetworkInterface() 69MNetworkInterface::~MNetworkInterface()
69{ 70{
70 if ( fd != -1 ) 71 if ( fd != -1 )
71 close( fd ); 72 close( fd );
72} 73}
73 74
74bool MNetworkInterface::updateStatistics() 75bool MNetworkInterface::updateStatistics()
75{ 76{
76 return true; 77 return true;
77} 78}
78 79
79//--------------------------------------------------------------------------- 80//---------------------------------------------------------------------------
80// class MWirelessNetworkInterface 81// class MWirelessNetworkInterface
81// 82//
82 83
83MWirelessNetworkInterface::MWirelessNetworkInterface( const char* n ) 84MWirelessNetworkInterface::MWirelessNetworkInterface( const char* n )
84 :MNetworkInterface( n ) 85 :MNetworkInterface( n )
85{ 86{
86 signal = 0; 87 signal = 0;
87 noise = 0; 88 noise = 0;
88 quality = 0; 89 quality = 0;
89} 90}
90 91
91MWirelessNetworkInterface::~MWirelessNetworkInterface() 92MWirelessNetworkInterface::~MWirelessNetworkInterface()
92{ 93{
93} 94}
94 95
95int MWirelessNetworkInterface::qualityPercent() 96int MWirelessNetworkInterface::qualityPercent()
96{ 97{
97 return ( quality*100 ) / 92; 98 return ( quality*100 ) / 92;
98} 99}
99 100
100int MWirelessNetworkInterface::signalPercent() 101int MWirelessNetworkInterface::signalPercent()
101{ 102{
102 return ( ( signal-IW_LOWER ) * 100 ) / IW_UPPER; 103 return ( ( signal-IW_LOWER ) * 100 ) / IW_UPPER;
103} 104}
104 105
105int MWirelessNetworkInterface::noisePercent() 106int MWirelessNetworkInterface::noisePercent()
106{ 107{
107 return ( ( noise-IW_LOWER ) * 100 ) / IW_UPPER; 108 return ( ( noise-IW_LOWER ) * 100 ) / IW_UPPER;
108} 109}
109 110
110bool MWirelessNetworkInterface::updateStatistics() 111bool MWirelessNetworkInterface::updateStatistics()
111{ 112{
112 bool base = MNetworkInterface::updateStatistics(); 113 bool base = MNetworkInterface::updateStatistics();
113 if ( !base ) 114 if ( !base )
114 return false; 115 return false;
115 116
116 const char* buffer[200]; 117 const char* buffer[200];
117 118
118 struct iwreq iwr; 119 struct iwreq iwr;
119 memset( &iwr, 0, sizeof( iwr ) ); 120 memset( &iwr, 0, sizeof( iwr ) );
120 iwr.u.essid.pointer = (caddr_t) buffer; 121 iwr.u.essid.pointer = (caddr_t) buffer;
121 iwr.u.essid.length = IW_ESSID_MAX_SIZE; 122 iwr.u.essid.length = IW_ESSID_MAX_SIZE;
122 iwr.u.essid.flags = 0; 123 iwr.u.essid.flags = 0;
123 124
124 // check if it is an IEEE 802.11 standard conform 125 // check if it is an IEEE 802.11 standard conform
125 // wireless device by sending SIOCGIWESSID 126 // wireless device by sending SIOCGIWESSID
126 // which also gives back the Extended Service Set ID 127 // which also gives back the Extended Service Set ID
127 // (see IEEE 802.11 for more information) 128 // (see IEEE 802.11 for more information)
128 129
129 strcpy( iwr.ifr_ifrn.ifrn_name, (const char*) name ); 130 strcpy( iwr.ifr_ifrn.ifrn_name, (const char*) name );
130 int result = ioctl( fd, SIOCGIWESSID, &iwr ); 131 int result = ioctl( fd, SIOCGIWESSID, &iwr );
131 if ( result == 0 ) 132 if ( result == 0 )
132 { 133 {
133 hasWirelessExtensions = true; 134 hasWirelessExtensions = true;
134 iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0'; 135 iwr.u.essid.pointer[(unsigned int) iwr.u.essid.length-1] = '\0';
135 essid = iwr.u.essid.pointer; 136 essid = iwr.u.essid.pointer;
136 } 137 }
137 else essid = "*** Unknown ***"; 138 else essid = "*** Unknown ***";
138 139
139 // Address of associated access-point 140 // Address of associated access-point
140 141
141 result = ioctl( fd, SIOCGIWAP, &iwr ); 142 result = ioctl( fd, SIOCGIWAP, &iwr );
142 if ( result == 0 ) 143 if ( result == 0 )
143 { 144 {
144 APAddr.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X", 145 APAddr.sprintf( "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
145 iwr.u.ap_addr.sa_data[0]&0xff, 146 iwr.u.ap_addr.sa_data[0]&0xff,
146 iwr.u.ap_addr.sa_data[1]&0xff, 147 iwr.u.ap_addr.sa_data[1]&0xff,
147 iwr.u.ap_addr.sa_data[2]&0xff, 148 iwr.u.ap_addr.sa_data[2]&0xff,
148 iwr.u.ap_addr.sa_data[3]&0xff, 149 iwr.u.ap_addr.sa_data[3]&0xff,
149 iwr.u.ap_addr.sa_data[4]&0xff, 150 iwr.u.ap_addr.sa_data[4]&0xff,
150 iwr.u.ap_addr.sa_data[5]&0xff ); 151 iwr.u.ap_addr.sa_data[5]&0xff );
151 } else APAddr = "*** Unknown ***"; 152 } else APAddr = "*** Unknown ***";
152 153
153 iwr.u.data.pointer = (caddr_t) buffer; 154 iwr.u.data.pointer = (caddr_t) buffer;
154 iwr.u.data.length = IW_ESSID_MAX_SIZE; 155 iwr.u.data.length = IW_ESSID_MAX_SIZE;
155 iwr.u.data.flags = 0; 156 iwr.u.data.flags = 0;
156 157
157 result = ioctl( fd, SIOCGIWNICKN, &iwr ); 158 result = ioctl( fd, SIOCGIWNICKN, &iwr );
158 if ( result == 0 ) 159 if ( result == 0 )
159 { 160 {
160 iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0'; 161 iwr.u.data.pointer[(unsigned int) iwr.u.data.length-1] = '\0';
161 nick = iwr.u.data.pointer; 162 nick = iwr.u.data.pointer;
162 } else nick = "*** Unknown ***"; 163 } else nick = "*** Unknown ***";
163 164
164 result = ioctl( fd, SIOCGIWMODE, &iwr ); 165 result = ioctl( fd, SIOCGIWMODE, &iwr );
165 if ( result == 0 ) 166 if ( result == 0 )
166 mode = ( iwr.u.mode == IW_MODE_ADHOC ) ? "Ad-Hoc" : "Managed"; 167 mode = ( iwr.u.mode == IW_MODE_ADHOC ) ? "Ad-Hoc" : "Managed";
167 else mode = "*** Unknown ***"; 168 else mode = "*** Unknown ***";
168 169
169 result = ioctl( fd, SIOCGIWFREQ, &iwr ); 170 result = ioctl( fd, SIOCGIWFREQ, &iwr );
170 if ( result == 0 ) 171 if ( result == 0 )
171 freq = double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000; 172 freq = double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000;
172 else freq = 0; 173 else freq = 0;
173 174
174 // gather link quality from /proc/net/wireless 175 // gather link quality from /proc/net/wireless
175 176
176 char c; 177 char c;
177 QString status; 178 QString status;
178 QString name; 179 QString name;
179 QFile wfile( PROCNETWIRELESS ); 180 QFile wfile( PROCNETWIRELESS );
180 bool hasFile = wfile.open( IO_ReadOnly ); 181 bool hasFile = wfile.open( IO_ReadOnly );
181 QTextStream wstream( &wfile ); 182 QTextStream wstream( &wfile );
182 if ( hasFile ) 183 if ( hasFile )
183 { 184 {
184 wstream.readLine(); // skip the first two lines 185 wstream.readLine(); // skip the first two lines
185 wstream.readLine(); // because they only contain headers 186 wstream.readLine(); // because they only contain headers
186 } 187 }
187 if ( ( !hasFile ) || ( wstream.atEnd() ) ) 188 if ( ( !hasFile ) || ( wstream.atEnd() ) )
188 { 189 {
189#ifdef MDEBUG 190#ifdef MDEBUG
190 qDebug( "WIFIAPPLET: D'oh! Someone removed the card..." ); 191 qDebug( "WIFIAPPLET: D'oh! Someone removed the card..." );
191#endif 192#endif
192 quality = -1; 193 quality = -1;
193 signal = IW_LOWER; 194 signal = IW_LOWER;
194 noise = IW_LOWER; 195 noise = IW_LOWER;
195 return false; 196 return false;
196 } 197 }
197 198
198 wstream >> name >> status >> quality >> c >> signal >> c >> noise; 199 wstream >> name >> status >> quality >> c >> signal >> c >> noise;
199 200
200 if ( quality > 92 ) 201 if ( quality > 92 )
201#ifdef MDEBUG 202#ifdef MDEBUG
202 qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality ); 203 qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality );
203#endif 204#endif
204 if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) ) 205 if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) )
205#ifdef MDEBUG 206#ifdef MDEBUG
206 qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal ); 207 qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal );
207#endif 208#endif
208 if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) ) 209 if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) )
209#ifdef MDEBUG 210#ifdef MDEBUG
210 qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise ); 211 qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise );
211#endif 212#endif
212 213
213 return true; 214 return true;
214 215
215} 216}
216 217
217//--------------------------------------------------------------------------- 218//---------------------------------------------------------------------------
218// class Network 219// class Network
219// 220//
220 221
221MNetwork::MNetwork() 222MNetwork::MNetwork()
222{ 223{
223 procfile = PROCNETDEV; 224 procfile = PROCNETDEV;
224} 225}
225 226
226MNetwork::~MNetwork() 227MNetwork::~MNetwork()
227{ 228{
228} 229}
229 230
230//--------------------------------------------------------------------------- 231//---------------------------------------------------------------------------
231// class WirelessNetwork 232// class WirelessNetwork
232// 233//
233 234
234MWirelessNetwork::MWirelessNetwork() 235MWirelessNetwork::MWirelessNetwork()
235{ 236{
236 procfile = PROCNETWIRELESS; 237 procfile = PROCNETWIRELESS;
237} 238}
238 239
239MWirelessNetwork::~MWirelessNetwork() 240MWirelessNetwork::~MWirelessNetwork()
240{ 241{
241} 242}
242 243
243MNetworkInterface* MWirelessNetwork::createInterface( const char* n ) const 244MNetworkInterface* MWirelessNetwork::createInterface( const char* n ) const
244{ 245{
245 return new MWirelessNetworkInterface( n ); 246 return new MWirelessNetworkInterface( n );
246} 247}
diff --git a/noncore/applets/wirelessapplet/wireless.cpp b/noncore/applets/wirelessapplet/wireless.cpp
index a5aabb0..649cf20 100644
--- a/noncore/applets/wirelessapplet/wireless.cpp
+++ b/noncore/applets/wirelessapplet/wireless.cpp
@@ -1,427 +1,427 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer 2** Copyright (C) 2002 Michael 'Mickey' Lauer
3** <mickey@tm.informatik.uni-frankfurt.de> 3** <mickey@tm.informatik.uni-frankfurt.de>
4** http://www.Vanille.de 4** http://www.Vanille.de
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#include "wireless.h" 16#include "wireless.h"
17 17
18#include <qapplication.h> 18#include <qapplication.h>
19#include <qpe/qpeapplication.h> 19#include <qpe/qpeapplication.h>
20#include <qpe/config.h> 20#include <qpe/config.h>
21 21
22#include <qpoint.h> 22#include <qpoint.h>
23#include <qradiobutton.h> 23#include <qradiobutton.h>
24#include <qpushbutton.h> 24#include <qpushbutton.h>
25#include <qpainter.h> 25#include <qpainter.h>
26#include <qlabel.h> 26#include <qlabel.h>
27#include <qslider.h> 27#include <qslider.h>
28#include <qbuttongroup.h> 28#include <qbuttongroup.h>
29#include <qlayout.h> 29#include <qlayout.h>
30#include <qframe.h> 30#include <qframe.h>
31#include <qpixmap.h> 31#include <qpixmap.h>
32#include <qstring.h> 32#include <qstring.h>
33#include <qfile.h> 33#include <qfile.h>
34#include <qtextstream.h> 34#include <qtextstream.h>
35 35
36#include <sys/types.h> 36#include <sys/types.h>
37#include <signal.h> 37#include <signal.h>
38 38
39#include "networkinfo.h" 39#include "networkinfo.h"
40#include "mgraph.h" 40#include "mgraph.h"
41 41
42#include "advancedconfig.h" 42#include "advancedconfig.h"
43 43
44#include "connect0.xpm" 44#include "connect0.xpm"
45#include "connect1.xpm" 45#include "connect1.xpm"
46#include "connect2.xpm" 46#include "connect2.xpm"
47#include "connect3.xpm" 47#include "connect3.xpm"
48#include "connect4.xpm" 48#include "connect4.xpm"
49#include "connect5.xpm" 49#include "connect5.xpm"
50#include "nowireless.xpm" 50#include "nowireless.xpm"
51 51
52#define STYLE_BARS 0 52#define STYLE_BARS 0
53#define STYLE_ANTENNA 1 53#define STYLE_ANTENNA 1
54 54
55#define MDEBUG 0 55//#define MDEBUG 0
56#undef MDEBUG
56 57
57WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const char *name ) 58WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const char *name )
58 : QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), applet( applet ) 59 : QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), applet( applet )
59{ 60{
60 61
61 readConfig(); 62 readConfig();
62 writeConfigEntry( "UpdateFrequency", updateFrequency ); 63 writeConfigEntry( "UpdateFrequency", updateFrequency );
63 writeConfigEntry( "DisplayStyle", displayStyle ); 64 writeConfigEntry( "DisplayStyle", displayStyle );
64 65
65 setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); 66 setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
66 QGridLayout *grid = new QGridLayout( this, 3, 2, 6, 2, "top layout" ); 67 QGridLayout *grid = new QGridLayout( this, 3, 2, 6, 2, "top layout" );
67 68
68 /* status label */ 69 /* status label */
69 70
70 statusLabel = new QLabel( this, "statuslabel" ); 71 statusLabel = new QLabel( this, "statuslabel" );
71 QString text( "Wireless Status:<br>" 72 QString text( "Wireless Status:<br>"
72 "*** Unknown ***<br>" 73 "*** Unknown ***<br>"
73 "Card not inserted ?<br>" 74 "Card not inserted ?<br>"
74 "Or Sharp ROM ?<br>" 75 "Or Sharp ROM ?<br>"
75 "CELL: 00:00:00:00:00:00" ); 76 "CELL: 00:00:00:00:00:00" );
76/* QString text( "Station: Unknown<br>" 77/* QString text( "Station: Unknown<br>"
77 "ESSID: Unknown<br>" 78 "ESSID: Unknown<br>"
78 "MODE: Unknown<br>" 79 "MODE: Unknown<br>"
79 "FREQ: Unknown<br>" 80 "FREQ: Unknown<br>"
80 "CELL: AA:BB:CC:DD:EE:FF" ); */ 81 "CELL: AA:BB:CC:DD:EE:FF" ); */
81 statusLabel->setText( text ); 82 statusLabel->setText( text );
82 statusLabel->setFixedSize( statusLabel->sizeHint() ); 83 statusLabel->setFixedSize( statusLabel->sizeHint() );
83 grid->addWidget( statusLabel, 0, 0 ); 84 grid->addWidget( statusLabel, 0, 0 );
84 85
85 /* visualization group box */ 86 /* visualization group box */
86 87
87 QButtonGroup* group = new QButtonGroup( 1, Qt::Horizontal, "Visualization", this ); 88 QButtonGroup* group = new QButtonGroup( 1, Qt::Horizontal, "Visualization", this );
88 QRadioButton* r1 = new QRadioButton( "Color Bars", group ); 89 QRadioButton* r1 = new QRadioButton( "Color Bars", group );
89 QRadioButton* r2 = new QRadioButton( "Antenna", group ); 90 QRadioButton* r2 = new QRadioButton( "Antenna", group );
90 r1->setFocusPolicy( QWidget::NoFocus ); 91 r1->setFocusPolicy( QWidget::NoFocus );
91 r2->setFocusPolicy( QWidget::NoFocus ); 92 r2->setFocusPolicy( QWidget::NoFocus );
92 group->setFocusPolicy( QWidget::NoFocus ); 93 group->setFocusPolicy( QWidget::NoFocus );
93 group->setButton( displayStyle ); 94 group->setButton( displayStyle );
94 grid->addWidget( group, 0, 1 ); 95 grid->addWidget( group, 0, 1 );
95 96
96 /* quality graph */ 97 /* quality graph */
97 98
98 mgraph = new MGraph( this ); 99 mgraph = new MGraph( this );
99 mgraph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); 100 mgraph->setFrameStyle( QFrame::Panel | QFrame::Sunken );
100 mgraph->setMin( 0 ); 101 mgraph->setMin( 0 );
101 mgraph->setMax( 92 ); 102 mgraph->setMax( 92 );
102 grid->addWidget( mgraph, 1, 0 ); 103 grid->addWidget( mgraph, 1, 0 );
103 mgraph->setFocusPolicy( QWidget::NoFocus ); 104 mgraph->setFocusPolicy( QWidget::NoFocus );
104 105
105 /* advanced configuration Button */ 106 /* advanced configuration Button */
106 107
107 QPushButton* advanced = new QPushButton( "Advanced...", this ); 108 QPushButton* advanced = new QPushButton( "Advanced...", this );
108 advanced->setFocusPolicy( QWidget::NoFocus ); 109 advanced->setFocusPolicy( QWidget::NoFocus );
109 grid->addWidget( advanced, 2, 0, Qt::AlignCenter ); 110 grid->addWidget( advanced, 2, 0, Qt::AlignCenter );
110 connect( advanced, SIGNAL( clicked() ), 111 connect( advanced, SIGNAL( clicked() ),
111 this, SLOT( advancedConfigClicked() ) ); 112 this, SLOT( advancedConfigClicked() ) );
112 113
113 /* update Frequency Label */ 114 /* update Frequency Label */
114 115
115 updateLabel = new QLabel( this ); 116 updateLabel = new QLabel( this );
116 text.sprintf( "Update every %d s", updateFrequency ); 117 text.sprintf( "Update every %d s", updateFrequency );
117 updateLabel->setText( text ); 118 updateLabel->setText( text );
118 grid->addWidget( updateLabel, 2, 1 ); 119 grid->addWidget( updateLabel, 2, 1 );
119 120
120 /* update Frequency Slider */ 121 /* update Frequency Slider */
121 122
122 QSlider* updateSlider = new QSlider( QSlider::Horizontal, this ); 123 QSlider* updateSlider = new QSlider( QSlider::Horizontal, this );
123 updateSlider->setRange( 0, 9 ); 124 updateSlider->setRange( 0, 9 );
124 updateSlider->setValue( updateFrequency ); 125 updateSlider->setValue( updateFrequency );
125 updateSlider->setTickmarks( QSlider::Both ); 126 updateSlider->setTickmarks( QSlider::Both );
126 updateSlider->setTickInterval( 1 ); 127 updateSlider->setTickInterval( 1 );
127 updateSlider->setSteps( 1, 1 ); 128 updateSlider->setSteps( 1, 1 );
128 updateSlider->setFocusPolicy( QWidget::NoFocus ); 129 updateSlider->setFocusPolicy( QWidget::NoFocus );
129 grid->addWidget( updateSlider, 1, 1 ); 130 grid->addWidget( updateSlider, 1, 1 );
130 connect( updateSlider, SIGNAL( valueChanged( int ) ), 131 connect( updateSlider, SIGNAL( valueChanged( int ) ),
131 this, SLOT( updateDelayChange( int ) ) ); 132 this, SLOT( updateDelayChange( int ) ) );
132 133
133 setFixedSize( sizeHint() ); 134 setFixedSize( sizeHint() );
134 setFocusPolicy( QWidget::NoFocus ); 135 setFocusPolicy( QWidget::NoFocus );
135 136
136 applet->displayStyleChange( displayStyle ); 137 applet->displayStyleChange( displayStyle );
137 applet->updateDelayChange( updateFrequency ); 138 applet->updateDelayChange( updateFrequency );
138 139
139 connect( group, SIGNAL( clicked( int ) ), 140 connect( group, SIGNAL( clicked( int ) ),
140 this, SLOT( displayStyleChange( int ) ) ); 141 this, SLOT( displayStyleChange( int ) ) );
141 142
142 applet->updateDHCPConfig( rocESSID, rocFREQ, rocAP, rocMODE ); 143 applet->updateDHCPConfig( rocESSID, rocFREQ, rocAP, rocMODE );
143} 144}
144 145
145void WirelessControl::advancedConfigClicked() 146void WirelessControl::advancedConfigClicked()
146{ 147{
147 AdvancedConfig* a = new AdvancedConfig( this, "dialog", TRUE ); 148 AdvancedConfig* a = new AdvancedConfig( this, "dialog", TRUE );
148 int result = a->exec(); 149 int result = a->exec();
149 a->hide(); 150 a->hide();
150 delete a; 151 delete a;
151 if ( result == QDialog::Accepted ) 152 if ( result == QDialog::Accepted )
152 { 153 {
153 readConfig(); 154 readConfig();
154 applet->updateDHCPConfig( rocESSID, rocFREQ, rocAP, rocMODE ); 155 applet->updateDHCPConfig( rocESSID, rocFREQ, rocAP, rocMODE );
155 } 156 }
156} 157}
157 158
158void WirelessControl::updateDelayChange( int delay ) 159void WirelessControl::updateDelayChange( int delay )
159{ 160{
160 QString text; 161 QString text;
161 text.sprintf( "Update every %d s", delay ); 162 text.sprintf( "Update every %d s", delay );
162 updateLabel->setText( text ); 163 updateLabel->setText( text );
163 applet->updateDelayChange( delay ); 164 applet->updateDelayChange( delay );
164 writeConfigEntry( "UpdateFrequency", delay ); 165 writeConfigEntry( "UpdateFrequency", delay );
165} 166}
166 167
167void WirelessControl::displayStyleChange( int style ) 168void WirelessControl::displayStyleChange( int style )
168{ 169{
169 applet->displayStyleChange( style ); 170 applet->displayStyleChange( style );
170 writeConfigEntry( "DisplayStyle", style ); 171 writeConfigEntry( "DisplayStyle", style );
171} 172}
172 173
173void WirelessControl::show ( bool ) 174void WirelessControl::show ( bool )
174{ 175{
175 QPoint curPos = applet->mapToGlobal( QPoint ( 0, 0 ) ); 176 QPoint curPos = applet->mapToGlobal( QPoint ( 0, 0 ) );
176 177
177 int w = sizeHint().width(); 178 int w = sizeHint().width();
178 int x = curPos.x() - ( w / 2 ); 179 int x = curPos.x() - ( w / 2 );
179 180
180 if ( ( x + w ) > QPEApplication::desktop()->width() ) 181 if ( ( x + w ) > QPEApplication::desktop()->width() )
181 x = QPEApplication::desktop ( )-> width ( ) - w; 182 x = QPEApplication::desktop ( )-> width ( ) - w;
182 183
183 move( x, curPos.y () - sizeHint().height () ); 184 move( x, curPos.y () - sizeHint().height () );
184 QFrame::show(); 185 QFrame::show();
185} 186}
186 187
187void WirelessControl::readConfig() 188void WirelessControl::readConfig()
188{ 189{
189 Config cfg( "qpe" ); 190 Config cfg( "qpe" );
190 cfg.setGroup( "Wireless" ); 191 cfg.setGroup( "Wireless" );
191 192
192 updateFrequency = cfg.readNumEntry( "UpdateFrequency", 2 ); 193 updateFrequency = cfg.readNumEntry( "UpdateFrequency", 2 );
193 displayStyle = cfg.readNumEntry( "DisplayStyle", STYLE_ANTENNA ); 194 displayStyle = cfg.readNumEntry( "DisplayStyle", STYLE_ANTENNA );
194 rocESSID = cfg.readBoolEntry( "renew_dhcp_on_essid_change", false ); 195 rocESSID = cfg.readBoolEntry( "renew_dhcp_on_essid_change", false );
195 rocFREQ = cfg.readBoolEntry( "renew_dhcp_on_freq_change", false ); 196 rocFREQ = cfg.readBoolEntry( "renew_dhcp_on_freq_change", false );
196 rocAP = cfg.readBoolEntry( "renew_dhcp_on_ap_change", false ); 197 rocAP = cfg.readBoolEntry( "renew_dhcp_on_ap_change", false );
197 rocMODE = cfg.readBoolEntry( "renew_dhcp_on_mode_change", false ); 198 rocMODE = cfg.readBoolEntry( "renew_dhcp_on_mode_change", false );
198} 199}
199 200
200void WirelessControl::writeConfigEntry( const char *entry, int val ) 201void WirelessControl::writeConfigEntry( const char *entry, int val )
201{ 202{
202 Config cfg( "qpe" ); 203 Config cfg( "qpe" );
203 cfg.setGroup( "Wireless" ); 204 cfg.setGroup( "Wireless" );
204 cfg.writeEntry( entry, val ); 205 cfg.writeEntry( entry, val );
205} 206}
206 207
207//=========================================================================== 208//===========================================================================
208 209
209WirelessApplet::WirelessApplet( QWidget *parent, const char *name ) 210WirelessApplet::WirelessApplet( QWidget *parent, const char *name )
210 : QWidget( parent, name ), visualStyle( STYLE_ANTENNA ), 211 : QWidget( parent, name ), visualStyle( STYLE_ANTENNA ),
211 timer( 0 ), interface( 0 ), 212 timer( 0 ), interface( 0 ),
212 rocESSID( false ), rocFREQ( false ), rocAP( false ), rocMODE( false ) 213 rocESSID( false ), rocFREQ( false ), rocAP( false ), rocMODE( false )
213{ 214{
214 setFixedHeight( 18 ); 215 setFixedHeight( 18 );
215 setFixedWidth( 14 ); 216 setFixedWidth( 14 );
216 network = new MWirelessNetwork(); 217 network = new MWirelessNetwork();
217 status = new WirelessControl( this, 0, "wireless status" ); 218 status = new WirelessControl( this, 0, "wireless status" );
218} 219}
219 220
220void WirelessApplet::checkInterface() 221void WirelessApplet::checkInterface()
221{ 222{
222 interface = network->getFirstInterface(); 223 interface = network->getFirstInterface();
223 if ( interface ) 224 if ( interface )
224 { 225 {
225#ifdef MDEBUG 226#ifdef MDEBUG
226 qDebug( "WIFIAPPLET: using interface '%s'", (const char*) 227 qDebug( "WIFIAPPLET: using interface '%s'", (const char*) interface->getName() );
227#endif 228#endif
228 interface->getName() );
229 } 229 }
230 else 230 else
231 { 231 {
232#ifdef MDEBUG 232#ifdef MDEBUG
233 qDebug( "WIFIAPPLET: D'oh! No Wireless interface present... :(" ); 233 qDebug( "WIFIAPPLET: D'oh! No Wireless interface present... :(" );
234 hide();
235#endif 234#endif
235 hide();
236 } 236 }
237} 237}
238 238
239void WirelessApplet::renewDHCP() 239void WirelessApplet::renewDHCP()
240{ 240{
241#ifdef MDEBUG 241#ifdef MDEBUG
242 qDebug( "WIFIAPPLET: Going to request a DHCP configuration renew." ); 242 qDebug( "WIFIAPPLET: Going to request a DHCP configuration renew." );
243#endif 243#endif
244 244
245 QString pidfile; 245 QString pidfile;
246 if ( !interface ) 246 if ( !interface )
247 return; 247 return;
248 QString ifacename( interface->getName() ); 248 QString ifacename( interface->getName() );
249 pidfile.sprintf( "/var/run/dhcpcd-%s.pid", (const char* ) ifacename ); 249 pidfile.sprintf( "/var/run/dhcpcd-%s.pid", (const char* ) ifacename );
250#ifdef MDEBUG 250#ifdef MDEBUG
251 qDebug( "WIFIAPPLET: pidfile is '%s'", (const char*) pidfile ); 251 qDebug( "WIFIAPPLET: pidfile is '%s'", (const char*) pidfile );
252#endif 252#endif
253 int pid; 253 int pid;
254 QFile pfile( pidfile ); 254 QFile pfile( pidfile );
255 bool hasFile = pfile.open( IO_ReadOnly ); 255 bool hasFile = pfile.open( IO_ReadOnly );
256 QTextStream s( &pfile ); 256 QTextStream s( &pfile );
257 if ( hasFile ) 257 if ( hasFile )
258 s >> pid; 258 s >> pid;
259#ifdef MDEBUG 259#ifdef MDEBUG
260 qDebug( "WIFIAPPLET: sent -14 to pid %d", pid ); 260 qDebug( "WIFIAPPLET: sent -14 to pid %d", pid );
261#endif 261#endif
262 kill( pid, -14 ); 262 kill( pid, -14 );
263 263
264} 264}
265 265
266void WirelessApplet::updateDHCPConfig( bool ESSID, bool FREQ, bool AP, bool MODE ) 266void WirelessApplet::updateDHCPConfig( bool ESSID, bool FREQ, bool AP, bool MODE )
267{ 267{
268 rocESSID = ESSID; 268 rocESSID = ESSID;
269 rocFREQ = FREQ; 269 rocFREQ = FREQ;
270 rocAP = AP; 270 rocAP = AP;
271 rocMODE = MODE; 271 rocMODE = MODE;
272} 272}
273 273
274void WirelessApplet::updateDelayChange( int delay ) 274void WirelessApplet::updateDelayChange( int delay )
275{ 275{
276 if ( timer ) 276 if ( timer )
277 killTimer( timer ); 277 killTimer( timer );
278 delay *= 1000; 278 delay *= 1000;
279 if ( delay == 0 ) 279 if ( delay == 0 )
280 delay = 50; 280 delay = 50;
281 timer = startTimer( delay ); 281 timer = startTimer( delay );
282} 282}
283 283
284void WirelessApplet::displayStyleChange( int style ) 284void WirelessApplet::displayStyleChange( int style )
285{ 285{
286 visualStyle = style; 286 visualStyle = style;
287 repaint(); 287 repaint();
288} 288}
289 289
290WirelessApplet::~WirelessApplet() 290WirelessApplet::~WirelessApplet()
291{ 291{
292} 292}
293 293
294void WirelessApplet::timerEvent( QTimerEvent* ) 294void WirelessApplet::timerEvent( QTimerEvent* )
295{ 295{
296 MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface; 296 MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface;
297 297
298 if ( iface ) 298 if ( iface )
299 { 299 {
300 bool statResult = iface->updateStatistics(); 300 bool statResult = iface->updateStatistics();
301 if ( !statResult ) 301 if ( !statResult )
302 { 302 {
303 interface = 0; 303 interface = 0;
304 mustRepaint(); 304 mustRepaint();
305 return; 305 return;
306 } else 306 } else
307 if ( mustRepaint() ) 307 if ( mustRepaint() )
308 { 308 {
309 //qDebug( "WIFIAPPLET: A value has changed -> repainting." ); 309 //qDebug( "WIFIAPPLET: A value has changed -> repainting." );
310 repaint(); 310 repaint();
311 } 311 }
312 312
313 if ( status->isVisible() ) 313 if ( status->isVisible() )
314 updatePopupWindow(); 314 updatePopupWindow();
315 } else checkInterface(); 315 } else checkInterface();
316} 316}
317 317
318void WirelessApplet::mousePressEvent( QMouseEvent *) 318void WirelessApplet::mousePressEvent( QMouseEvent *)
319{ 319{
320 if ( status->isVisible() ) 320 if ( status->isVisible() )
321 status->hide(); 321 status->hide();
322 else 322 else
323 status->show( true ); 323 status->show( true );
324} 324}
325 325
326bool WirelessApplet::mustRepaint() 326bool WirelessApplet::mustRepaint()
327{ 327{
328 MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface; 328 MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface;
329 329
330 // check if there are enough changes to justify a (flickering) repaint 330 // check if there are enough changes to justify a (flickering) repaint
331 331
332 // has the interface changed? 332 // has the interface changed?
333 333
334 if ( iface != oldiface ) 334 if ( iface != oldiface )
335 { 335 {
336 oldiface = iface; 336 oldiface = iface;
337 if ( iface ) 337 if ( iface )
338 { 338 {
339#ifdef MDEBUG 339#ifdef MDEBUG
340 qDebug( "WIFIAPPLET: We had no interface but now we have one! :-)" ); 340 qDebug( "WIFIAPPLET: We had no interface but now we have one! :-)" );
341#endif 341#endif
342 show(); 342 show();
343 } 343 }
344 else 344 else
345 { 345 {
346#ifdef MDEBUG 346#ifdef MDEBUG
347 qDebug( "WIFIAPPLET: We had a interface but now we don't have one! ;-(" ); 347 qDebug( "WIFIAPPLET: We had a interface but now we don't have one! ;-(" );
348#endif 348#endif
349 hide(); 349 hide();
350 return true; 350 return true;
351 } 351 }
352 } 352 }
353 353
354 const char** pixmap = getQualityPixmap(); 354 const char** pixmap = getQualityPixmap();
355 355
356 if ( pixmap && ( pixmap != oldpixmap ) ) 356 if ( pixmap && ( pixmap != oldpixmap ) )
357 { 357 {
358 oldpixmap = pixmap; 358 oldpixmap = pixmap;
359 return true; 359 return true;
360 } 360 }
361 361
362 int noiseH = iface->noisePercent() * ( height() - 3 ) / 100; 362 int noiseH = iface->noisePercent() * ( height() - 3 ) / 100;
363 int signalH = iface->signalPercent() * ( height() - 3 ) / 100; 363 int signalH = iface->signalPercent() * ( height() - 3 ) / 100;
364 int qualityH = iface->qualityPercent() * ( height() - 3 ) / 100; 364 int qualityH = iface->qualityPercent() * ( height() - 3 ) / 100;
365 365
366 if ( ( noiseH != oldnoiseH ) 366 if ( ( noiseH != oldnoiseH )
367 || ( signalH != oldsignalH ) 367 || ( signalH != oldsignalH )
368 || ( qualityH != oldqualityH ) ) 368 || ( qualityH != oldqualityH ) )
369 { 369 {
370 oldnoiseH = noiseH; 370 oldnoiseH = noiseH;
371 oldsignalH = signalH; 371 oldsignalH = signalH;
372 oldqualityH = qualityH; 372 oldqualityH = qualityH;
373 return true; 373 return true;
374 } 374 }
375 375
376 if ( rocESSID && ( oldESSID != iface->essid ) ) 376 if ( rocESSID && ( oldESSID != iface->essid ) )
377 { 377 {
378#ifdef MDEBUG 378#ifdef MDEBUG
379 qDebug( "WIFIAPPLET: ESSID has changed."); 379 qDebug( "WIFIAPPLET: ESSID has changed.");
380#endif 380#endif
381 renewDHCP(); 381 renewDHCP();
382 } 382 }
383 else if ( rocFREQ && ( oldFREQ != iface->freq ) ) 383 else if ( rocFREQ && ( oldFREQ != iface->freq ) )
384 { 384 {
385#ifdef MDEBUG 385#ifdef MDEBUG
386 qDebug( "WIFIAPPLET: FREQ has changed."); 386 qDebug( "WIFIAPPLET: FREQ has changed.");
387#endif 387#endif
388 renewDHCP(); 388 renewDHCP();
389 } 389 }
390 else if ( rocAP && ( oldAP != iface->APAddr ) ) 390 else if ( rocAP && ( oldAP != iface->APAddr ) )
391 { 391 {
392#ifdef MDEBUG 392#ifdef MDEBUG
393 qDebug( "WIFIAPPLET: AP has changed."); 393 qDebug( "WIFIAPPLET: AP has changed.");
394#endif 394#endif
395 renewDHCP(); 395 renewDHCP();
396 } 396 }
397 else if ( rocMODE && ( oldMODE != iface->mode ) ) 397 else if ( rocMODE && ( oldMODE != iface->mode ) )
398 { 398 {
399#ifdef MDEBUG 399#ifdef MDEBUG
400 qDebug( "WIFIAPPLET: MODE has changed."); 400 qDebug( "WIFIAPPLET: MODE has changed.");
401#endif 401#endif
402 renewDHCP(); 402 renewDHCP();
403 } 403 }
404 404
405 oldESSID = iface->essid; 405 oldESSID = iface->essid;
406 oldMODE = iface->mode; 406 oldMODE = iface->mode;
407 oldFREQ = iface->freq; 407 oldFREQ = iface->freq;
408 oldAP = iface->APAddr; 408 oldAP = iface->APAddr;
409 409
410 return false; 410 return false;
411} 411}
412 412
413void WirelessApplet::updatePopupWindow() 413void WirelessApplet::updatePopupWindow()
414{ 414{
415 MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface; 415 MWirelessNetworkInterface* iface = ( MWirelessNetworkInterface* ) interface;
416 int qualityH = iface->qualityPercent(); 416 int qualityH = iface->qualityPercent();
417 417
418 if ( status->mgraph ) 418 if ( status->mgraph )
419 status->mgraph->addValue( qualityH, false ); 419 status->mgraph->addValue( qualityH, false );
420 420
421 QString freqString; 421 QString freqString;
422 QString cell = ( iface->mode == "Managed" ) ? "AP: " : "Cell: "; 422 QString cell = ( iface->mode == "Managed" ) ? "AP: " : "Cell: ";
423 freqString.sprintf( "%.3f GHz", iface->freq ); 423 freqString.sprintf( "%.3f GHz", iface->freq );
424 status->statusLabel->setText( "Station: " + iface->nick + "<br>" + 424 status->statusLabel->setText( "Station: " + iface->nick + "<br>" +
425 "ESSID: " + iface->essid + "<br>" + 425 "ESSID: " + iface->essid + "<br>" +
426 "MODE: " + iface->mode + "<br>" + 426 "MODE: " + iface->mode + "<br>" +
427 "FREQ: " + freqString + "<br>" + 427 "FREQ: " + freqString + "<br>" +