diff --git a/qbluetoothleuart.cpp b/qbluetoothleuart.cpp index c39291e..2d0e146 100644 --- a/qbluetoothleuart.cpp +++ b/qbluetoothleuart.cpp @@ -84,6 +84,9 @@ QBluetoothLeUartDeviceModel* QBluetoothLeUart::getAvailableDevicesModel() { return this->availableDevicesModel; } +QBluetoothLeUartDevice* QBluetoothLeUart::getCurrentDevice() { + return this->currentBluetoothDevice; +} bool QBluetoothLeUart::connectToDevice(int deviceId) { if(deviceId < 0 || deviceId >= this->availableDevices.length()) @@ -101,6 +104,7 @@ bool QBluetoothLeUart::connectToDevice(QBluetoothLeUartDevice *device){ this->stopScanningForDevices(); this->currentBluetoothDevice = device; + emit this->currentDeviceChanged(); if (bluetoothController) { bluetoothController->disconnectFromDevice(); @@ -141,12 +145,17 @@ bool QBluetoothLeUart::disconnectFromDevice() { this->bluetoothService = nullptr; } + this->currentBluetoothDevice->deleteLater(); + this->currentBluetoothDevice = nullptr; + emit this->currentDeviceChanged(); + this->setState(Idle); return true; } -bool QBluetoothLeUart::sendData(QString data){ +bool QBluetoothLeUart::sendData(QString data, bool asynchronous){ + Q_UNUSED(asynchronous) if(this->state != Connected) return false; @@ -155,7 +164,7 @@ bool QBluetoothLeUart::sendData(QString data){ QByteArray Data; Data.append(data); - bluetoothService->writeCharacteristic(RxChar, Data,QLowEnergyService::WriteWithoutResponse); + bluetoothService->writeCharacteristic(RxChar, Data, QLowEnergyService::WriteWithoutResponse); return true; } @@ -185,7 +194,7 @@ void QBluetoothLeUart::handleScanFinished() { if (this->availableDevices.size() == 0) { - qWarning() << "No Low Energy devices found" << endl; + qWarning() << "No Low Energy devices found"; } emit this->scanFinished(this->availableDevices); diff --git a/qbluetoothleuart.h b/qbluetoothleuart.h index 82ccfb0..72dff6a 100644 --- a/qbluetoothleuart.h +++ b/qbluetoothleuart.h @@ -118,6 +118,7 @@ class QBluetoothLeUart : public QObject Q_OBJECT Q_PROPERTY(QVariantList availableDevices READ getAvailableDevicesDetailList NOTIFY avaliableDevicesChanged) Q_PROPERTY(QBluetoothLeUartDeviceModel* availableDevicesModel READ getAvailableDevicesModel NOTIFY avaliableDevicesModelChanged) + Q_PROPERTY(QBluetoothLeUartDevice* currentDevice READ getCurrentDevice NOTIFY currentDeviceChanged) Q_PROPERTY(BluetoothLeUartState state READ getState NOTIFY stateChanged) public: @@ -245,6 +246,12 @@ public slots: */ Q_INVOKABLE QBluetoothLeUartDeviceModel* getAvailableDevicesModel(); + /*! + * \brief Function to get the currently connected device + * \return The currently connected device or nullptr if no device is connected + */ + Q_INVOKABLE QBluetoothLeUartDevice* getCurrentDevice(); + /*! * \brief Function connect to a device using its internal id * @@ -293,7 +300,7 @@ public slots: * \param data The data to send * \return false if there was not device connected, true otherwise */ - Q_INVOKABLE bool sendData(QString data); + Q_INVOKABLE bool sendData(QString data, bool asynchronous = true); /*! * \brief Function to get the current state of QBluetoothLeUart @@ -328,6 +335,7 @@ signals: void foundNewDevice(QBluetoothLeUartDevice* device); void avaliableDevicesChanged(QList avaliableDevices); void avaliableDevicesModelChanged(); + void currentDeviceChanged(); void scanFinished(QList availableDevices); void scanningErrorOccured(QBluetoothLeUart::BluetoothScanError error);