File indexing completed on 2024-05-12 15:32:33

0001 /*
0002  * BluezQt - Asynchronous Bluez wrapper library
0003  *
0004  * SPDX-FileCopyrightText: 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 "declarativeadapter.h"
0010 #include "declarativedevice.h"
0011 
0012 static int devicesCountDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property)
0013 {
0014     Q_ASSERT(qobject_cast<DeclarativeAdapter *>(property->object));
0015     DeclarativeAdapter *adapter = static_cast<DeclarativeAdapter *>(property->object);
0016 
0017     return adapter->m_devices.count();
0018 }
0019 
0020 static DeclarativeDevice *devicesAtDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property, int index)
0021 {
0022     Q_ASSERT(qobject_cast<DeclarativeAdapter *>(property->object));
0023     DeclarativeAdapter *adapter = static_cast<DeclarativeAdapter *>(property->object);
0024 
0025     return adapter->m_devices.values().at(index);
0026 }
0027 
0028 DeclarativeAdapter::DeclarativeAdapter(BluezQt::AdapterPtr adapter, QObject *parent)
0029     : QObject(parent)
0030     , m_adapter(adapter)
0031 {
0032     connect(m_adapter.data(), &BluezQt::Adapter::nameChanged, this, &DeclarativeAdapter::nameChanged);
0033     connect(m_adapter.data(), &BluezQt::Adapter::systemNameChanged, this, &DeclarativeAdapter::systemNameChanged);
0034     connect(m_adapter.data(), &BluezQt::Adapter::adapterClassChanged, this, &DeclarativeAdapter::adapterClassChanged);
0035     connect(m_adapter.data(), &BluezQt::Adapter::poweredChanged, this, &DeclarativeAdapter::poweredChanged);
0036     connect(m_adapter.data(), &BluezQt::Adapter::discoverableChanged, this, &DeclarativeAdapter::discoverableChanged);
0037     connect(m_adapter.data(), &BluezQt::Adapter::discoverableTimeoutChanged, this, &DeclarativeAdapter::discoverableTimeoutChanged);
0038     connect(m_adapter.data(), &BluezQt::Adapter::pairableChanged, this, &DeclarativeAdapter::pairableChanged);
0039     connect(m_adapter.data(), &BluezQt::Adapter::pairableTimeoutChanged, this, &DeclarativeAdapter::pairableTimeoutChanged);
0040     connect(m_adapter.data(), &BluezQt::Adapter::discoveringChanged, this, &DeclarativeAdapter::discoveringChanged);
0041     connect(m_adapter.data(), &BluezQt::Adapter::uuidsChanged, this, &DeclarativeAdapter::uuidsChanged);
0042     connect(m_adapter.data(), &BluezQt::Adapter::modaliasChanged, this, &DeclarativeAdapter::modaliasChanged);
0043 
0044     connect(m_adapter.data(), &BluezQt::Adapter::deviceAdded, this, &DeclarativeAdapter::slotDeviceAdded);
0045     connect(m_adapter.data(), &BluezQt::Adapter::deviceRemoved, this, &DeclarativeAdapter::slotDeviceRemoved);
0046 
0047     connect(m_adapter.data(), &BluezQt::Adapter::adapterRemoved, this, [this]() {
0048         Q_EMIT adapterRemoved(this);
0049     });
0050 
0051     connect(m_adapter.data(), &BluezQt::Adapter::adapterChanged, this, [this]() {
0052         Q_EMIT adapterChanged(this);
0053     });
0054 
0055     connect(m_adapter.data(), &BluezQt::Adapter::deviceChanged, this, [this](const BluezQt::DevicePtr &device) {
0056         Q_EMIT deviceChanged(declarativeDeviceFromPtr(device));
0057     });
0058 }
0059 
0060 QString DeclarativeAdapter::ubi() const
0061 {
0062     return m_adapter->ubi();
0063 }
0064 
0065 QString DeclarativeAdapter::address() const
0066 {
0067     return m_adapter->address();
0068 }
0069 
0070 QString DeclarativeAdapter::name() const
0071 {
0072     return m_adapter->name();
0073 }
0074 
0075 void DeclarativeAdapter::setName(const QString &name)
0076 {
0077     m_adapter->setName(name);
0078 }
0079 
0080 QString DeclarativeAdapter::systemName() const
0081 {
0082     return m_adapter->systemName();
0083 }
0084 
0085 quint32 DeclarativeAdapter::adapterClass() const
0086 {
0087     return m_adapter->adapterClass();
0088 }
0089 
0090 bool DeclarativeAdapter::isPowered() const
0091 {
0092     return m_adapter->isPowered();
0093 }
0094 
0095 void DeclarativeAdapter::setPowered(bool powered)
0096 {
0097     m_adapter->setPowered(powered);
0098 }
0099 
0100 bool DeclarativeAdapter::isDiscoverable() const
0101 {
0102     return m_adapter->isDiscoverable();
0103 }
0104 
0105 void DeclarativeAdapter::setDiscoverable(bool discoverable)
0106 {
0107     m_adapter->setDiscoverable(discoverable);
0108 }
0109 
0110 quint32 DeclarativeAdapter::discoverableTimeout() const
0111 {
0112     return m_adapter->discoverableTimeout();
0113 }
0114 
0115 void DeclarativeAdapter::setDiscoverableTimeout(quint32 timeout)
0116 {
0117     m_adapter->setDiscoverableTimeout(timeout);
0118 }
0119 
0120 bool DeclarativeAdapter::isPairable() const
0121 {
0122     return m_adapter->isPairable();
0123 }
0124 
0125 void DeclarativeAdapter::setPairable(bool pairable)
0126 {
0127     m_adapter->setPairable(pairable);
0128 }
0129 
0130 quint32 DeclarativeAdapter::pairableTimeout() const
0131 {
0132     return m_adapter->pairableTimeout();
0133 }
0134 
0135 void DeclarativeAdapter::setPairableTimeout(quint32 timeout)
0136 {
0137     m_adapter->setPairableTimeout(timeout);
0138 }
0139 
0140 bool DeclarativeAdapter::isDiscovering()
0141 {
0142     return m_adapter->isDiscovering();
0143 }
0144 
0145 QStringList DeclarativeAdapter::uuids() const
0146 {
0147     return m_adapter->uuids();
0148 }
0149 
0150 QString DeclarativeAdapter::modalias() const
0151 {
0152     return m_adapter->modalias();
0153 }
0154 
0155 QQmlListProperty<DeclarativeDevice> DeclarativeAdapter::devices()
0156 {
0157     return QQmlListProperty<DeclarativeDevice>(this, nullptr, devicesCountDeclarativeAdapterFunction, devicesAtDeclarativeAdapterFunction);
0158 }
0159 
0160 DeclarativeDevice *DeclarativeAdapter::deviceForAddress(const QString &address) const
0161 {
0162     return declarativeDeviceFromPtr(m_adapter->deviceForAddress(address));
0163 }
0164 
0165 BluezQt::PendingCall *DeclarativeAdapter::startDiscovery()
0166 {
0167     return m_adapter->startDiscovery();
0168 }
0169 
0170 BluezQt::PendingCall *DeclarativeAdapter::stopDiscovery()
0171 {
0172     return m_adapter->stopDiscovery();
0173 }
0174 
0175 BluezQt::PendingCall *DeclarativeAdapter::removeDevice(DeclarativeDevice *device)
0176 {
0177     return m_adapter->removeDevice(m_adapter->deviceForAddress(device->address()));
0178 }
0179 
0180 void DeclarativeAdapter::slotDeviceAdded(BluezQt::DevicePtr device)
0181 {
0182     Q_EMIT deviceFound(declarativeDeviceFromPtr(device));
0183     Q_EMIT devicesChanged(devices());
0184 }
0185 
0186 void DeclarativeAdapter::slotDeviceRemoved(BluezQt::DevicePtr device)
0187 {
0188     Q_EMIT deviceRemoved(declarativeDeviceFromPtr(device));
0189     Q_EMIT devicesChanged(devices());
0190 }
0191 
0192 DeclarativeDevice *DeclarativeAdapter::declarativeDeviceFromPtr(BluezQt::DevicePtr ptr) const
0193 {
0194     if (!ptr) {
0195         return nullptr;
0196     }
0197     return m_devices.value(ptr->ubi());
0198 }
0199 
0200 #include "moc_declarativeadapter.cpp"