File indexing completed on 2024-04-28 03:52:07
0001 /* 0002 * SPDX-FileCopyrightText: 2010 Rafael Fernández López <ereslibre@kde.org> 0003 * SPDX-FileCopyrightText: 2010 UFO Coders <info@ufocoders.com> 0004 * SPDX-FileCopyrightText: 2014-2015 David Rosca <nowrep@gmail.com> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "devicereceiver.h" 0010 0011 #include <QCoreApplication> 0012 #include <QDebug> 0013 0014 #include "adapter.h" 0015 #include "device.h" 0016 #include "initmanagerjob.h" 0017 #include "pendingcall.h" 0018 0019 using namespace BluezQt; 0020 0021 Manager *g_manager = nullptr; 0022 0023 DeviceReceiver::DeviceReceiver(QObject *parent) 0024 : QObject(parent) 0025 { 0026 } 0027 0028 void DeviceReceiver::scanDevices() 0029 { 0030 AdapterPtr usableAdapter = g_manager->usableAdapter(); 0031 if (!usableAdapter && g_manager->adapters().isEmpty()) { 0032 qDebug() << "!!! No bluetooth adapters were found. Waiting for bluetooth adapters. Ctrl + C to cancel..."; 0033 connect(g_manager, &Manager::adapterAdded, this, &DeviceReceiver::adapterAdded); 0034 return; 0035 } else if (!usableAdapter) { 0036 usableAdapter = g_manager->adapters().at(0); 0037 PendingCall *powerOnCall = usableAdapter->setPowered(true); 0038 powerOnCall->waitForFinished(); 0039 } 0040 0041 qDebug() << "*** Will scan devices until stopped..."; 0042 qDebug(); 0043 0044 connect(usableAdapter.data(), &Adapter::deviceAdded, this, &DeviceReceiver::deviceFound); 0045 connect(usableAdapter.data(), &Adapter::deviceChanged, this, &DeviceReceiver::devicePropertyChanged); 0046 0047 usableAdapter->startDiscovery(); 0048 } 0049 0050 void DeviceReceiver::deviceFound(const BluezQt::DevicePtr &device) 0051 { 0052 qDebug() << "*** Remote device found:" << device->name() << "(" << device->address() << ")"; 0053 qDebug(); 0054 } 0055 0056 void DeviceReceiver::devicePropertyChanged(const BluezQt::DevicePtr &device) 0057 { 0058 qDebug() << "*** Device with address" << device->address() << "changed some property"; 0059 qDebug() << "\tAddress:\t" << device->address(); 0060 qDebug() << "\tClass:\t\t" << device->deviceClass(); 0061 qDebug() << "\tIcon:\t\t" << device->icon(); 0062 qDebug() << "\tLegacy Pairing:\t" << (device->hasLegacyPairing() ? "yes" : "no"); 0063 qDebug() << "\tName:\t\t" << device->name(); 0064 qDebug() << "\tPaired:\t\t" << (device->isPaired() ? "yes" : "no"); 0065 qDebug() << "\tTrusted:\t" << (device->isTrusted() ? "yes" : "no"); 0066 qDebug() << "\tServices:\n" << device->uuids(); 0067 qDebug(); 0068 } 0069 0070 void DeviceReceiver::adapterAdded(const BluezQt::AdapterPtr &adapter) 0071 { 0072 Q_UNUSED(adapter) 0073 0074 qDebug() << "*** An adapter has been connected."; 0075 qDebug(); 0076 scanDevices(); 0077 } 0078 0079 static void stopDiscovering() 0080 { 0081 if (g_manager) { 0082 for (const AdapterPtr &adapter : g_manager->adapters()) { 0083 adapter->stopDiscovery(); 0084 } 0085 } 0086 } 0087 0088 int main(int argc, char **argv) 0089 { 0090 QCoreApplication app(argc, argv); 0091 0092 qAddPostRoutine(stopDiscovering); 0093 0094 g_manager = new Manager(); 0095 InitManagerJob *initJob = g_manager->init(); 0096 initJob->exec(); 0097 0098 if (initJob->error()) { 0099 qWarning() << "Error initializing manager:" << initJob->errorText(); 0100 return 1; 0101 } 0102 0103 DeviceReceiver *deviceReceiver = new DeviceReceiver(); 0104 deviceReceiver->scanDevices(); 0105 0106 return app.exec(); 0107 } 0108 0109 #include "moc_devicereceiver.cpp"