/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of guh. *
* *
* Guh is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, version 2 of the License. *
* *
* Guh 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 General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with guh. If not, see . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "devicepluginlircd.h"
#include "plugin/device.h"
#include "devicemanager.h"
#include "lircdclient.h"
#include
#include
DeviceClassId lircdDeviceClassId = DeviceClassId("5c2bc4cd-ba6c-4052-b6cd-1db83323ea22");
EventTypeId LircKeypressEventTypeId = EventTypeId("8711471a-fa0e-410b-b174-dfc3d2aeffb1");
DevicePluginLircd::DevicePluginLircd()
{
m_lircClient = new LircClient(this);
m_lircClient->connect();
connect(m_lircClient, &LircClient::buttonPressed, this, &DevicePluginLircd::buttonPressed);
}
//QList DevicePluginLircd::supportedDevices() const
//{
// QList ret;
// DeviceClass deviceClassLircd(pluginId(), supportedVendors().first().id(), lircdDeviceClassId);
// deviceClassLircd.setName("IR Receiver");
// QList params;
// ParamType remoteNameParam("remoteName", QVariant::String);
// params.append(remoteNameParam);
// deviceClassLircd.setParamTypes(params);
// // TODO: find a way to load this stuff from a json file, really!
// // Ideally that file can be generated from /usr/share/lirc/remotes/*
// // Note that the IDs need to be kept static!
// QList repeatParam;
// ParamType repeatParamMap("repeat", QVariant::Int);
// repeatParam.append(repeatParamMap);
// QList events;
// EventType powerButton(EventTypeId("d62d779f-e5c6-4767-98e6-efe9c062b662"));
// powerButton.setName("Power");
// powerButton.setParameters(repeatParam);
// events.append(powerButton);
// EventType yellowButton(EventTypeId("3313f62e-ea20-47f5-85af-28897d6ac440"));
// yellowButton.setName("Yellow");
// yellowButton.setParameters(repeatParam);
// events.append(yellowButton);
// EventType blueButton(EventTypeId("9a395d93-e482-4fa2-b4bc-e60bb4bf8652"));
// blueButton.setName("Blue");
// blueButton.setParameters(repeatParam);
// events.append(blueButton);
// EventType greenButton(EventTypeId("e8aaf18e-dc11-40da-980d-4eec42c58267"));
// greenButton.setName("Green");
// greenButton.setParameters(repeatParam);
// events.append(greenButton);
// EventType redButton(EventTypeId("b8518755-55a0-4cd4-8856-1680848edcb7"));
// redButton.setName("Red");
// redButton.setParameters(repeatParam);
// events.append(redButton);
// deviceClassLircd.setEventTypes(events);
// ret.append(deviceClassLircd);
// return ret;
//}
DeviceManager::HardwareResources DevicePluginLircd::requiredHardware() const
{
return DeviceManager::HardwareResourceNone;
}
void DevicePluginLircd::buttonPressed(const QString &remoteName, const QString &buttonName, int repeat)
{
Device *remote = nullptr;
QList configuredRemotes = deviceManager()->findConfiguredDevices(lircdDeviceClassId);
foreach (Device *device, configuredRemotes) {
if (device->paramValue("remoteName").toString() == remoteName) {
remote = device;
break;
}
}
if (!remote) {
qDebug() << "Unhandled remote" << remoteName << buttonName;
return;
}
qDebug() << "found remote" << remoteName << supportedDevices().first().eventTypes().count();
foreach (const EventType &eventType, supportedDevices().first().eventTypes()) {
if (eventType.name() == buttonName) {
ParamList params;
Param param("repeat", repeat);
params.append(param);
Event event(eventType.id(), remote->id(), params);
emitEvent(event);
}
}
}
//QVariantMap DevicePluginLircd::configuration() const
//{
// return m_config;
//}
//void DevicePluginLircd::setConfiguration(const QVariantMap &configuration)
//{
// m_config = configuration;
//}