mirror of https://github.com/nymea/nymea.git
add displayPin setupMethod
parent
edb95e36fd
commit
ee41ef5cfa
|
|
@ -508,9 +508,15 @@ DeviceManager::DeviceError DeviceManager::pairDevice(const PairingTransactionId
|
|||
m_pairingsDiscovery.insert(pairingTransactionId, qMakePair<DeviceClassId, DeviceDescriptorId>(deviceClassId, deviceDescriptorId));
|
||||
|
||||
if (deviceClass.setupMethod() == DeviceClass::SetupMethodDisplayPin) {
|
||||
// TODO: fetch PIN from device plugin
|
||||
qCWarning(dcDeviceManager) << "SetupMethodDisplayPin not implemented yet";
|
||||
return DeviceErrorSetupFailed;
|
||||
DeviceDescriptor deviceDescriptor = m_discoveredDevices.value(deviceDescriptorId);
|
||||
|
||||
DevicePlugin *plugin = m_devicePlugins.value(m_supportedDevices.value(deviceClassId).pluginId());
|
||||
if (!plugin) {
|
||||
qWarning() << "Can't find a plugin for this device class";
|
||||
return DeviceErrorPluginNotFound;
|
||||
}
|
||||
|
||||
return plugin->displayPin(pairingTransactionId, deviceDescriptor);
|
||||
}
|
||||
|
||||
return DeviceErrorNoError;
|
||||
|
|
@ -520,7 +526,6 @@ DeviceManager::DeviceError DeviceManager::pairDevice(const PairingTransactionId
|
|||
* Returns \l{DeviceManager::DeviceError}{DeviceError} to inform about the result. */
|
||||
DeviceManager::DeviceError DeviceManager::confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &secret)
|
||||
{
|
||||
Q_UNUSED(secret)
|
||||
if (m_pairingsJustAdd.contains(pairingTransactionId)) {
|
||||
qCWarning(dcDeviceManager) << "this SetupMethod is not implemented yet";
|
||||
m_pairingsJustAdd.remove(pairingTransactionId);
|
||||
|
|
@ -540,7 +545,7 @@ DeviceManager::DeviceError DeviceManager::confirmPairing(const PairingTransactio
|
|||
return DeviceErrorPluginNotFound;
|
||||
}
|
||||
|
||||
DeviceSetupStatus status = plugin->confirmPairing(pairingTransactionId, deviceClassId, deviceDescriptor.params());
|
||||
DeviceSetupStatus status = plugin->confirmPairing(pairingTransactionId, deviceClassId, deviceDescriptor.params(), secret);
|
||||
switch (status) {
|
||||
case DeviceSetupStatusSuccess:
|
||||
m_pairingsDiscovery.remove(pairingTransactionId);
|
||||
|
|
|
|||
|
|
@ -357,13 +357,24 @@ void DevicePlugin::deviceRemoved(Device *device)
|
|||
Q_UNUSED(device)
|
||||
}
|
||||
|
||||
DeviceManager::DeviceError DevicePlugin::displayPin(const PairingTransactionId &pairingTransactionId, const DeviceDescriptor &deviceDescriptor)
|
||||
{
|
||||
Q_UNUSED(pairingTransactionId)
|
||||
Q_UNUSED(deviceDescriptor)
|
||||
|
||||
qWarning() << "Plugin does not implement the display pin setup method.";
|
||||
|
||||
return DeviceManager::DeviceErrorNoError;
|
||||
}
|
||||
|
||||
/*! Confirms the pairing of a \a deviceClassId with the given \a pairingTransactionId and \a params.
|
||||
* Returns \l{DeviceManager::DeviceError}{DeviceError} to inform about the result. */
|
||||
DeviceManager::DeviceSetupStatus DevicePlugin::confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms)
|
||||
DeviceManager::DeviceSetupStatus DevicePlugin::confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret = QString())
|
||||
{
|
||||
Q_UNUSED(pairingTransactionId)
|
||||
Q_UNUSED(deviceClassId)
|
||||
Q_UNUSED(params)
|
||||
Q_UNUSED(secret)
|
||||
|
||||
qCWarning(dcDeviceManager) << "Plugin does not implement pairing.";
|
||||
return DeviceManager::DeviceSetupStatusFailure;
|
||||
|
|
|
|||
|
|
@ -60,7 +60,8 @@ public:
|
|||
virtual void postSetupDevice(Device *device);
|
||||
virtual void deviceRemoved(Device *device);
|
||||
|
||||
virtual DeviceManager::DeviceSetupStatus confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms);
|
||||
virtual DeviceManager::DeviceError displayPin(const PairingTransactionId &pairingTransactionId, const DeviceDescriptor &deviceDescriptor);
|
||||
virtual DeviceManager::DeviceSetupStatus confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret);
|
||||
|
||||
// Hardware input
|
||||
virtual void radioData(const QList<int> &rawData) {Q_UNUSED(rawData)}
|
||||
|
|
|
|||
|
|
@ -103,7 +103,6 @@ DeviceManager::DeviceError DevicePluginLgSmartTv::discoverDevices(const DeviceCl
|
|||
|
||||
DeviceManager::DeviceSetupStatus DevicePluginLgSmartTv::setupDevice(Device *device)
|
||||
{
|
||||
|
||||
device->setName("LG Smart Tv (" + device->paramValue("model").toString() + ")");
|
||||
|
||||
UpnpDeviceDescriptor upnpDeviceDescriptor;
|
||||
|
|
@ -118,7 +117,7 @@ DeviceManager::DeviceSetupStatus DevicePluginLgSmartTv::setupDevice(Device *devi
|
|||
TvDevice *tvDevice = new TvDevice(this, upnpDeviceDescriptor);
|
||||
|
||||
// TODO: make dynamic...displayPin setup!!!
|
||||
tvDevice->setKey("539887");
|
||||
//tvDevice->setKey("539887");
|
||||
|
||||
connect(tvDevice, &TvDevice::pairingFinished, this, &DevicePluginLgSmartTv::pairingFinished);
|
||||
connect(tvDevice, &TvDevice::sendCommandFinished, this, &DevicePluginLgSmartTv::sendingCommandFinished);
|
||||
|
|
@ -132,7 +131,9 @@ DeviceManager::DeviceSetupStatus DevicePluginLgSmartTv::setupDevice(Device *devi
|
|||
|
||||
DeviceManager::HardwareResources DevicePluginLgSmartTv::requiredHardware() const
|
||||
{
|
||||
return DeviceManager::HardwareResourceTimer | DeviceManager::HardwareResourceUpnpDisovery;
|
||||
return DeviceManager::HardwareResourceTimer |
|
||||
DeviceManager::HardwareResourceUpnpDisovery |
|
||||
DeviceManager::HardwareResourceNetworkManager;
|
||||
}
|
||||
|
||||
DeviceManager::DeviceError DevicePluginLgSmartTv::executeAction(Device *device, const Action &action)
|
||||
|
|
@ -191,10 +192,8 @@ void DevicePluginLgSmartTv::upnpDiscoveryFinished(const QList<UpnpDeviceDescript
|
|||
params.append(Param("uuid", upnpDeviceDescriptor.uuid()));
|
||||
params.append(Param("model", upnpDeviceDescriptor.modelName()));
|
||||
params.append(Param("host address", upnpDeviceDescriptor.hostAddress().toString()));
|
||||
params.append(Param("location", upnpDeviceDescriptor.hostAddress().toString()));
|
||||
params.append(Param("port", upnpDeviceDescriptor.port()));
|
||||
params.append(Param("manufacturer", upnpDeviceDescriptor.manufacturer()));
|
||||
params.append(Param("key", "539887"));
|
||||
params.append(Param("key", QString()));
|
||||
descriptor.setParams(params);
|
||||
deviceDescriptors.append(descriptor);
|
||||
}
|
||||
|
|
@ -212,6 +211,43 @@ void DevicePluginLgSmartTv::postSetupDevice(Device *device)
|
|||
tvDevice->setupEventHandler();
|
||||
}
|
||||
|
||||
DeviceManager::DeviceError DevicePluginLgSmartTv::displayPin(const PairingTransactionId &pairingTransactionId, const DeviceDescriptor &deviceDescriptor)
|
||||
{
|
||||
Q_UNUSED(pairingTransactionId)
|
||||
|
||||
QString urlString = "http://" + deviceDescriptor.params().paramValue("host address").toString() + ":" + deviceDescriptor.params().paramValue("port").toString() + "/udap/api/pairing";
|
||||
|
||||
QNetworkRequest request;
|
||||
request.setUrl(QUrl(urlString));
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=utf-8"));
|
||||
request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("UDAP/2.0"));
|
||||
|
||||
QByteArray data = "<?xml version=\"1.0\" encoding=\"utf-8\"?><envelope><api type=\"pairing\"> <name>showKey</name></api></envelope>";
|
||||
|
||||
m_showPinReply = networkManagerPost(request, data);
|
||||
|
||||
return DeviceManager::DeviceErrorNoError;
|
||||
}
|
||||
|
||||
DeviceManager::DeviceSetupStatus DevicePluginLgSmartTv::confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret)
|
||||
{
|
||||
Q_UNUSED(pairingTransactionId)
|
||||
Q_UNUSED(deviceClassId)
|
||||
Q_UNUSED(params)
|
||||
qDebug() << "pair device with pin: " << secret;
|
||||
|
||||
|
||||
|
||||
return DeviceManager::DeviceSetupStatusAsync;
|
||||
}
|
||||
|
||||
void DevicePluginLgSmartTv::networkManagerReplyReady(QNetworkReply *reply)
|
||||
{
|
||||
if (reply == m_showPinReply) {
|
||||
reply->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
void DevicePluginLgSmartTv::deviceRemoved(Device *device)
|
||||
{
|
||||
if (!m_tvList.values().contains(device)) {
|
||||
|
|
|
|||
|
|
@ -44,11 +44,18 @@ public:
|
|||
void upnpNotifyReceived(const QByteArray ¬ifyData);
|
||||
void postSetupDevice(Device *device) override;
|
||||
|
||||
DeviceManager::DeviceError displayPin(const PairingTransactionId &pairingTransactionId, const DeviceDescriptor &deviceDescriptor) override;
|
||||
DeviceManager::DeviceSetupStatus confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret) override;
|
||||
|
||||
void networkManagerReplyReady(QNetworkReply *reply) override;
|
||||
|
||||
void deviceRemoved(Device *device) override;
|
||||
|
||||
void guhTimer() override;
|
||||
|
||||
private:
|
||||
QHash<TvDevice*, Device*> m_tvList;
|
||||
QNetworkReply *m_showPinReply;
|
||||
|
||||
private slots:
|
||||
void pairingFinished(const bool &success);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
"idName": "lgSmartTv",
|
||||
"name": "LG Smart Tv",
|
||||
"createMethods": ["discovery"],
|
||||
"setupMethod": "displayPin",
|
||||
"pairingInfo": "Please enter the pairing key displayed on the Tv.",
|
||||
"paramTypes": [
|
||||
{
|
||||
"name": "name",
|
||||
|
|
@ -18,12 +20,12 @@
|
|||
"inputType": "TextLine"
|
||||
},
|
||||
{
|
||||
"name": "uuid",
|
||||
"name": "model",
|
||||
"type": "QString",
|
||||
"inputType": "TextLine"
|
||||
},
|
||||
{
|
||||
"name": "model",
|
||||
"name": "uuid",
|
||||
"type": "QString",
|
||||
"inputType": "TextLine"
|
||||
},
|
||||
|
|
@ -36,16 +38,6 @@
|
|||
"name": "port",
|
||||
"type": "int"
|
||||
},
|
||||
{
|
||||
"name": "location",
|
||||
"type": "QString",
|
||||
"inputType": "Url"
|
||||
},
|
||||
{
|
||||
"name": "manufacturer",
|
||||
"type": "QString",
|
||||
"inputType": "TextLine"
|
||||
},
|
||||
{
|
||||
"name": "key",
|
||||
"type": "QString",
|
||||
|
|
|
|||
|
|
@ -211,9 +211,19 @@ void DevicePluginPhilipsHue::upnpDiscoveryFinished(const QList<UpnpDeviceDescrip
|
|||
emit devicesDiscovered(hueBridgeDeviceClassId, deviceDescriptors);
|
||||
}
|
||||
|
||||
DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms)
|
||||
DeviceManager::DeviceSetupStatus DevicePluginPhilipsHue::confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret)
|
||||
{
|
||||
if (deviceClassId != hueBridgeDeviceClassId) {
|
||||
Q_UNUSED(deviceClassId)
|
||||
Q_UNUSED(secret)
|
||||
|
||||
Param ipParam;
|
||||
foreach (const Param ¶m, params) {
|
||||
if (param.name() == "ip") {
|
||||
ipParam = param;
|
||||
}
|
||||
}
|
||||
if (!ipParam.isValid()) {
|
||||
qWarning() << "Missing parameter: ip";
|
||||
return DeviceManager::DeviceSetupStatusFailure;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public:
|
|||
void deviceRemoved(Device *device) override;
|
||||
void upnpDiscoveryFinished(const QList<UpnpDeviceDescriptor> &upnpDeviceDescriptorList) override;
|
||||
|
||||
DeviceManager::DeviceSetupStatus confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms) override;
|
||||
DeviceManager::DeviceSetupStatus confirmPairing(const PairingTransactionId &pairingTransactionId, const DeviceClassId &deviceClassId, const ParamList ¶ms, const QString &secret) override;
|
||||
|
||||
void networkManagerReplyReady(QNetworkReply *reply) override;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue