[kmobiletools] branches/kmobiletools/kmobiletools-0.5

Marco Gulino marco at kmobiletools.org
Sat Jun 2 22:26:23 CEST 2007


SVN commit 670883 by gulino:

More fixes to the bluetooth-dbus stuff.
Also displaying devices services.
Some fixes to the buildsystem when something is missing.


 M  +1 -1      configure.in.in  
 M  +36 -40    kmobiletools/mainpart/bluemonitor.cpp  
 M  +3 -3      kmobiletools/mainpart/bluemonitor.h  
 M  +31 -2     kmobiletools/mainpart/bluetoothitems.cpp  
 M  +22 -9     kmobiletools/mainpart/bluetoothitems.h  
 M  +12 -1     kmobiletools/mainpart/newdevicewizard.cpp  


--- branches/kmobiletools/kmobiletools-0.5/configure.in.in #670882:670883
@@ -127,7 +127,7 @@
 AC_SUBST(LIB_KBLUETOOTH)
 
 #KDEBluetooth-DBUS module
-PKG_CHECK_MODULES(DBUS, "dbus-1")
+PKG_CHECK_MODULES(DBUS, "dbus-1", have_dbus=yes, have_dbus=no)
 
 AC_SUBST(DBUS_CFLAGS)
 AC_SUBST(DBUS_LIBS)
--- branches/kmobiletools/kmobiletools-0.5/kmobiletools/mainpart/bluemonitor.cpp #670882:670883
@@ -91,8 +91,12 @@
         if(item->address() == name) return;
         ++it;
     }
-    new BtDeviceItem((KListView*)p_listview, name, QString());
-/*
+    item=new BtDeviceItem((KListView*)p_listview, name, QString());
+    RemoteDevice* newDev = getDetails(name,rssi);
+    item->setDevice(newDev);
+    getServices(newDev);
+    deviceList.push_back(newDev);
+    /*
     QString msg;
     QString signal = QString::number(rssi) + "%";
     QString devcl = QString::number(dev_class);
@@ -119,8 +123,6 @@
         }
     }
 
-    RemoteDevice* newDev = getDetails(name,rssi);
-    getServices(newDev);
 
     if (deviceList.empty()) {
         strength->setProgress(rssi);
@@ -130,24 +132,23 @@
         dev_manufacturer->setText(newDev->manufacturer);
         dev_category->setText(QString(newDev->dev_class + ", " + newDev->major_class));
         dev_Info->setText(newDev->devInfo);
-        for (newDev->serv_it = newDev->services.begin(); newDev->serv_it!=newDev->services.end(); ++newDev->serv_it) {
+        for (newDev->serv_it = newDev->pservices.begin(); newDev->serv_it!=newDev->pservices.end(); ++newDev->serv_it) {
             kdDebug() << k_funcinfo << *newDev->serv_it << endl;
             service_list->insertItem(*newDev->serv_it);
         }
 
     }
+*/
 
-    deviceList.push_back(newDev);
 
