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"