summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings/wlan/wextensions.cpp
Side-by-side diff
Diffstat (limited to 'noncore/settings/networksettings/wlan/wextensions.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/networksettings/wlan/wextensions.cpp41
1 files changed, 29 insertions, 12 deletions
diff --git a/noncore/settings/networksettings/wlan/wextensions.cpp b/noncore/settings/networksettings/wlan/wextensions.cpp
index f45ebf2..ef4ba8f 100644
--- a/noncore/settings/networksettings/wlan/wextensions.cpp
+++ b/noncore/settings/networksettings/wlan/wextensions.cpp
@@ -7,14 +7,14 @@
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <math.h>
#define PROCNETWIRELESS "/proc/net/wireless"
-#define IW_LOWER 140
-#define IW_UPPER 200
+#define IW_LOWER 0
+#define IW_UPPER 256
/**
* Constructor. Sets hasWirelessExtensions
*/
WExtensions::WExtensions(QString interfaceName){
interface = interfaceName;
@@ -86,14 +86,27 @@ QString WExtensions::mode(){
*/
double WExtensions::frequency(){
if(!hasWirelessExtensions)
return 0;
if ( 0 == ioctl( fd, SIOCGIWFREQ, &iwr ))
return (double( iwr.u.freq.m ) * pow( 10, iwr.u.freq.e ) / 1000000000);
- return 0;;
+ return 0;
+}
+
+/***
+ * Get the current rate that the card is transmiting at.
+ */
+double WExtensions::rate(){
+ if(!hasWirelessExtensions)
+ return 0;
+ if(0 == ioctl(fd, SIOCGIWRATE, &iwr)){
+ return ((double)iwr.u.bitrate.value)/1000000;
}
+ return 0;
+}
+
/**
* @return QString the AccessPoint that the interface is connected to.
*/
QString WExtensions::ap(){
if(!hasWirelessExtensions)
@@ -107,15 +120,21 @@ QString WExtensions::ap(){
iwr.u.ap_addr.sa_data[3]&0xff,
iwr.u.ap_addr.sa_data[4]&0xff,
iwr.u.ap_addr.sa_data[5]&0xff );
return ap;
}
else return QString();
-
}
+/**
+ * Get the stats for interfaces
+ * @param signal the signal strength of interface
+ * @param noise the noise level of the interface
+ * @param quality the quality level of the interface
+ * @return bool true if successfull
+ */
bool WExtensions::stats(int &signal, int &noise, int &quality){
// gather link quality from /proc/net/wireless
if(!QFile::exists(PROCNETWIRELESS))
return false;
char c;
@@ -128,30 +147,28 @@ bool WExtensions::stats(int &signal, int &noise, int &quality){
QTextStream wstream( &wfile );
wstream.readLine(); // skip the first two lines
wstream.readLine(); // because they only contain headers
while(!wstream.atEnd()){
wstream >> name >> status >> quality >> c >> signal >> c >> noise;
- if(name == interface){
+ if(name == QString("%1:").arg(interface)){
if ( quality > 92 )
- #ifdef MDEBUG
qDebug( "WIFIAPPLET: D'oh! Quality %d > estimated max!\n", quality );
- #endif
if ( ( signal > IW_UPPER ) || ( signal < IW_LOWER ) )
- #ifdef MDEBUG
qDebug( "WIFIAPPLET: Doh! Strength %d > estimated max!\n", signal );
- #endif
if ( ( noise > IW_UPPER ) || ( noise < IW_LOWER ) )
- #ifdef MDEBUG
qDebug( "WIFIAPPLET: Doh! Noise %d > estimated max!\n", noise );
- #endif
+ qDebug(QString("q:%1, s:%2, n:%3").arg(quality).arg(signal).arg(noise).latin1());
+ signal = ( ( signal-IW_LOWER ) * 100 ) / IW_UPPER;
+ noise = ( ( noise-IW_LOWER ) * 100 ) / IW_UPPER;
+ quality = ( quality*100 ) / 92;
return true;
}
}
- qDebug("Card no longer present");
+ qDebug("WExtensions::statsCard no longer present.");
quality = -1;
signal = IW_LOWER;
noise = IW_LOWER;
return false;
}