-    QListViewItem *bla = new QListViewItem(p_listview, name, signal, newDev->major_class,name);
-    p_listview->insertItem(bla);
-    p_listview->hideColumn(3);	
-*/
+//     QListViewItem *bla = new QListViewItem(p_listview, name, signal, newDev->major_class,name);
+//     p_listview->insertItem(bla);
+//     p_listview->hideColumn(3);
 }
 
 RemoteDevice* BlueMonitor::getDetails(const QString& addr, short rssi ) {
     kdDebug() << k_funcinfo << endl;
-/*
+
     QString device_class(adapter->getRemoteMinorClass(addr));
     RemoteDevice *add = new RemoteDevice(addr,rssi,device_class);
     add->name = addr;
@@ -167,17 +168,21 @@
     kdDebug() << "getRemoteServiceClasses: " << adapter->getRemoteServiceClasses(addr) << endl;
 
 return add;
-*/
 
 }
 void BlueMonitor::getServices(RemoteDevice* add) {
     kdDebug() << k_funcinfo << endl;
-/*
+
     KBluetooth::Adapter::ServiceHandleList dev_serves;
     KBluetooth::Adapter::ServiceHandleList::iterator each;
-
     dev_serves = adapter->getRemoteServiceHandles(add->addr, "");
-
+    for (each = dev_serves.begin(); each!= dev_serves.end(); ++each) {
+        kdDebug() << "New service: " << *each << endl;
+        KBluetooth::ServiceRecord record = adapter->getRemoteServiceRecord(add->addr, *each);
+        add->hservices+=record;
+        add->pservices.push_back( record.name() );
+    }
+/*
     if (!dev_serves.empty()) {	
 
         for (each = dev_serves.begin(); each!= dev_serves.end(); ++each) {
@@ -185,11 +190,11 @@
 
             KBluetooth::ServiceRecord record = adapter->getRemoteServiceRecord(add->addr, *each);
             if ((rx.search( record.name() ) < 0) && (record.name() != "")) 
-                add->services.push_back( record.name() );
+                add->pservices.push_back( record.name() );
 
             if ( record.servId().grep("0x1124").size() >= 1) 
 
-                add->services.push_back( "Human Interface Device" );
+                add->pservices.push_back( "Human Interface Device" );
 
             if (add->devInfo == "" && record.typ() != "")
                 add->devInfo = record.typ();
@@ -200,36 +205,27 @@
         if (!add->devInfo || add->devInfo == "" )
             add->devInfo = QString("<i>not available</i>");
     } else {
-        add->services.push_back("no Services discovered");
+        add->pservices.push_back("no Services discovered");
 //		kdDebug() << adapter->getError() << endl << endl;;
-    }
+    }*/
 
-*/
 
 }
 
 
 void BlueMonitor::chg_name(const QString& add, const QString& name) {
     kdDebug() << k_funcinfo << endl;
-/*
-    if (deviceList.empty()) {
-        return;
-    }
-    for(it = deviceList.begin(); it!= deviceList.end(); ++it) {
-        if ((**it).getAddr() == add) {
-            if ((**it).name == name) {
-                return;
-            } else {
-                if ((**it).getAddr() == dev_addr->text()) {
-                    dev_name->setText(name);
-                }
-                (**it).name = name;
-                QListViewItem *tmp = p_listview->findItem(add,0,Qt::ExactMatch);
-                tmp->setText(0,name);
-            }
-        break;
+    kdDebug() << "add=" << add << ", name=" << name << endl;
+    BtDeviceItem *item;
+    QListViewItemIterator it( p_listview );
+    while ( it.current() ) {
+        item = (BtDeviceItem*)(it.current());
+        if(item->address() == add) {
+            item->setName(name);
+            return;
         }
-    }*/
+        ++it;
+    }
 }
 
 
@@ -320,7 +316,7 @@
             dev_category->setText(QString((**it).dev_class + ", " + (**it).major_class));
             dev_Info->setText((**it).devInfo);
             service_list->clear();
-            for ((**it).serv_it = (**it).services.begin(); (**it).serv_it!=(**it).services.end(); ++(**it).serv_it) {
+            for ((**it).serv_it = (**it).pservices.begin(); (**it).serv_it!=(**it).pservices.end(); ++(**it).serv_it) {
 
                 service_list->insertItem(*(**it).serv_it);
 
@@ -342,6 +338,6 @@
         disconnect(adapter, SIGNAL(periodicDiscoveryStopped()), this, SLOT(restartPeriodicDiscovery()));
     }
 }
+#include "bluemonitor.moc"
 
 #endif
-#include "bluemonitor.moc"
--- branches/kmobiletools/kmobiletools-0.5/kmobiletools/mainpart/bluemonitor.h #670882:670883
@@ -59,11 +59,11 @@
         QString manufacturer;
         QString devInfo;
         typedef QValueVector<QString> Dev_Services;
-        Dev_Services services;
+        QValueList<KBluetooth::ServiceRecord> hservices;
+        Dev_Services pservices;
+        Dev_Services services() const { return pservices; }
         Dev_Services::iterator serv_it;
 
-
-
         void setName (QString& name) {name = name;}
         QString getAddr() {return addr;}
 };
--- branches/kmobiletools/kmobiletools-0.5/kmobiletools/mainpart/bluetoothitems.cpp #670882:670883
@@ -18,6 +18,7 @@
    Boston, MA 02110-1301, USA.
  ***************************************************************************/
 #include "bluetoothitems.h"
+#include "bluemonitor.h"
 
 #ifdef KBLUETOOTH
 BtDeviceItem::BtDeviceItem(KListView *parent, const KBluetooth::DeviceAddress &bdaddr)
@@ -49,12 +50,40 @@
 KBluetooth::SDP::Service *BtServiceItem::service() { return p_svc; }
 #endif
 #ifdef KBLUETOOTH_NEW
+
 BtDeviceItem::BtDeviceItem(KListView *parent, const QString &address, const QString &name)
     : KListViewItem(parent)
 {
-    if(name.isEmpty()) setText(0, address);
-        else setText(0, name);
     setName(name);
     setAddress(address);
 }
