/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 2016-2018 Simon Stürz * * * * This file is part of guh. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; If not, see * * . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef BLUETOOTHADAPTER_H #define BLUETOOTHADAPTER_H #include #include #include #include #include #include "bluetoothdevice.h" // Note: DBus documentation https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt class BluetoothManager; class BluetoothAdapter : public QObject { Q_OBJECT friend class BluetoothManager; public: // Properties QString name() const; QString alias() const; bool setAlias(const QString &alias); QString address() const; QString modalias() const; bool discovering() const; bool discoverable() const; bool setDiscoverable(const bool &discoverable); uint discoverableTimeout() const; bool setDiscoverableTimeout(const uint &seconds); bool pairable() const; bool setPairable(const bool &pairable); uint pairableTimeout() const; bool setPairableTimeout(const uint &seconds); uint adapterClass() const; QString adapterClassString() const; bool powered() const; bool setPower(const bool &power); QStringList uuids() const; QList devices() const; bool hasDevice(const QBluetoothAddress &address); BluetoothDevice *getDevice(const QBluetoothAddress &address); bool removeDevice(const QBluetoothAddress &address); bool isValid() const; private: // Note: only BluetoothManager can create adapter objects explicit BluetoothAdapter(const QDBusObjectPath &path, const QVariantMap &properties, QObject *parent = 0); ~BluetoothAdapter(); QDBusObjectPath m_path; QDBusInterface *m_adapterInterface; QString m_name; QString m_address; QString m_alias; QString m_modalias; bool m_discovering; bool m_discoverable; uint m_discoverableTimeout; bool m_pairable; uint m_pairableTimeout; uint m_adapterClass; bool m_powered; QStringList m_uuids; QList m_devices; void processProperties(const QVariantMap &properties); // Methods called from BluetoothManager void addDeviceInternally(const QDBusObjectPath &path, const QVariantMap &properties); void removeDeviceInternally(const QDBusObjectPath &path); // Verification methods bool hasDevice(const QDBusObjectPath &path); // DBus methods bool removeDevice(const QDBusObjectPath &path); void setAliasInternally(const QString &alias); void setDiscoveringInternally(const bool &discovering); void setDiscoverableInernally(const bool &discoverable); void setDiscoverableTimeoutInternally(const uint &discoverableTimeout); void setPairableInternally(const bool &pairable); void setPairableTimeoutInternally(const uint &pairableTimeout); void setPoweredInternally(const bool &powered); private slots: void onPropertiesChanged(const QString &interface, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); void onRemoveDeviceFinished(QDBusPendingCallWatcher *call); signals: void aliasChanged(const QString &alias); void discoveringChanged(const bool &discovering); void discoverableChanged(const bool &discoverable); void discoverableTimeoutChanged(const uint &discoverableTimeout); void pairableChanged(const bool &pairable); void pairableTimeoutChanged(const uint &pairableTimeout); void poweredChanged(const bool &powered); void deviceAdded(BluetoothDevice *device); void deviceRemoved(BluetoothDevice *device); public slots: void startDiscovering(); void stopDiscovering(); }; QDebug operator<<(QDebug debug, BluetoothAdapter *adapter); #endif // BLUETOOTHADAPTER_H