add displayPin setupMethod
This commit is contained in:
parent
edb95e36fd
commit
ee41ef5cfa
@ -508,9 +508,15 @@ DeviceManager::DeviceError DeviceManager::pairDevice(const PairingTransactionId
|
|||||||
m_pairingsDiscovery.insert(pairingTransactionId, qMakePair<DeviceClassId, DeviceDescriptorId>(deviceClassId, deviceDescriptorId));
|
m_pairingsDiscovery.insert(pairingTransactionId, qMakePair<DeviceClassId, DeviceDescriptorId>(deviceClassId, deviceDescriptorId));
|
||||||
|
|
||||||
if (deviceClass.setupMethod() == DeviceClass::SetupMethodDisplayPin) {
|
if (deviceClass.setupMethod() == DeviceClass::SetupMethodDisplayPin) {
|
||||||
// TODO: fetch PIN from device plugin
|
DeviceDescriptor deviceDescriptor = m_discoveredDevices.value(deviceDescriptorId);
|
||||||
qCWarning(dcDeviceManager) << "SetupMethodDisplayPin not implemented yet";
|
|
||||||
return DeviceErrorSetupFailed;
|
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;
|
return DeviceErrorNoError;
|
||||||
@ -520,7 +526,6 @@ DeviceManager::DeviceError DeviceManager::pairDevice(const PairingTransactionId
|
|||||||
* Returns \l{DeviceManager::DeviceError}{DeviceError} to inform about the result. */
|
* Returns \l{DeviceManager::DeviceError}{DeviceError} to inform about the result. */
|
||||||
DeviceManager::DeviceError DeviceManager::confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &secret)
|
DeviceManager::DeviceError DeviceManager::confirmPairing(const PairingTransactionId &pairingTransactionId, const QString &secret)
|
||||||
{
|
{
|
||||||
Q_UNUSED(secret)
|
|
||||||
if (m_pairingsJustAdd.contains(pairingTransactionId)) {
|
if (m_pairingsJustAdd.contains(pairingTransactionId)) {
|
||||||
qCWarning(dcDeviceManager) << "this SetupMethod is not implemented yet";
|
qCWarning(dcDeviceManager) << "this SetupMethod is not implemented yet";
|
||||||
m_pairingsJustAdd.remove(pairingTransactionId);
|
m_pairingsJustAdd.remove(pairingTransactionId);
|
||||||
@ -540,7 +545,7 @@ DeviceManager::DeviceError DeviceManager::confirmPairing(const PairingTransactio
|
|||||||
return DeviceErrorPluginNotFound;
|
return DeviceErrorPluginNotFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceSetupStatus status = plugin->confirmPairing(pairingTransactionId, deviceClassId, deviceDescriptor.params());
|
DeviceSetupStatus status = plugin->confirmPairing(pairingTransactionId, deviceClassId, deviceDescriptor.params(), secret);
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case DeviceSetupStatusSuccess:
|
case DeviceSetupStatusSuccess:
|
||||||
m_pairingsDiscovery.remove(pairingTransactionId);
|
m_pairingsDiscovery.remove(pairingTransactionId);
|
||||||
|
|||||||
@ -357,13 +357,24 @@ void DevicePlugin::deviceRemoved(Device *device)
|
|||||||
Q_UNUSED(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.
|
/*! 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. */
|
* 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(pairingTransactionId)
|
||||||
Q_UNUSED(deviceClassId)
|
Q_UNUSED(deviceClassId)
|
||||||
Q_UNUSED(params)
|
Q_UNUSED(params)
|
||||||
|
Q_UNUSED(secret)
|
||||||
|
|
||||||
qCWarning(dcDeviceManager) << "Plugin does not implement pairing.";
|
qCWarning(dcDeviceManager) << "Plugin does not implement pairing.";
|
||||||
return DeviceManager::DeviceSetupStatusFailure;
|
return DeviceManager::DeviceSetupStatusFailure;
|
||||||
|
|||||||
@ -60,7 +60,8 @@ public:
|
|||||||
virtual void postSetupDevice(Device *device);
|
virtual void postSetupDevice(Device *device);
|
||||||
virtual void deviceRemoved(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
|
// Hardware input
|
||||||
virtual void radioData(const QList<int> &rawData) {Q_UNUSED(rawData)}
|
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)
|
DeviceManager::DeviceSetupStatus DevicePluginLgSmartTv::setupDevice(Device *device)
|
||||||
{
|
{
|
||||||
|
|
||||||
device->setName("LG Smart Tv (" + device->paramValue("model").toString() + ")");
|
device->setName("LG Smart Tv (" + device->paramValue("model").toString() + ")");
|
||||||
|
|
||||||
UpnpDeviceDescriptor upnpDeviceDescriptor;
|
UpnpDeviceDescriptor upnpDeviceDescriptor;
|
||||||
@ -118,7 +117,7 @@ DeviceManager::DeviceSetupStatus DevicePluginLgSmartTv::setupDevice(Device *devi
|
|||||||
TvDevice *tvDevice = new TvDevice(this, upnpDeviceDescriptor);
|
TvDevice *tvDevice = new TvDevice(this, upnpDeviceDescriptor);
|
||||||
|
|
||||||
// TODO: make dynamic...displayPin setup!!!
|
// TODO: make dynamic...displayPin setup!!!
|
||||||
tvDevice->setKey("539887");
|
//tvDevice->setKey("539887");
|
||||||
|
|
||||||
connect(tvDevice, &TvDevice::pairingFinished, this, &DevicePluginLgSmartTv::pairingFinished);
|
connect(tvDevice, &TvDevice::pairingFinished, this, &DevicePluginLgSmartTv::pairingFinished);
|
||||||
connect(tvDevice, &TvDevice::sendCommandFinished, this, &DevicePluginLgSmartTv::sendingCommandFinished);
|
connect(tvDevice, &TvDevice::sendCommandFinished, this, &DevicePluginLgSmartTv::sendingCommandFinished);
|
||||||
@ -132,7 +131,9 @@ DeviceManager::DeviceSetupStatus DevicePluginLgSmartTv::setupDevice(Device *devi
|
|||||||
|
|
||||||
DeviceManager::HardwareResources DevicePluginLgSmartTv::requiredHardware() const
|
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)
|
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("uuid", upnpDeviceDescriptor.uuid()));
|
||||||
params.append(Param("model", upnpDeviceDescriptor.modelName()));
|
params.append(Param("model", upnpDeviceDescriptor.modelName()));
|
||||||
params.append(Param("host address", upnpDeviceDescriptor.hostAddress().toString()));
|
params.append(Param("host address", upnpDeviceDescriptor.hostAddress().toString()));
|
||||||
params.append(Param("location", upnpDeviceDescriptor.hostAddress().toString()));
|
|
||||||
params.append(Param("port", upnpDeviceDescriptor.port()));
|
params.append(Param("port", upnpDeviceDescriptor.port()));
|
||||||
params.append(Param("manufacturer", upnpDeviceDescriptor.manufacturer()));
|
params.append(Param("key", QString()));
|
||||||
params.append(Param("key", "539887"));
|
|
||||||
descriptor.setParams(params);
|
descriptor.setParams(params);
|
||||||
deviceDescriptors.append(descriptor);
|
deviceDescriptors.append(descriptor);
|
||||||
}
|
}
|
||||||
@ -212,6 +211,43 @@ void DevicePluginLgSmartTv::postSetupDevice(Device *device)
|
|||||||
tvDevice->setupEventHandler();
|
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)
|
void DevicePluginLgSmartTv::deviceRemoved(Device *device)
|
||||||
{
|
{
|
||||||
if (!m_tvList.values().contains(device)) {
|
if (!m_tvList.values().contains(device)) {
|
||||||
|
|||||||
@ -44,11 +44,18 @@ public:
|
|||||||
void upnpNotifyReceived(const QByteArray ¬ifyData);
|
void upnpNotifyReceived(const QByteArray ¬ifyData);
|
||||||
void postSetupDevice(Device *device) override;
|
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 deviceRemoved(Device *device) override;
|
||||||
|
|
||||||
void guhTimer() override;
|
void guhTimer() override;
|
||||||
|
|
||||||
|
private:
|
||||||
QHash<TvDevice*, Device*> m_tvList;
|
QHash<TvDevice*, Device*> m_tvList;
|
||||||
|
QNetworkReply *m_showPinReply;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void pairingFinished(const bool &success);
|
void pairingFinished(const bool &success);
|
||||||
|
|||||||
@ -11,6 +11,8 @@
|
|||||||
"idName": "lgSmartTv",
|
"idName": "lgSmartTv",
|
||||||
"name": "LG Smart Tv",
|
"name": "LG Smart Tv",
|
||||||
"createMethods": ["discovery"],
|
"createMethods": ["discovery"],
|
||||||
|
"setupMethod": "displayPin",
|
||||||
|
"pairingInfo": "Please enter the pairing key displayed on the Tv.",
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
{
|
{
|
||||||
"name": "name",
|
"name": "name",
|
||||||
@ -18,12 +20,12 @@
|
|||||||
"inputType": "TextLine"
|
"inputType": "TextLine"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "uuid",
|
"name": "model",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
"inputType": "TextLine"
|
"inputType": "TextLine"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "model",
|
"name": "uuid",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
"inputType": "TextLine"
|
"inputType": "TextLine"
|
||||||
},
|
},
|
||||||
@ -36,16 +38,6 @@
|
|||||||
"name": "port",
|
"name": "port",
|
||||||
"type": "int"
|
"type": "int"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "location",
|
|
||||||
"type": "QString",
|
|
||||||
"inputType": "Url"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "manufacturer",
|
|
||||||
"type": "QString",
|
|
||||||
"inputType": "TextLine"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "key",
|
"name": "key",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
|
|||||||
@ -211,9 +211,19 @@ void DevicePluginPhilipsHue::upnpDiscoveryFinished(const QList<UpnpDeviceDescrip
|
|||||||
emit devicesDiscovered(hueBridgeDeviceClassId, deviceDescriptors);
|
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;
|
return DeviceManager::DeviceSetupStatusFailure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -44,7 +44,7 @@ public:
|
|||||||
void deviceRemoved(Device *device) override;
|
void deviceRemoved(Device *device) override;
|
||||||
void upnpDiscoveryFinished(const QList<UpnpDeviceDescriptor> &upnpDeviceDescriptorList) 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;
|
void networkManagerReplyReady(QNetworkReply *reply) override;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user