summaryrefslogtreecommitdiff
authorskyhusker <skyhusker>2005-04-20 10:20:20 (UTC)
committer skyhusker <skyhusker>2005-04-20 10:20:20 (UTC)
commitf6b9c85c09692f298ffa5ee95e1f171a9e158502 (patch) (side-by-side diff)
treed147bc5b67eb9bc3c7f042a4fa2fb1868d37faef
parent6ec538f7e4a84e4f76addaf558c415b7dffc659b (diff)
downloadopie-f6b9c85c09692f298ffa5ee95e1f171a9e158502.zip
opie-f6b9c85c09692f298ffa5ee95e1f171a9e158502.tar.gz
opie-f6b9c85c09692f298ffa5ee95e1f171a9e158502.tar.bz2
Added function to set the associated AP address. Some improvements to scanNetwork(): read the signal quality, AP rates and fix channel reading when driver reports values < 1000.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/onetwork.cpp38
-rw-r--r--libopie2/opienet/onetwork.h3
-rw-r--r--libopie2/opienet/ostation.h2
3 files changed, 38 insertions, 5 deletions
diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp
index 546be9e..0a74019 100644
--- a/libopie2/opienet/onetwork.cpp
+++ b/libopie2/opienet/onetwork.cpp
@@ -40,2 +40,3 @@
#include <qtextstream.h>
+#include <qapplication.h>
@@ -55,2 +56,3 @@
#include <net/if_arp.h>
+#include <net/ethernet.h>
#include <stdarg.h>
@@ -493,2 +495,10 @@ bool OWirelessNetworkInterface::isAssociated() const
+void OWirelessNetworkInterface::setAssociatedAP( const OMacAddress& mac ) const
+{
+ _iwr.u.ap_addr.sa_family = ARPHRD_ETHER;
+ ::memcpy(_iwr.u.ap_addr.sa_data, mac.native(), ETH_ALEN);
+ wioctl( SIOCSIWAP );
+}
+
+
OMacAddress OWirelessNetworkInterface::associatedAP() const
@@ -908,3 +918,2 @@ OStationList* OWirelessNetworkInterface::scanNetwork()
odebug << "ONetworkInterface::scanNetwork() - scan in progress..." << oendl;
- #if 0
if ( qApp )
@@ -914,3 +923,2 @@ OStationList* OWirelessNetworkInterface::scanNetwork()
}
- #endif
tv.tv_sec = 0;
@@ -1129,3 +1137,6 @@ OStationList* OWirelessNetworkInterface::scanNetwork()
odebug << "SIOCGIWFREQ" << oendl;
- stations->last()->channel = _channels[ static_cast<int>(double( we->u.freq.m ) * pow( 10.0, we->u.freq.e ) / 1000000) ];
+ if ( we->u.freq.m > 1000 )
+ stations->last()->channel = _channels[ static_cast<int>(double( we->u.freq.m ) * pow( 10.0, we->u.freq.e ) / 1000000) ];
+ else
+ stations->last()->channel = static_cast<int>(((double) we->u.freq.m) * pow( 10.0, we->u.freq.e ));
break;
@@ -1140,6 +1151,23 @@ OStationList* OWirelessNetworkInterface::scanNetwork()
}
+ case IWEVQUAL:
+ {
+ odebug << "IWEVQUAL" << oendl;
+ stations->last()->level = static_cast<int>(we->u.qual.level);
+ break; /* Quality part of statistics (scan) */
+ }
+ case SIOCGIWENCODE:
+ {
+ odebug << "SIOCGIWENCODE" << oendl;
+ stations->last()->encrypted = !(we->u.data.flags & IW_ENCODE_DISABLED);
+ break;
+ }
+
+ case SIOCGIWRATE:
+ {
+ odebug << "SIOCGIWRATE" << oendl;
+ stations->last()->rates.append(we->u.bitrate.value);
+ break;
+ }
case SIOCGIWSENS: odebug << "SIOCGIWSENS" << oendl; break;
- case SIOCGIWENCODE: odebug << "SIOCGIWENCODE" << oendl; break;
case IWEVTXDROP: odebug << "IWEVTXDROP" << oendl; break; /* Packet dropped to excessive retry */
- case IWEVQUAL: odebug << "IWEVQUAL" << oendl; break; /* Quality part of statistics (scan) */
case IWEVCUSTOM: odebug << "IWEVCUSTOM" << oendl; break; /* Driver specific ascii string */
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h
index 4d9912d..fa9f39f 100644
--- a/libopie2/opienet/onetwork.h
+++ b/libopie2/opienet/onetwork.h
@@ -415,2 +415,5 @@ class OWirelessNetworkInterface : public ONetworkInterface
virtual bool isAssociated() const;
+ /** Set the @a mac associated AP address.
+ */
+ virtual void setAssociatedAP( const OMacAddress& mac ) const;
/**
diff --git a/libopie2/opienet/ostation.h b/libopie2/opienet/ostation.h
index 5219d92..86c9a52 100644
--- a/libopie2/opienet/ostation.h
+++ b/libopie2/opienet/ostation.h
@@ -39,2 +39,3 @@
#include <qobject.h>
+#include <qvaluelist.h>
@@ -73,2 +74,3 @@ class OStation
bool encrypted;
+ QValueList <int> rates;
private: