Debugging Bluetooth
-
I have cut the heartlistener example down to a minimal version that does nothing more than search for devices...and as much as I have tried to clone the code that I need from the example....it does not find any devices (yet the example works fine).
I can post the code but was wondering if anyone could suggest things for me to look at in hopes that I can solve it myself.
On a related question, I am having trouble getting logging out. I have the following in code:
QLoggingCategory::setFilterRules("qt.bluetooth.bluez.debug=true\n" "qt.bluetooth.debug=true");
but no messages. I am new to Qt so am sure that I am missing something obvious.
-
Hi and welcome to devnet,
Your filter line is wrong, the separator should be a semicolon.
-
Thanks, not sure where I copied that from but even with just one filter I am still not getting output. I think my problem must be more fundamental...as in how to turn on logging in the first place? I would have thought that a google would have answered my question of how to do this but alas I am clearly missing something!
-
Then maybe a silly question but are you sure you are initialising everything like the example ?
-
@SGaist I have tried to cut the example down to bare minimums so I could focus on the bluetooth flow...I think that I am doing everything the same...but based on the results I am absolutely sure that I am NOT! Hence my hope of seeing the messages!!!! I have attached the code in case you or anything else can take a look :-o
.pro
QT += bluetooth quick CONFIG += c++11 TARGET = TestBt CONFIG += console TEMPLATE = app SOURCES += main.cpp \ discoveryAgent.cpp \ deviceinfo.cpp DEFINES += QT_DEPRECATED_WARNINGS HEADERS += \ main.h \ discoveryAgent.h \ deviceinfo.h
main.cpp
/#include <qbluetoothaddress.h> #include <qbluetoothdevicediscoveryagent.h> #include <qbluetoothlocaldevice.h> #include <qbluetoothdeviceinfo.h> #include <qbluetoothservicediscoveryagent.h> #include <QDebug> #include <QList> #include <QTimer> #include <QCoreApplication> #include <QtCore/QLoggingCategory> #include <QMessageLogger> #include <discoveryAgent.h> int main(int argc, char *argv[]) { QLoggingCategory::setFilterRules("qt.bluetooth.debug=true"); QCoreApplication a(argc, argv); QBluetoothLocalDevice localDevice; QString localDeviceName; const QBluetoothAddress adapter = QBluetoothAddress() ; discoveryAgent bT; return a.exec(); }
main.h is effectively empty
discoveryAgent.cpp
#include <QBluetoothDeviceDiscoveryAgent> #include <discoveryAgent.h> #include <QtCore/QDebug> #include <QtEndian> discoveryAgent::discoveryAgent(): m_currentDevice(QBluetoothDeviceInfo()), connected(false), controller(0), m_deviceScanState(false), randomAddress(false) { m_deviceDiscoveryAgent = new QBluetoothDeviceDiscoveryAgent(this); connect(m_deviceDiscoveryAgent, SIGNAL(deviceDiscovered(const QBluetoothDeviceInfo&)), this, SLOT(addDevice(const QBluetoothDeviceInfo&))); connect(m_deviceDiscoveryAgent, SIGNAL(error(QBluetoothDeviceDiscoveryAgent::Error)), this, SLOT(deviceScanError(QBluetoothDeviceDiscoveryAgent::Error))); connect(m_deviceDiscoveryAgent, SIGNAL(finished()), this, SLOT(scanFinished())); qDeleteAll(m_devices); m_devices.clear(); m_deviceDiscoveryAgent->start(); if (m_deviceDiscoveryAgent->isActive()) { m_deviceScanState = true; qDebug() << "Active"; } QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(waitForUpdate())); timer->start(30000); } discoveryAgent::~discoveryAgent() { qDeleteAll(m_devices); m_devices.clear(); } // In your local slot, read information about the found devices void discoveryAgent::deviceDiscovered(const QBluetoothDeviceInfo &device) { qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')'; } void discoveryAgent::waitForUpdate() { qDebug() << "----"; if (m_deviceDiscoveryAgent->isActive()) { m_deviceScanState = true; qDebug() << "Active"; } } void discoveryAgent::addDevice(const QBluetoothDeviceInfo &device) { qDebug() << "addDevice"; if (device.coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration) { qWarning() << "Discovered LE Device name: " << device.name() << " Address: " << device.address().toString(); DeviceInfo *dev = new DeviceInfo(device); m_devices.append(dev); qDebug() << "Low Energy device found. Scanning for more..."; } //... } void discoveryAgent::scanFinished() { qDebug() << "scanFinished"; if (m_devices.size() == 0) qDebug() << "No Low Energy devices found"; } void discoveryAgent::deviceScanError(QBluetoothDeviceDiscoveryAgent::Error error) { if (error == QBluetoothDeviceDiscoveryAgent::PoweredOffError) qDebug() << "The Bluetooth adaptor is powered off, power it on before doing discovery."; else if (error == QBluetoothDeviceDiscoveryAgent::InputOutputError) qDebug() << "Writing or reading from the device resulted in an error."; else qDebug() <<"An unknown error has occurred."; }
discoveryAgent.h
#ifndef DISCOVERYAGENT_H #define DISCOVERYAGENT_H #include <QString> #include <QDebug> #include <QDateTime> #include <QVector> #include <QTimer> #include <QBluetoothDeviceDiscoveryAgent> #include <QBluetoothDeviceInfo> #include <QLowEnergyController> #include <QLowEnergyService> #include "deviceinfo.h" QT_FORWARD_DECLARE_CLASS (QBluetoothDeviceInfo) QT_FORWARD_DECLARE_CLASS (QBluetoothServiceInfo) class discoveryAgent: public QObject { Q_OBJECT public: discoveryAgent(); ~discoveryAgent(); private: QBluetoothDeviceDiscoveryAgent *m_deviceDiscoveryAgent; DeviceInfo m_currentDevice; QList<QObject*> m_devices; bool connected; QLowEnergyController *controller; bool m_deviceScanState; bool randomAddress; private slots: void waitForUpdate(); void deviceDiscovered(const QBluetoothDeviceInfo &device); //QBluetothDeviceDiscoveryAgent void addDevice(const QBluetoothDeviceInfo&); void scanFinished(); void deviceScanError(QBluetoothDeviceDiscoveryAgent::Error); }; #endif // DISCOVERYAGENT_H