void BtLocalDevice::serviceDiscovered(const QBluetoothServiceInfo &info) { QStringList classIds; foreach (const QBluetoothUuid &uuid, info.serviceClassUuids()) classIds.append(uuid.toString()); qDebug() << "$$ Found new service" << info.device().address().toString() << info.serviceUuid() << info.serviceName() << info.serviceDescription() << classIds; if (info.serviceUuid() == QBluetoothUuid(QString(TEST_SERVICE_UUID)) || info.serviceClassUuids().contains(QBluetoothUuid(QString(TEST_SERVICE_UUID)))) { //This is here to detect the test server for SPP testing later on bool alreadyKnown = false; foreach (const QBluetoothServiceInfo& found, foundTestServers) { if (found.device().address() == info.device().address()) { alreadyKnown = true; break; } } if (!alreadyKnown) { foundTestServers.append(info); qDebug() << "@@@@@@@@ Adding:" << info.device().address().toString(); } }
void Tennis::serviceDiscovered(const QBluetoothServiceInfo &serviceInfo) { qDebug() << "***** Discovered! " << serviceInfo.device().name() << serviceInfo.serviceName() << serviceInfo.serviceUuid(); qDebug() << "Found one!" << serviceInfo.protocolServiceMultiplexer(); m_discoveryAgent->stop(); client->startClient(serviceInfo); QSettings settings("QtDF", "bttennis"); settings.setValue("lastclient", serviceInfo.device().address().toString()); }
//! [Connect to remote service] void Chat::connectClicked() { ui->connectButton->setEnabled(false); // scan for services const QBluetoothAddress adapter = localAdapters.isEmpty() ? QBluetoothAddress() : localAdapters.at(currentAdapterIndex).address(); RemoteSelector remoteSelector(adapter); remoteSelector.startDiscovery(QBluetoothUuid(serviceUuid)); if (remoteSelector.exec() == QDialog::Accepted) { QBluetoothServiceInfo service = remoteSelector.service(); qDebug() << "Connecting to service 2" << service.serviceName() << "on" << service.device().name(); // Create client qDebug() << "Going to create client"; ChatClient *client = new ChatClient(this); qDebug() << "Connecting..."; connect(client, SIGNAL(messageReceived(QString,QString)), this, SLOT(showMessage(QString,QString))); connect(client, SIGNAL(disconnected()), this, SLOT(clientDisconnected())); connect(client, SIGNAL(connected(QString)), this, SLOT(connected(QString))); connect(this, SIGNAL(sendMessage(QString)), client, SLOT(sendMessage(QString))); qDebug() << "Start client"; client->startClient(service); clients.append(client); } ui->connectButton->setEnabled(true); }
void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, OpenMode openMode) { Q_D(QBluetoothSocket); setSocketState(QBluetoothSocket::ServiceLookupState); qCDebug(QT_BT) << "Starting discovery"; if(d->discoveryAgent) { d->discoveryAgent->stop(); delete d->discoveryAgent; } d->discoveryAgent = new QBluetoothServiceDiscoveryAgent(this); d->discoveryAgent->setRemoteAddress(service.device().address()); //qDebug() << "Got agent"; connect(d->discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)), this, SLOT(serviceDiscovered(QBluetoothServiceInfo))); connect(d->discoveryAgent, SIGNAL(finished()), this, SLOT(discoveryFinished())); d->openMode = openMode; if(!service.serviceUuid().isNull()) d->discoveryAgent->setUuidFilter(service.serviceUuid()); if(!service.serviceClassUuids().isEmpty()) d->discoveryAgent->setUuidFilter(service.serviceClassUuids()); // we have to ID the service somehow Q_ASSERT(!d->discoveryAgent->uuidFilter().isEmpty()); qCDebug(QT_BT) << "UUID filter" << d->discoveryAgent->uuidFilter(); d->discoveryAgent->start(QBluetoothServiceDiscoveryAgent::FullDiscovery); }
void iControlPadClient::serviceDiscovered(const QBluetoothServiceInfo &serviceInfo) { qDebug() << "Discovered service on" << serviceInfo.device().name() << serviceInfo.device().address().toString(); qDebug() << "\tService name:" << serviceInfo.serviceName(); qDebug() << "\tDescription:" << serviceInfo.attribute(QBluetoothServiceInfo::ServiceDescription).toString(); qDebug() << "\tProvider:" << serviceInfo.attribute(QBluetoothServiceInfo::ServiceProvider).toString(); qDebug() << "\tL2CAP protocol service multiplexer:" << serviceInfo.protocolServiceMultiplexer(); qDebug() << "\tRFCOMM server channel:" << serviceInfo.serverChannel(); if( QString::compare ( serviceInfo.serviceName(), KiCPServiceName, Qt::CaseInsensitive ) == 0 ) connectToService( serviceInfo ); }
void tst_QBluetoothServiceInfo::tst_construction() { const QString serviceName("My Service"); const QBluetoothDeviceInfo deviceInfo(QBluetoothAddress("001122334455"), "Test Device", 0); { QBluetoothServiceInfo serviceInfo; QVERIFY(!serviceInfo.isValid()); QVERIFY(!serviceInfo.isComplete()); } { QBluetoothServiceInfo serviceInfo; serviceInfo.setServiceName(serviceName); serviceInfo.setDevice(deviceInfo); QVERIFY(serviceInfo.isValid()); QCOMPARE(serviceInfo.serviceName(), serviceName); QCOMPARE(serviceInfo.device().address(), deviceInfo.address()); QBluetoothServiceInfo copyInfo(serviceInfo); QVERIFY(copyInfo.isValid()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } }
/*! Attempts to connect to the service described by \a service. The socket is opened in the given \a openMode. The \l socketType() may change depending on the protocol required by \a service. The socket first enters ConnectingState and attempts to connect to the device providing \a service. If a connection is established, QBluetoothSocket enters ConnectedState and emits connected(). At any point, the socket can emit error() to signal that an error occurred. Note that most platforms require a pairing prior to connecting to the remote device. Otherwise the connection process may fail. \sa state(), disconnectFromService() */ void QBluetoothSocket::connectToService(const QBluetoothServiceInfo &service, OpenMode openMode) { Q_D(QBluetoothSocket); if (state() != QBluetoothSocket::UnconnectedState && state() != QBluetoothSocket::ServiceLookupState) { qCWarning(QT_BT) << "QBluetoothSocket::connectToService called on busy socket"; d->errorString = QBluetoothSocket::tr("Trying to connect while connection is in progress"); setSocketError(QBluetoothSocket::OperationError); return; } #if defined(QT_QNX_BLUETOOTH) || defined(QT_ANDROID_BLUETOOTH) if (!d->ensureNativeSocket(service.socketProtocol())) { d->errorString = tr("Socket type not supported"); setSocketError(QBluetoothSocket::UnsupportedProtocolError); return; } d->connectToService(service.device().address(), service.serviceUuid(), openMode); #else if (service.protocolServiceMultiplexer() > 0) { if (!d->ensureNativeSocket(QBluetoothServiceInfo::L2capProtocol)) { d->errorString = tr("Unknown socket error"); setSocketError(UnknownSocketError); return; } d->connectToService(service.device().address(), service.protocolServiceMultiplexer(), openMode); } else if (service.serverChannel() > 0) { if (!d->ensureNativeSocket(QBluetoothServiceInfo::RfcommProtocol)) { d->errorString = tr("Unknown socket error"); setSocketError(UnknownSocketError); return; } d->connectToService(service.device().address(), service.serverChannel(), openMode); } else { // try doing service discovery to see if we can find the socket if(service.serviceUuid().isNull()){ qCWarning(QT_BT) << "No port, no PSM, and no UUID provided, unable to connect"; return; } qCDebug(QT_BT) << "Need a port/psm, doing discovery"; doDeviceDiscovery(service, openMode); } #endif }
void RemoteSelector::serviceDiscovered(const QBluetoothServiceInfo &serviceInfo) { #if 0 qDebug() << "Discovered service on" << serviceInfo.device().name() << serviceInfo.device().address().toString(); qDebug() << "\tService name:" << serviceInfo.serviceName(); qDebug() << "\tDescription:" << serviceInfo.attribute(QBluetoothServiceInfo::ServiceDescription).toString(); qDebug() << "\tProvider:" << serviceInfo.attribute(QBluetoothServiceInfo::ServiceProvider).toString(); qDebug() << "\tL2CAP protocol service multiplexer:" << serviceInfo.protocolServiceMultiplexer(); qDebug() << "\tRFCOMM server channel:" << serviceInfo.serverChannel(); #endif QMapIterator<QListWidgetItem *, QBluetoothServiceInfo> i(m_discoveredServices); while (i.hasNext()){ i.next(); if (serviceInfo.device().address() == i.value().device().address()){ return; } } QString remoteName; if (serviceInfo.device().name().isEmpty()) remoteName = serviceInfo.device().address().toString(); else remoteName = serviceInfo.device().name(); QListWidgetItem *item = new QListWidgetItem(QString::fromLatin1("%1 %2").arg(remoteName, serviceInfo.serviceName())); m_discoveredServices.insert(item, serviceInfo); ui->remoteDevices->addItem(item); }
void LiveViewScanner::handleDiscoveredService(const QBluetoothServiceInfo &info) { const QBluetoothDeviceInfo dev = info.device(); QString deviceName = dev.name(); if (deviceName == "LiveView") { QVariantMap foundInfo; foundInfo["driver"] = QString("liveview"); foundInfo["address"] = dev.address().toString(); foundInfo["name"] = deviceName; foundInfo["notification-watchlet"] = QString("com.javispedro.sowatch.liveview.notification"); emit watchFound(foundInfo); } }
bool QBluetoothServiceDiscoveryAgentPrivate::isDuplicatedService( const QBluetoothServiceInfo &serviceInfo) const { //check the service is not already part of our known list for (int j = 0; j < discoveredServices.count(); j++) { const QBluetoothServiceInfo &info = discoveredServices.at(j); if (info.device() == serviceInfo.device() && info.serviceClassUuids() == serviceInfo.serviceClassUuids() && info.serviceUuid() == serviceInfo.serviceUuid()) { return true; } } return false; }
QVariant QDeclarativeBluetoothDiscoveryModel::data(const QModelIndex &index, int role) const { QDeclarativeBluetoothService *service = d->m_services.value(index.row()); QBluetoothServiceInfo *info = service->serviceInfo(); switch(role) { case Qt::DisplayRole: { QString label = info->device().name(); if(label.isEmpty()) label += info->device().address().toString(); label += " " + info->serviceName(); return label; } case Qt::DecorationRole: return QLatin1String("image://bluetoothicons/default"); case ServiceRole: { return QVariant::fromValue(service); } } return QVariant(); }
void MetaWatchScanner::handleDiscoveredService(const QBluetoothServiceInfo &info) { const QBluetoothDeviceInfo dev = info.device(); QString deviceName = dev.name(); if (deviceName.startsWith("MetaWatch")) { QVariantMap foundInfo; foundInfo["address"] = dev.address().toString(); foundInfo["name"] = deviceName; qDebug() << "metawatch bluetooth scan found:" << deviceName; if (deviceName.contains("Analog")) { // This is Analog metawatch. foundInfo["driver"] = QString("metawatch-analog"); emit watchFound(foundInfo); } else { // For now, assume Digital metawatch. foundInfo["driver"] = QString("metawatch-digital"); foundInfo["idle-watchlet"] = QString("com.javispedro.sowatch.metawatch.watchface"); foundInfo["notification-watchlet"] = QString("com.javispedro.sowatch.metawatch.notification"); emit watchFound(foundInfo); } } }
void tst_QBluetoothServiceInfo::tst_assignment() { QFETCH(QUuid, uuid); QFETCH(QBluetoothUuid::ProtocolUuid, protocolUuid); QFETCH(QBluetoothServiceInfo::Protocol, serviceInfoProtocol); const QString serviceName("My Service"); const QBluetoothDeviceInfo deviceInfo(QBluetoothAddress("001122334455"), "Test Device", 0); QBluetoothServiceInfo serviceInfo; serviceInfo.setServiceName(serviceName); serviceInfo.setDevice(deviceInfo); QVERIFY(serviceInfo.isValid()); { QBluetoothServiceInfo copyInfo = serviceInfo; QVERIFY(copyInfo.isValid()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; QVERIFY(copyInfo.isValid()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo1; QBluetoothServiceInfo copyInfo2; QVERIFY(!copyInfo1.isValid()); QVERIFY(!copyInfo2.isValid()); copyInfo1 = copyInfo2 = serviceInfo; QVERIFY(copyInfo1.isValid()); QVERIFY(copyInfo2.isValid()); QCOMPARE(copyInfo1.serviceName(), serviceName); QCOMPARE(copyInfo2.serviceName(), serviceName); QCOMPARE(copyInfo1.device().address(), deviceInfo.address()); QCOMPARE(copyInfo2.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; copyInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, uuid); QVERIFY(copyInfo.contains(QBluetoothServiceInfo::ProtocolDescriptorList)); QVERIFY(copyInfo.isComplete()); QVERIFY(copyInfo.attributes().count() > 0); copyInfo.removeAttribute(QBluetoothServiceInfo::ProtocolDescriptorList); QVERIFY(!copyInfo.contains(QBluetoothServiceInfo::ProtocolDescriptorList)); QVERIFY(!copyInfo.isComplete()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; QVERIFY(copyInfo.serverChannel() == -1); QVERIFY(copyInfo.protocolServiceMultiplexer() == -1); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(protocolUuid)); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocolDescriptorList.append(QVariant::fromValue(protocol)); copyInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); QVERIFY(copyInfo.serverChannel() == -1); QVERIFY(copyInfo.protocolServiceMultiplexer() != -1); QVERIFY(copyInfo.socketProtocol() == serviceInfoProtocol); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; QVERIFY(!copyInfo.isRegistered()); QVERIFY(copyInfo.registerService()); QVERIFY(copyInfo.isRegistered()); QVERIFY(copyInfo.unregisterService()); QVERIFY(!copyInfo.isRegistered()); } }
void RemoteSelector::serviceDiscovered(const QBluetoothServiceInfo& serviceInfo) { #if DEBUG_OUTPUT qDebug() << "Discovered service on" << serviceInfo.device().name() << serviceInfo.device().address().toString(); qDebug() << "\tService name:" << serviceInfo.serviceName(); qDebug() << "\tDescription:" << serviceInfo.attribute(QBluetoothServiceInfo::ServiceDescription).toString(); qDebug() << "\tProvider:" << serviceInfo.attribute(QBluetoothServiceInfo::ServiceProvider).toString(); qDebug() << "\tL2CAP protocol service multiplexer:" << serviceInfo.protocolServiceMultiplexer(); qDebug() << "\tRFCOMM server channel:" << serviceInfo.serverChannel(); #endif QString remoteName; if (serviceInfo.device().name().isEmpty()) remoteName = serviceInfo.device().address().toString(); else remoteName = serviceInfo.device().name(); QMutableMapIterator<int, QBluetoothServiceInfo> i(discoveredServices_); while (i.hasNext()){ i.next(); if (serviceInfo.device().address() == i.value().device().address()){ i.setValue(serviceInfo); return; } } QString tooltip = QString("address: %1\nname: %2\nis trusted: %3\nis valid: %4\nservice: %5").arg( serviceInfo.device().address().toString(), serviceInfo.device().name(), trustedDevicelist.isTrusted(serviceInfo.device().address().toString()) ? "yes" : "no", serviceInfo.device().isValid() ? "yes" : "no", serviceInfo.serviceDescription()); if (!trustedDevicelist.isTrusted(serviceInfo.device().address().toString())) { int row = ui->remoteDevices->rowCount(); ui->remoteDevices->insertRow(row); QTableWidgetItem *item = new QTableWidgetItem(serviceInfo.device().address().toString()); item->setToolTip(tooltip); ui->remoteDevices->setItem(row, 0, item); item = new QTableWidgetItem(serviceInfo.device().name()); ui->remoteDevices->setItem(row, 1, item); item = new QTableWidgetItem(serviceInfo.serviceName()); ui->remoteDevices->setItem(row, 2, item); QBluetoothLocalDevice::Pairing p; p = localDevice_->pairingStatus(serviceInfo.device().address()); ui->remoteDevices->blockSignals(true); item = new QTableWidgetItem(); if ((p&QBluetoothLocalDevice::Paired) || (p&QBluetoothLocalDevice::AuthorizedPaired)) item->setCheckState(Qt::Checked); else item->setCheckState(Qt::Unchecked); ui->remoteDevices->setItem(row, 3, item); item = new QTableWidgetItem(); if (p&QBluetoothLocalDevice::AuthorizedPaired) item->setCheckState(Qt::Checked); else item->setCheckState(Qt::Unchecked); ui->remoteDevices->setItem(row, 4, item); item = new QTableWidgetItem(); if (trustedDevicelist.isTrusted(serviceInfo.device().address().toString())) item->setCheckState(Qt::Checked); else item->setCheckState(Qt::Unchecked); ui->remoteDevices->setItem(row, 5, item); ui->remoteDevices->blockSignals(false); discoveredServices_.insert(row, serviceInfo); } }
void RemoteSelector::serviceDiscovered(const QBluetoothServiceInfo &serviceInfo) { #if 0 qDebug() << "Discovered service on" << serviceInfo.device().name() << serviceInfo.device().address().toString(); qDebug() << "\tService name:" << serviceInfo.serviceName(); qDebug() << "\tDescription:" << serviceInfo.attribute(QBluetoothServiceInfo::ServiceDescription).toString(); qDebug() << "\tProvider:" << serviceInfo.attribute(QBluetoothServiceInfo::ServiceProvider).toString(); qDebug() << "\tL2CAP protocol service multiplexer:" << serviceInfo.protocolServiceMultiplexer(); qDebug() << "\tRFCOMM server channel:" << serviceInfo.serverChannel(); #endif QString remoteName; if (serviceInfo.device().name().isEmpty()) remoteName = serviceInfo.device().address().toString(); else remoteName = serviceInfo.device().name(); // QListWidgetItem *item = // new QListWidgetItem(QString::fromLatin1("%1\t%2\t%3").arg(serviceInfo.device().address().toString(), // serviceInfo.device().name(), serviceInfo.serviceName())); QMutableMapIterator<int, QBluetoothServiceInfo> i(m_discoveredServices); while(i.hasNext()){ i.next(); if(serviceInfo.device().address() == i.value().device().address()){ i.setValue(serviceInfo); return; } } int row = ui->remoteDevices->rowCount(); ui->remoteDevices->insertRow(row); QTableWidgetItem *item = new QTableWidgetItem(serviceInfo.device().address().toString()); ui->remoteDevices->setItem(row, 0, item); item = new QTableWidgetItem(serviceInfo.device().name()); ui->remoteDevices->setItem(row, 1, item); item = new QTableWidgetItem(serviceInfo.serviceName()); ui->remoteDevices->setItem(row, 2, item); QBluetoothLocalDevice::Pairing p; p = m_localDevice->pairingStatus(serviceInfo.device().address()); ui->remoteDevices->blockSignals(true); item = new QTableWidgetItem(); if((p&QBluetoothLocalDevice::Paired) || (p&QBluetoothLocalDevice::AuthorizedPaired)) item->setCheckState(Qt::Checked); else item->setCheckState(Qt::Unchecked); ui->remoteDevices->setItem(row, 3, item); item = new QTableWidgetItem(); if(p&QBluetoothLocalDevice::AuthorizedPaired) item->setCheckState(Qt::Checked); else item->setCheckState(Qt::Unchecked); ui->remoteDevices->setItem(row, 4, item); ui->remoteDevices->blockSignals(false); m_discoveredServices.insert(row, serviceInfo); }
void tst_QBluetoothServiceInfo::tst_assignment() { QFETCH(QUuid, uuid); QFETCH(QBluetoothUuid::ProtocolUuid, protocolUuid); QFETCH(QBluetoothServiceInfo::Protocol, serviceInfoProtocol); QFETCH(bool, protocolSupported); const QString serviceName("My Service"); const QBluetoothDeviceInfo deviceInfo(QBluetoothAddress("001122334455"), "Test Device", 0); QBluetoothServiceInfo serviceInfo; serviceInfo.setServiceName(serviceName); serviceInfo.setDevice(deviceInfo); QVERIFY(serviceInfo.isValid()); QVERIFY(!serviceInfo.isRegistered()); QVERIFY(!serviceInfo.isComplete()); { QBluetoothServiceInfo copyInfo = serviceInfo; QVERIFY(copyInfo.isValid()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!copyInfo.isComplete()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!copyInfo.isComplete()); copyInfo = serviceInfo; QVERIFY(copyInfo.isValid()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!copyInfo.isComplete()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo1; QBluetoothServiceInfo copyInfo2; QVERIFY(!copyInfo1.isValid()); QVERIFY(!copyInfo1.isRegistered()); QVERIFY(!copyInfo1.isComplete()); QVERIFY(!copyInfo2.isValid()); QVERIFY(!copyInfo2.isRegistered()); QVERIFY(!copyInfo2.isComplete()); copyInfo1 = copyInfo2 = serviceInfo; QVERIFY(copyInfo1.isValid()); QVERIFY(!copyInfo1.isRegistered()); QVERIFY(!copyInfo1.isComplete()); QVERIFY(copyInfo2.isValid()); QVERIFY(!copyInfo2.isRegistered()); QVERIFY(!copyInfo2.isComplete()); QCOMPARE(copyInfo1.serviceName(), serviceName); QCOMPARE(copyInfo2.serviceName(), serviceName); QCOMPARE(copyInfo1.device().address(), deviceInfo.address()); QCOMPARE(copyInfo2.device().address(), deviceInfo.address()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!copyInfo.isComplete()); copyInfo = serviceInfo; QVERIFY(copyInfo.contains(QBluetoothServiceInfo::ServiceName)); copyInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, QBluetoothUuid(uuid)); QVERIFY(copyInfo.contains(QBluetoothServiceInfo::ProtocolDescriptorList)); QVERIFY(copyInfo.isComplete()); QVERIFY(copyInfo.attributes().count() > 0); copyInfo.removeAttribute(QBluetoothServiceInfo::ProtocolDescriptorList); QVERIFY(!copyInfo.contains(QBluetoothServiceInfo::ProtocolDescriptorList)); QVERIFY(!copyInfo.isComplete()); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; QVERIFY(copyInfo.serverChannel() == -1); QVERIFY(copyInfo.protocolServiceMultiplexer() == -1); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(protocolUuid)); protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocolDescriptorList.append(QVariant::fromValue(protocol)); copyInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); if (serviceInfoProtocol == QBluetoothServiceInfo::L2capProtocol) { QVERIFY(copyInfo.serverChannel() == -1); QVERIFY(copyInfo.protocolServiceMultiplexer() != -1); } else if (serviceInfoProtocol == QBluetoothServiceInfo::RfcommProtocol) { QVERIFY(copyInfo.serverChannel() != -1); QVERIFY(copyInfo.protocolServiceMultiplexer() == -1); } QVERIFY(copyInfo.socketProtocol() == serviceInfoProtocol); } { QBluetoothServiceInfo copyInfo; QVERIFY(!copyInfo.isValid()); copyInfo = serviceInfo; copyInfo.setServiceUuid(QBluetoothUuid::SerialPort); QVERIFY(!copyInfo.isRegistered()); if (!QBluetoothLocalDevice::allDevices().count()) { QSKIP("Skipping test due to missing Bluetooth device"); } else if (protocolSupported) { QBluetoothServer server(serviceInfoProtocol); QVERIFY(server.listen()); QTRY_VERIFY_WITH_TIMEOUT(server.isListening(), 5000); QVERIFY(server.serverPort() > 0); QBluetoothServiceInfo::Sequence protocolDescriptorList; QBluetoothServiceInfo::Sequence protocol; protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::L2cap)); if (serviceInfoProtocol == QBluetoothServiceInfo::L2capProtocol) { protocol << QVariant::fromValue(server.serverPort()); protocolDescriptorList.append(QVariant::fromValue(protocol)); } else if (serviceInfoProtocol == QBluetoothServiceInfo::RfcommProtocol) { protocolDescriptorList.append(QVariant::fromValue(protocol)); protocol.clear(); protocol << QVariant::fromValue(QBluetoothUuid(QBluetoothUuid::Rfcomm)) << QVariant::fromValue(quint8(server.serverPort())); protocolDescriptorList.append(QVariant::fromValue(protocol)); } serviceInfo.setAttribute(QBluetoothServiceInfo::ProtocolDescriptorList, protocolDescriptorList); QVERIFY(copyInfo.registerService()); QVERIFY(copyInfo.isRegistered()); QVERIFY(serviceInfo.isRegistered()); QBluetoothServiceInfo secondCopy; secondCopy = copyInfo; QVERIFY(secondCopy.isRegistered()); QVERIFY(secondCopy.unregisterService()); QVERIFY(!copyInfo.isRegistered()); QVERIFY(!secondCopy.isRegistered()); QVERIFY(!serviceInfo.isRegistered()); QVERIFY(server.isListening()); server.close(); QVERIFY(!server.isListening()); } } }
void tst_QBluetoothServiceInfo::tst_construction() { const QString serviceName("My Service"); const QString alternateServiceName("Another ServiceName"); const QBluetoothDeviceInfo deviceInfo(QBluetoothAddress("001122334455"), "Test Device", 0); const QBluetoothDeviceInfo alternatedeviceInfo(QBluetoothAddress("554433221100"), "Test Device2", 0); QList<QBluetoothUuid::ProtocolUuid> protUuids; //list taken from qbluetoothuuid.h protUuids << QBluetoothUuid::Sdp; protUuids << QBluetoothUuid::Udp; protUuids << QBluetoothUuid::Rfcomm; protUuids << QBluetoothUuid::Tcp; protUuids << QBluetoothUuid::TcsBin; protUuids << QBluetoothUuid::TcsAt; protUuids << QBluetoothUuid::Att; protUuids << QBluetoothUuid::Obex; protUuids << QBluetoothUuid::Ip; protUuids << QBluetoothUuid::Ftp; protUuids << QBluetoothUuid::Http; protUuids << QBluetoothUuid::Wsp; protUuids << QBluetoothUuid::Bnep; protUuids << QBluetoothUuid::Upnp; protUuids << QBluetoothUuid::Hidp; protUuids << QBluetoothUuid::HardcopyControlChannel; protUuids << QBluetoothUuid::HardcopyDataChannel; protUuids << QBluetoothUuid::HardcopyNotification; protUuids << QBluetoothUuid::Avctp; protUuids << QBluetoothUuid::Avdtp; protUuids << QBluetoothUuid::Cmtp; protUuids << QBluetoothUuid::UdiCPlain; protUuids << QBluetoothUuid::McapControlChannel; protUuids << QBluetoothUuid::McapDataChannel; protUuids << QBluetoothUuid::L2cap; { QBluetoothServiceInfo serviceInfo; QVERIFY(!serviceInfo.isValid()); QVERIFY(!serviceInfo.isComplete()); QVERIFY(!serviceInfo.isRegistered()); QCOMPARE(serviceInfo.serviceName(), QString()); QCOMPARE(serviceInfo.serviceDescription(), QString()); QCOMPARE(serviceInfo.serviceProvider(), QString()); QCOMPARE(serviceInfo.serviceUuid(), QBluetoothUuid()); QCOMPARE(serviceInfo.serviceClassUuids().count(), 0); QCOMPARE(serviceInfo.attributes().count(), 0); QCOMPARE(serviceInfo.serverChannel(), -1); QCOMPARE(serviceInfo.protocolServiceMultiplexer(), -1); foreach (QBluetoothUuid::ProtocolUuid u, protUuids) QCOMPARE(serviceInfo.protocolDescriptor(u).count(), 0); } { QBluetoothServiceInfo serviceInfo; serviceInfo.setServiceName(serviceName); serviceInfo.setDevice(deviceInfo); QVERIFY(serviceInfo.isValid()); QVERIFY(!serviceInfo.isComplete()); QVERIFY(!serviceInfo.isRegistered()); QCOMPARE(serviceInfo.serviceName(), serviceName); QCOMPARE(serviceInfo.device().address(), deviceInfo.address()); QBluetoothServiceInfo copyInfo(serviceInfo); QVERIFY(copyInfo.isValid()); QVERIFY(!copyInfo.isComplete()); QVERIFY(!copyInfo.isRegistered()); QCOMPARE(copyInfo.serviceName(), serviceName); QCOMPARE(copyInfo.device().address(), deviceInfo.address()); copyInfo.setAttribute(QBluetoothServiceInfo::ServiceName, alternateServiceName); copyInfo.setDevice(alternatedeviceInfo); QCOMPARE(copyInfo.serviceName(), alternateServiceName); QCOMPARE(copyInfo.attribute(QBluetoothServiceInfo::ServiceName).toString(), alternateServiceName); QCOMPARE(serviceInfo.serviceName(), alternateServiceName); QCOMPARE(copyInfo.device().address(), alternatedeviceInfo.address()); QCOMPARE(serviceInfo.device().address(), alternatedeviceInfo.address()); foreach (QBluetoothUuid::ProtocolUuid u, protUuids) QCOMPARE(serviceInfo.protocolDescriptor(u).count(), 0); foreach (QBluetoothUuid::ProtocolUuid u, protUuids) QCOMPARE(copyInfo.protocolDescriptor(u).count(), 0); } }
// In your local slot, read information about the found devices void MyClass::serviceDiscovered(const QBluetoothServiceInfo &service) { qDebug() << "Found new service:" << service.serviceName() << '(' << service.device().address().toString() << ')'; }