+
+void BtDeviceItem::setName(const QString &name) {
+    b_name=name;
+    if(!name.isEmpty()) setText(0, name);
+}
+
+void BtDeviceItem::setAddress(const QString &addr) {
+    b_addr=addr;
+    if(!addr.isEmpty()) setText(1, addr);
+}
+
+RemoteDevice *BtDeviceItem::device() {
+    return dev;
+}
+
+void BtDeviceItem::setDevice(RemoteDevice* device) {
+    dev=device;
+}
+
+BtServiceItem::BtServiceItem(KListView *parent, const KBluetooth::ServiceRecord& service)
+    : KListViewItem(parent)
+{
+    p_service=service;
+    kdDebug() << "BtServiceItem: service number=" << p_service.rfcommChannel() << ", name=" << p_service.name() << endl;
+    setText(0, QString::number(p_service.rfcommChannel()) );
+    setText(1, p_service.name() );
+//     setText(0, QString::fromInt(p_service.rfcommChannel()));
+}
+
 #endif
--- branches/kmobiletools/kmobiletools-0.5/kmobiletools/mainpart/bluetoothitems.h #670882:670883
@@ -48,14 +48,14 @@
 
 class BtServiceItem : public KListViewItem
 {
-    public:
-        BtServiceItem(KListView *parent, KBluetooth::SDP::Service *svc, const KBluetooth::DeviceAddress &bdaddr);
-        KBluetooth::SDP::Service *service();
-        KBluetooth::DeviceAddress bdAddr() const;
+public:
+    BtServiceItem(KListView *parent, KBluetooth::SDP::Service *svc, const KBluetooth::DeviceAddress &bdaddr);
+    KBluetooth::SDP::Service *service();
+    KBluetooth::DeviceAddress bdAddr() const;
 
-    private:
-        KBluetooth::DeviceAddress m_bdaddr;
-        KBluetooth::SDP::Service *p_svc;
+private:
+    KBluetooth::DeviceAddress m_bdaddr;
+    KBluetooth::SDP::Service *p_svc;
 };
 #else
 namespace KBluetooth {
@@ -63,18 +63,31 @@
 }
 #endif
 #ifdef KBLUETOOTH_NEW
+#include <libkbluetooth/servicerecord.h>
+
+class RemoteDevice;
 class BtDeviceItem : public KListViewItem
 {
 public:
     BtDeviceItem(KListView *parent, const QString &address, const QString &name);
     QString address() const { return b_addr; }
     QString name() const { return b_name; }
-    void setAddress(const QString &addr) { b_addr=addr; }
-    void setName(const QString &name) { b_name=name; }
+    void setAddress(const QString &addr);
+    void setName(const QString &name);
+    RemoteDevice *device();
+    void setDevice(RemoteDevice*);
 private:
     QString b_addr;
     QString b_name;
+    RemoteDevice *dev;
 };
+
+class BtServiceItem : public KListViewItem
+{
+public:
+    BtServiceItem(KListView *parent, const KBluetooth::ServiceRecord& service);
+    KBluetooth::ServiceRecord p_service;
+};
 #endif
 
 #endif
--- branches/kmobiletools/kmobiletools-0.5/kmobiletools/mainpart/newdevicewizard.cpp #670882:670883
@@ -569,19 +569,30 @@
 
 void newDeviceWizard::btDeviceClicked(QListViewItem* item)
 {
-#ifdef KBLUETOOTH
+    kdDebug() << k_funcinfo << endl;
+#ifdef HAVE_KBLUETOOTH
     if(!item) return;
     btStopScan();
     BtDeviceItem* bitem=(BtDeviceItem*)(item);
+#ifdef KBLUETOOTH
     bitem->device()->setTarget(bitem->bdAddr());
     kdDebug() << "Services updated\n";
+#endif
     btsvcLV->clear();
     bturl=QString::null;
     setNextEnabled(currentPage(), false);
     if(! bitem->device()->services().size()) return;
     setNextEnabled(currentPage(), !manualSVC->isChecked() );
+
+#ifdef KBLUETOOTH
     for(uint i=0; i<bitem->device()->services().size(); i++)
         new BtServiceItem(btsvcLV, &bitem->device()->services().at(i), bitem->bdAddr() );
+#endif
+#ifdef KBLUETOOTH_NEW
+    kdDebug() << "bluetooth_new services count: " << bitem->device()->hservices.size() << endl;
+    for(uint i=0; i<bitem->device()->hservices.size(); i++)
+        new BtServiceItem(btsvcLV, *(bitem->device()->hservices.at(i)) );
+#endif
     setNextEnabled(currentPage(), true);
 #endif
 }


More information about the kmobiletools mailing list