author | zecke <zecke> | 2002-06-15 21:37:42 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-06-15 21:37:42 (UTC) |
commit | 9d02762b3d2e07f6db24c21621a5d577ea6acda7 (patch) (side-by-side diff) | |
tree | d3a6ffb032a55991e4ef989f911f000090e29b09 /noncore/net | |
parent | 6f9b901d1f8db793a0e4a42f99f14f802e96f62e (diff) | |
download | opie-9d02762b3d2e07f6db24c21621a5d577ea6acda7.zip opie-9d02762b3d2e07f6db24c21621a5d577ea6acda7.tar.gz opie-9d02762b3d2e07f6db24c21621a5d577ea6acda7.tar.bz2 |
Manager should work now
-rw-r--r-- | noncore/net/opietooth/lib/manager.cc | 64 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/manager.h | 7 |
2 files changed, 69 insertions, 2 deletions
diff --git a/noncore/net/opietooth/lib/manager.cc b/noncore/net/opietooth/lib/manager.cc index eeeab19..d65dbd4 100644 --- a/noncore/net/opietooth/lib/manager.cc +++ b/noncore/net/opietooth/lib/manager.cc @@ -51,7 +51,18 @@ void Manager::isConnected( Device* dev ){ } void Manager::searchDevices( const QString& device ){ - + OProcess* hcitool = new OProcess(); + hcitool->setName( device.latin1() ); + *hcitool << "hcitool" << "scan"; + connect( hcitool, SIGNAL(processExited(OProcess*) ) , + this, SLOT(slotHCIExited(OProcess* ) ) ); + connect( hcitool, SIGNAL(receivedStdout(OProcess*, char*, int ) ), + this, SLOT(slotHCIOut(OProcess*, char*, int ) ) ); + if (!hcitool->start() ) { + RemoteDevices::ValueList list; + emit foundDevices( device, list ); + delete hcitool; + } } void Manager::searchDevices(Device* d ){ @@ -130,5 +141,56 @@ void Manager::slotSDPOut(OProcess* proc, char* ch, int len) } void Manager::slotSDPExited( OProcess* proc) { + Services::ValueList list; + if (proc->normalExit() ) { + QMap<QString, QString>::Iterator it = m_out.find( proc->name() ); + if ( it != m_out.end() ) { + list = parseSDPOutput( it.data() ); + m_out.remove( it ); + } + } + emit foundServices( proc->name(), list ); + delete proc; +} +Services::ValueList Manager::parseSDPOutput( const QString& out ) { + Services::ValueList list; + return list; +} + +void Manager::slotHCIExited(OProcess* proc ) { + RemoteDevices::ValueList list; + if (proc->normalExit() ) { + QMap<QString, QString>::Iterator it = m_devices.find(proc->name() ); + if (it != m_devices.end() ) { + list = parseHCIOutput( it.data() ); + m_devices.remove( it ); + } + } + emit foundDevices( proc->name(), list ); delete proc; } +void Manager::slotHCIOut(OProcess* proc, char* ch, int len) { + QCString str( ch, len+1 ); + QMap<QString, QString>::Iterator it; + it = m_devices.find( proc->name() ); + if (it != m_devices.end() ) { + QString string = it.data(); + string.append( str ); + m_devices.replace( proc->name(), string ); + } +} +RemoteDevices::ValueList Manager::parseHCIOutput(const QString& output ) { + RemoteDevices::ValueList list; + QStringList strList = QStringList::split('\n', output ); + QStringList::Iterator it; + QString str; + for ( it = strList.begin(); it != strList.end(); ++it ) { + str = (*it).stripWhiteSpace(); + qWarning("OpieTooth %s", str.latin1() ); + QStringList split = QStringList::split(" ", str ); + qWarning("Left:%s Right:%s", split[0].latin1() , split[1].latin1() ); + RemoteDevices rem( split[0].latin1() , split[1].latin1() ); + list.append( rem ); + } + return list; +} diff --git a/noncore/net/opietooth/lib/manager.h b/noncore/net/opietooth/lib/manager.h index 03375c5..95e4306 100644 --- a/noncore/net/opietooth/lib/manager.h +++ b/noncore/net/opietooth/lib/manager.h @@ -110,16 +110,21 @@ Q_OBJECT void removedService( const QString& service, bool removed ); void foundServices( const QString& device, Services::ValueList ); void foundDevices( const QString& device, RemoteDevices::ValueList ); - void foundNothing( const QString& device ); + private slots: void slotProcessExited(OProcess* ); void slotSDPExited(OProcess*); void slotSDPOut(OProcess*, char*, int); + void slotHCIExited(OProcess* ); + void slotHCIOut(OProcess*, char*, int ); private: + Services::ValueList parseSDPOutput( const QString& ); + RemoteDevices::ValueList parseHCIOutput( const QString& ); OProcess *m_hcitool; OProcess *m_sdp; // not only one QString m_device; QMap<QString, QString> m_out; + QMap<QString, QString> m_devices; }; }; |