summaryrefslogtreecommitdiff
authorharlekin <harlekin>2003-03-07 22:55:36 (UTC)
committer harlekin <harlekin>2003-03-07 22:55:36 (UTC)
commitee1d48a9a5f3672f329301a844e69f2e184afcac (patch) (side-by-side diff)
treea549cd37f837e2704527b7b40a0f9f8ef9372a7b
parenteeb28ead6d3050d662783696661d9360a049104f (diff)
downloadopie-ee1d48a9a5f3672f329301a844e69f2e184afcac.zip
opie-ee1d48a9a5f3672f329301a844e69f2e184afcac.tar.gz
opie-ee1d48a9a5f3672f329301a844e69f2e184afcac.tar.bz2
show signal strength for connections
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/opietooth/lib/manager.cc33
-rw-r--r--noncore/net/opietooth/lib/manager.h7
-rw-r--r--noncore/net/opietooth/manager/bluebase.cpp36
-rw-r--r--noncore/net/opietooth/manager/bluebase.h5
-rw-r--r--noncore/net/opietooth/manager/bluetoothbase.ui14
-rw-r--r--noncore/net/opietooth/manager/btconnectionitem.cpp18
-rw-r--r--noncore/net/opietooth/manager/btconnectionitem.h8
7 files changed, 117 insertions, 4 deletions
diff --git a/noncore/net/opietooth/lib/manager.cc b/noncore/net/opietooth/lib/manager.cc
index 8ddcfe8..c89d325 100644
--- a/noncore/net/opietooth/lib/manager.cc
+++ b/noncore/net/opietooth/lib/manager.cc
@@ -255,17 +255,16 @@ void Manager::searchConnections() {
if (!proc->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) {
ConnectionState::ValueList list;
emit connections( list );
delete proc;
}
}
void Manager::slotConnectionExited( OProcess* proc ) {
- qWarning("<<<<<<<<<<<<<<<<<exited");
ConnectionState::ValueList list;
list = parseConnections( m_hcitoolCon );
emit connections(list );
delete proc;
}
void Manager::slotConnectionOutput(OProcess* /*proc*/, char* cha, int len) {
QCString str(cha, len );
m_hcitoolCon.append( str );
@@ -296,8 +295,40 @@ ConnectionState::ValueList Manager::parseConnections( const QString& out ) {
con.setMac( value[2] );
con.setHandle( value[4].toInt() );
con.setState( value[6].toInt() );
con.setLinkMode( value[8] == QString::fromLatin1("MASTER") ? Master : Client );
list2.append( con );
}
return list2;
}
+
+void Manager::signalStrength( const QString &mac ) {
+
+ OProcess* sig_proc = new OProcess();
+
+ connect(sig_proc, SIGNAL(processExited(OProcess*) ),
+ this, SLOT(slotSignalStrengthExited( OProcess*) ) );
+ connect(sig_proc, SIGNAL(receivedStdout(OProcess*, char*, int) ),
+ this, SLOT(slotSignalStrengthOutput(OProcess*, char*, int) ) );
+ *sig_proc << "hcitool";
+ *sig_proc << "lq";
+ *sig_proc << mac;
+
+ sig_proc->setName( mac.latin1() );
+
+ if (!sig_proc->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) {
+ emit signalStrength( mac, "-1" );
+ delete sig_proc;
+ }
+}
+
+void Manager::slotSignalStrengthOutput(OProcess* proc, char* cha, int len) {
+ QCString str(cha, len );
+ QString temp = QString(str).stripWhiteSpace();
+ QStringList value = QStringList::split(' ', temp );
+ emit signalStrength( proc->name(), value[2].latin1() );
+}
+
+
+void Manager::slotSignalStrengthExited( OProcess* proc ) {
+ delete proc;
+}
diff --git a/noncore/net/opietooth/lib/manager.h b/noncore/net/opietooth/lib/manager.h
index 0ebe1b3..abc8ba1 100644
--- a/noncore/net/opietooth/lib/manager.h
+++ b/noncore/net/opietooth/lib/manager.h
@@ -119,48 +119,55 @@ namespace OpieTooth {
/**
* Searches for active connections
* the result is emitted with the
* connections signal
*/
void searchConnections();
+ void signalStrength( const QString &mac );
//// not implemented yet
/*static*/ QString toDevice( const QString& mac );
/*static*/ QString toMac( const QString &device );
//// not implemented yet over
signals:
// device either mac or dev name
// the first device is the device which you access
void available( const QString& device, bool connected );
void addedService( const QString& service, bool added );
void removedService( const QString& service, bool removed );
void foundServices( const QString& device, Services::ValueList );
void foundDevices( const QString& device, RemoteDevice::ValueList );
void connections( ConnectionState::ValueList );
+ void signalStrength( const QString& mac, const QString& strengh );
private slots:
void slotProcessExited(OProcess* );
void slotSDPExited(OProcess*);
void slotSDPOut(OProcess*, char*, int);
void slotHCIExited(OProcess* );
void slotHCIOut(OProcess*, char*, int );
void slotConnectionExited(OProcess* );
void slotConnectionOutput(OProcess*, char*, int );
+
+ void slotSignalStrengthOutput( OProcess*, char*, int );
+ void slotSignalStrengthExited( OProcess* );
private:
Services::ValueList parseSDPOutput( const QString& );
RemoteDevice::ValueList parseHCIOutput( const QString& );
ConnectionState::ValueList parseConnections( const QString& );
OProcess *m_hcitool;
OProcess *m_sdp; // not only one
QString m_device;
+ QMap<QString, int> m_signalStrength;
QMap<QString, QString> m_out;
QMap<QString, QString> m_devices;
+ QMap<OProcess*, QString> m_signalMac;
QString m_hcitoolCon;
};
};
#endif
diff --git a/noncore/net/opietooth/manager/bluebase.cpp b/noncore/net/opietooth/manager/bluebase.cpp
index 8b15c4f..9663b52 100644
--- a/noncore/net/opietooth/manager/bluebase.cpp
+++ b/noncore/net/opietooth/manager/bluebase.cpp
@@ -67,16 +67,18 @@ BlueBase::BlueBase( QWidget* parent, const char* name, WFlags fl )
connect( ListView2, SIGNAL( rightButtonClicked( QListViewItem *, const QPoint &, int ) ),
this, SLOT(startServiceActionHold( QListViewItem *, const QPoint &, int) ) );
connect( m_localDevice , SIGNAL( foundServices( const QString& , Services::ValueList ) ),
this, SLOT( addServicesToDevice( const QString& , Services::ValueList ) ) );
connect( m_localDevice, SIGNAL( available( const QString&, bool ) ),
this, SLOT( deviceActive( const QString& , bool ) ) );
connect( m_localDevice, SIGNAL( connections( ConnectionState::ValueList ) ),
this, SLOT( addConnectedDevices( ConnectionState::ValueList ) ) );
+ connect( m_localDevice, SIGNAL( signalStrength( const QString&, const QString& ) ),
+ this, SLOT( addSignalStrength( const QString&, const QString& ) ) );
// let hold be rightButtonClicked()
QPEApplication::setStylusOperation( ListView2->viewport(), QPEApplication::RightOnHold);
QPEApplication::setStylusOperation( ListView4->viewport(), QPEApplication::RightOnHold);
//Load all icons needed
m_offPix = Resource::loadPixmap( "opietooth/notconnected" );
@@ -93,19 +95,21 @@ BlueBase::BlueBase( QWidget* parent, const char* name, WFlags fl )
setCaption( tr( "Bluetooth Manager" ) );
readConfig();
initGui();
ListView2->setRootIsDecorated(true);
+
writeToHciConfig();
// search conncetions
addConnectedDevices();
+ addSignalStrength();
m_iconLoader = new BTIconLoader();
readSavedDevices();
}
/**
* Reads all options from the config file
*/
void BlueBase::readConfig() {
@@ -365,17 +369,18 @@ void BlueBase::addServicesToDevice( BTDeviceItem * item ) {
RemoteDevice device = item->remoteDevice();
m_deviceList.insert( item->mac() , item );
// and some time later I get a signal foundServices( const QString& device, Services::ValueList ); back
m_localDevice->searchServices( device );
}
/**
- * Overloaded. This one it the one that is connected to the foundServices signal
+ * Overloaded. This one it the one that is
+ ted to the foundServices signal
* @param device the mac address of the remote device
* @param servicesList the list with the service the device has.
*/
void BlueBase::addServicesToDevice( const QString& device, Services::ValueList servicesList ) {
qDebug("fill services list");
QMap<QString,BTDeviceItem*>::Iterator it;
BTDeviceItem* deviceItem = 0;
@@ -420,41 +425,68 @@ void BlueBase::addServicesToDevice( const QString& device, Services::ValueList s
s1.setServiceName( tr("no services found") );
serviceItem = new BTServiceItem( deviceItem, s1 );
}
// now remove them from the list
m_deviceList.remove( it );
}
+
+
+
+void BlueBase::addSignalStrength() {
+
+ QListViewItemIterator it( ListView4 );
+ for ( ; it.current(); ++it ) {
+ m_localDevice->signalStrength( ((BTConnectionItem*)it.current() )->connection().mac() );
+ }
+
+ QTimer::singleShot( 5000, this, SLOT( addSignalStrength() ) );
+}
+
+void BlueBase::addSignalStrength( const QString& mac, const QString& strength ) {
+
+ QListViewItemIterator it( ListView4 );
+ for ( ; it.current(); ++it ) {
+ if( ((BTConnectionItem*)it.current())->connection().mac() == mac ) {
+ ((BTConnectionItem*)it.current() )->setSignalStrength( strength );
+ }
+ }
+}
+
/**
* Add the existing connections (pairs) to the connections tab.
* This one triggers the search
*/
void BlueBase::addConnectedDevices() {
m_localDevice->searchConnections();
}
-
/**
* This adds the found connections to the connection tab.
* @param connectionList the ValueList with all current connections
*/
void BlueBase::addConnectedDevices( ConnectionState::ValueList connectionList ) {
// clear the ListView first
ListView4->clear();
QValueList<OpieTooth::ConnectionState>::Iterator it;
BTConnectionItem * connectionItem;
if ( !connectionList.isEmpty() ) {
for (it = connectionList.begin(); it != connectionList.end(); ++it) {
connectionItem = new BTConnectionItem( ListView4 , (*it) );
+
+ if( m_deviceList.find((*it).mac()).data() ) {
+
+ connectionItem->setName( m_deviceList.find( (*it).mac()).data()->name() );
+ }
}
} else {
ConnectionState con;
con.setMac( tr("No connections found") );
connectionItem = new BTConnectionItem( ListView4 , con );
}
// recall connection search after some time
diff --git a/noncore/net/opietooth/manager/bluebase.h b/noncore/net/opietooth/manager/bluebase.h
index 0326daf..743062c 100644
--- a/noncore/net/opietooth/manager/bluebase.h
+++ b/noncore/net/opietooth/manager/bluebase.h
@@ -8,31 +8,33 @@
#include <qsplitter.h>
#include <qlist.h>
#include <qpixmap.h>
#include "bluetoothbase.h"
#include "btserviceitem.h"
#include "btdeviceitem.h"
+
#include "popuphelper.h"
#include "bticonloader.h"
#include <remotedevice.h>
#include <manager.h>
class QVBox;
class QHBoxLayout;
class QGridLayout;
class QFrame;
class QLabel;
class QPushButton;
class QTabWidget;
class QCheckBox;
+class BTConnectionItem;
namespace OpieTooth {
class BlueBase : public BluetoothBase {
Q_OBJECT
public:
@@ -50,16 +52,17 @@ namespace OpieTooth {
void readConfig();
void writeConfig();
void readSavedDevices();
void writeSavedDevices();
void writeToHciConfig();
QString status()const;
void initGui();
void setInfo();
+
PopupHelper m_popHelper;
Manager *m_localDevice;
QMap<QString,BTDeviceItem*> m_deviceList;
void deviceActive( const RemoteDevice &device );
QString m_deviceName;
QString m_defaultPasskey;
@@ -79,14 +82,16 @@ namespace OpieTooth {
void addServicesToDevice( BTDeviceItem *item );
void addServicesToDevice( const QString& device, Services::ValueList );
void addConnectedDevices();
void addConnectedDevices( ConnectionState::ValueList );
void startServiceActionClicked( QListViewItem *item );
void startServiceActionHold( QListViewItem *, const QPoint &, int );
void deviceActive( const QString& mac, bool connected );
void applyConfigChanges();
+ void addSignalStrength();
+ void addSignalStrength( const QString& mac, const QString& strengh );
};
}
#endif
diff --git a/noncore/net/opietooth/manager/bluetoothbase.ui b/noncore/net/opietooth/manager/bluetoothbase.ui
index 869a9cb..b51c8c6 100644
--- a/noncore/net/opietooth/manager/bluetoothbase.ui
+++ b/noncore/net/opietooth/manager/bluetoothbase.ui
@@ -193,16 +193,30 @@
<name>clickable</name>
<bool>true</bool>
</property>
<property>
<name>resizeable</name>
<bool>true</bool>
</property>
</column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Signal</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
<property stdset="1">
<name>name</name>
<cstring>ListView4</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
diff --git a/noncore/net/opietooth/manager/btconnectionitem.cpp b/noncore/net/opietooth/manager/btconnectionitem.cpp
index b57d1b3..c565c47 100644
--- a/noncore/net/opietooth/manager/btconnectionitem.cpp
+++ b/noncore/net/opietooth/manager/btconnectionitem.cpp
@@ -17,8 +17,26 @@ QString BTConnectionItem::type() const {
}
int BTConnectionItem::typeId() const {
return Connection;
}
ConnectionState BTConnectionItem::connection() const {
return m_con;
}
+void BTConnectionItem::setName( QString name ) {
+ m_name = name;
+ setText( 0, m_name );
+}
+
+QString BTConnectionItem::name() {
+ return m_name;
+}
+
+
+void BTConnectionItem::setSignalStrength( QString strength ) {
+ m_signalStrength = strength;
+ setText( 2, m_signalStrength );
+}
+
+QString BTConnectionItem::signalStrength() {
+ return m_signalStrength;
+}
diff --git a/noncore/net/opietooth/manager/btconnectionitem.h b/noncore/net/opietooth/manager/btconnectionitem.h
index 3c0cd79..9ab745e 100644
--- a/noncore/net/opietooth/manager/btconnectionitem.h
+++ b/noncore/net/opietooth/manager/btconnectionitem.h
@@ -8,19 +8,25 @@
namespace OpieTooth {
class ConnectionState;
class BTConnectionItem : public BTListItem {
public:
BTConnectionItem( QListView* parent, const ConnectionState& state );
~BTConnectionItem();
QString type()const;
+ QString name();
+ QString signalStrength();
int typeId() const;
ConnectionState connection()const;
+ void setSignalStrength( QString );
+ void setName( QString );
+
private:
ConnectionState m_con;
-
+ QString m_name;
+ QString m_signalStrength;
};
};
#endif