QBluetoothLocalDevice::QBluetoothLocalDevice(const QBluetoothAddress &address, QObject *parent) : QObject(parent) { OrgBluezManagerInterface manager(QLatin1String("org.bluez"), QLatin1String("/"), QDBusConnection::systemBus()); QDBusPendingReply<QList<QDBusObjectPath> > reply = manager.ListAdapters(); reply.waitForFinished(); if (reply.isError()) return; foreach (const QDBusObjectPath &path, reply.value()) { OrgBluezAdapterInterface *adapter = new OrgBluezAdapterInterface(QLatin1String("org.bluez"), path.path(), QDBusConnection::systemBus()); QDBusPendingReply<QVariantMap> reply = adapter->GetProperties(); reply.waitForFinished(); if (reply.isError()) continue; QBluetoothAddress path_address(reply.value().value(QLatin1String("Address")).toString()); if(path_address == address){ this->d_ptr = new QBluetoothLocalDevicePrivate; this->d_ptr->adapter = adapter; break; } else { delete adapter; } } }
void QBluetoothLocalDevicePrivate::initializeAdapter() { if (adapter) return; OrgBluezManagerInterface manager(QLatin1String("org.bluez"), QLatin1String("/"), QDBusConnection::systemBus()); if (localAddress == QBluetoothAddress()) { QDBusPendingReply<QDBusObjectPath> reply = manager.DefaultAdapter(); reply.waitForFinished(); if (reply.isError()) return; adapter = new OrgBluezAdapterInterface(QLatin1String("org.bluez"), reply.value().path(), QDBusConnection::systemBus()); } else { QDBusPendingReply<QList<QDBusObjectPath> > reply = manager.ListAdapters(); reply.waitForFinished(); if (reply.isError()) return; foreach (const QDBusObjectPath &path, reply.value()) { OrgBluezAdapterInterface *tmpAdapter = new OrgBluezAdapterInterface(QLatin1String("org.bluez"), path.path(), QDBusConnection::systemBus()); QDBusPendingReply<QVariantMap> reply = tmpAdapter->GetProperties(); reply.waitForFinished(); if (reply.isError()) continue; QBluetoothAddress path_address(reply.value().value(QLatin1String("Address")).toString()); if (path_address == localAddress) { adapter = tmpAdapter; break; } else { delete tmpAdapter; } } } currentMode = static_cast<QBluetoothLocalDevice::HostMode>(-1); if (adapter) { connect(adapter, SIGNAL(PropertyChanged(QString,QDBusVariant)), SLOT(PropertyChanged(QString,QDBusVariant))); qsrand(QTime::currentTime().msec()); agent_path = agentPath; agent_path.append(QString::fromLatin1("/%1").arg(qrand())); } }