[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