diff --git a/debian/guh-plugins-maker.install b/debian/guh-plugins-maker.install index d05c9b97..8d199fee 100644 --- a/debian/guh-plugins-maker.install +++ b/debian/guh-plugins-maker.install @@ -2,3 +2,4 @@ usr/lib/guh/plugins/libguh_devicepluginlircd.so usr/lib/guh/plugins/libguh_deviceplugincommandlauncher.so usr/lib/guh/plugins/libguh_devicepluginudpcommander.so usr/lib/guh/plugins/libguh_devicepluginavahimonitor.so +usr/lib/guh/plugins/libguh_deviceplugingpio.so diff --git a/doc/images/Raspberry-Pi-2-GPIO.png b/doc/images/Raspberry-Pi-2-GPIO.png new file mode 100644 index 00000000..cedc3aae Binary files /dev/null and b/doc/images/Raspberry-Pi-2-GPIO.png differ diff --git a/libguh/hardware/gpio.cpp b/libguh/hardware/gpio.cpp index a9216550..d3dbe8bd 100644 --- a/libguh/hardware/gpio.cpp +++ b/libguh/hardware/gpio.cpp @@ -161,7 +161,7 @@ int Gpio::gpioNumber() const /*! Returns true if the directories \tt {/sys/class/gpio} and \tt {/sys/class/gpio/export} do exist. */ bool Gpio::isAvailable() { - return QDir("/sys/class/gpio").exists() && QDir("/sys/class/gpio/export").exists(); + return QFile("/sys/class/gpio/export").exists(); } /*! Returns true if this \l{Gpio} could be exported in the system file \tt {/sys/class/gpio/export}. If this Gpio is already exported, this function will return true. */ diff --git a/plugins/deviceplugins/deviceplugins.pro b/plugins/deviceplugins/deviceplugins.pro index afd292fd..4a64ca96 100644 --- a/plugins/deviceplugins/deviceplugins.pro +++ b/plugins/deviceplugins/deviceplugins.pro @@ -28,4 +28,5 @@ SUBDIRS += elro \ denon \ avahimonitor \ senic \ + gpio \ diff --git a/plugins/deviceplugins/gpio/deviceplugingpio.cpp b/plugins/deviceplugins/gpio/deviceplugingpio.cpp new file mode 100644 index 00000000..2e5f36d9 --- /dev/null +++ b/plugins/deviceplugins/gpio/deviceplugingpio.cpp @@ -0,0 +1,287 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2016 Simon Stürz * + * * + * 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 . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*! + \page gpioplugin.html + \title GPIO Plugin + \brief Plugin to controll gpios on different boards. + + \ingroup plugins + \ingroup guh-plugins-maker + + \chapter Raspberry Pi 2 + + \image Raspberry-Pi-2-GPIO.png "Raspberry Pi 2 GPIOs" + + \chapter Plugin properties + Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} + and \l{Vendor}{Vendors} of this \l{DevicePlugin}. + + For more details how to read this JSON file please check out the documentation for \l{The plugin JSON File}. + + \quotefile plugins/deviceplugins/gpio/deviceplugingpio.json +*/ + + +#include "deviceplugingpio.h" +#include "types/param.h" +#include "plugin/device.h" +#include "devicemanager.h" +#include "plugininfo.h" + +DevicePluginGpio::DevicePluginGpio() +{ + +} + +DeviceManager::DeviceSetupStatus DevicePluginGpio::setupDevice(Device *device) +{ + qCDebug(dcGpioController()) << "Setup" << device->name() << device->params(); + + // Check if GPIOs are available on this platform + if (!Gpio::isAvailable()) { + qCWarning(dcGpioController()) << "There are ou GPIOs on this plattform"; + return DeviceManager::DeviceSetupStatusFailure; + } + + // GPIO Switch + if (device->deviceClassId() == gpioSwitchDeviceClassId) { + // Create and configure gpio + Gpio *gpio = new Gpio(device->paramValue(gpioParamTypeId).toInt(), this); + + if (!gpio->exportGpio()) { + qCWarning(dcGpioController()) << "Could not export gpio for device" << device->name(); + return DeviceManager::DeviceSetupStatusFailure; + } + + if (!gpio->setDirection(Gpio::DirectionOutput)) { + qCWarning(dcGpioController()) << "Could not configure output gpio for device" << device->name(); + return DeviceManager::DeviceSetupStatusFailure; + } + + if (!gpio->setValue(Gpio::ValueLow)) { + qCWarning(dcGpioController()) << "Could not set gpio value for device" << device->name(); + return DeviceManager::DeviceSetupStatusFailure; + } + + m_gpioDevices.insert(gpio, device); + m_raspberryPiGpios.insert(gpio->gpioNumber(), gpio); + return DeviceManager::DeviceSetupStatusSuccess; + } + + if (device->deviceClassId() == gpioSwitchDeviceClassId) { + GpioMonitor *monior = new GpioMonitor(device->paramValue(gpioParamTypeId).toInt(), this); + if (!monior->enable()) { + qCWarning(dcGpioController()) << "Could not enable gpio monitor for device" << device->name(); + return DeviceManager::DeviceSetupStatusFailure; + } + + connect(monior, &GpioMonitor::valueChanged, this, &DevicePluginGpio::onGpioValueChanged); + + m_monitorDevices.insert(monior, device); + m_raspberryPiGpioMoniors.insert(monior->gpio()->gpioNumber(), monior); + return DeviceManager::DeviceSetupStatusSuccess; + } + + return DeviceManager::DeviceSetupStatusSuccess; +} + +DeviceManager::DeviceError DevicePluginGpio::discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) +{ + Q_UNUSED(params) + + // Check if GPIOs are available on this platform + if (!Gpio::isAvailable()) { + qCWarning(dcGpioController()) << "There are ou GPIOs on this plattform"; + return DeviceManager::DeviceErrorHardwareNotAvailable; + } + + // Check which board / gpio configuration + const DeviceClass deviceClass = deviceManager()->findDeviceClass(deviceClassId); + if (deviceClass.vendorId() == raspberryPiVendorId) { + + // Create the list of available gpios + QList deviceDescriptors; + + QList gpioDescriptors = raspberryPiGpioDescriptors(); + for (int i = 0; i < gpioDescriptors.count(); i++) { + const GpioDescriptor gpioDescriptor = gpioDescriptors.at(i); + + // Offer only gpios which arn't in use already + if (m_raspberryPiGpios.keys().contains(gpioDescriptor.gpio())) + continue; + + if (m_raspberryPiGpioMoniors.keys().contains(gpioDescriptor.gpio())) + continue; + + QString description; + if (gpioDescriptor.description().isEmpty()) { + description = QString("Pin %1").arg(gpioDescriptor.pin()); + } else { + description = QString("Pin %1 | %2").arg(gpioDescriptor.pin()).arg(gpioDescriptor.description()); + } + + DeviceDescriptor descriptor(deviceClassId, QString("GPIO %1").arg(gpioDescriptor.gpio()), description); + ParamList parameters; + parameters.append(Param(gpioParamTypeId, gpioDescriptor.gpio())); + parameters.append(Param(pinParamTypeId, gpioDescriptor.pin())); + parameters.append(Param(descriptionParamTypeId, gpioDescriptor.description())); + descriptor.setParams(parameters); + + deviceDescriptors.append(descriptor); + } + + emit devicesDiscovered(deviceClassId, deviceDescriptors); + } + + return DeviceManager::DeviceErrorAsync; +} + +DeviceManager::HardwareResources DevicePluginGpio::requiredHardware() const +{ + return DeviceManager::HardwareResourceNone; +} + +void DevicePluginGpio::deviceRemoved(Device *device) +{ + if (m_gpioDevices.values().contains(device)) { + Gpio *gpio = m_gpioDevices.key(device); + if (!gpio) + return; + + m_gpioDevices.remove(gpio); + + if (m_raspberryPiGpios.values().contains(gpio)) + m_raspberryPiGpios.remove(gpio->gpioNumber()); + + delete gpio; + } + + if (m_monitorDevices.values().contains(device)) { + GpioMonitor *monitor = m_monitorDevices.key(device); + if (!monitor) + return; + + m_monitorDevices.remove(monitor); + + if (m_raspberryPiGpioMoniors.values().contains(monitor)) + m_raspberryPiGpios.remove(monitor->gpio()->gpioNumber()); + + delete monitor; + } + +} + +DeviceManager::DeviceError DevicePluginGpio::executeAction(Device *device, const Action &action) +{ + // Get the gpio + const DeviceClass deviceClass = deviceManager()->findDeviceClass(device->deviceClassId()); + Gpio *gpio = Q_NULLPTR; + // Find the gpio in the corresponding hash + if (deviceClass.vendorId() == raspberryPiVendorId) + gpio = m_raspberryPiGpios.value(device->paramValue(gpioParamTypeId).toInt()); + + // Check if gpio was found + if (!gpio) { + qCWarning(dcGpioController()) << "Could not find gpio for executing action on" << device->name(); + return DeviceManager::DeviceErrorHardwareNotAvailable; + } + + // GPIO Switch power action + if (device->deviceClassId() == gpioSwitchDeviceClassId && action.actionTypeId() == powerValueActionTypeId) { + bool success = false; + if (action.param(powerValueStateParamTypeId).value().toBool()) { + success = gpio->setValue(Gpio::ValueHigh); + } else { + success = gpio->setValue(Gpio::ValueLow); + } + + if (!success) { + qCWarning(dcGpioController()) << "Could not set gpio value while execute action on" << device->name(); + return DeviceManager::DeviceErrorHardwareFailure; + } + + return DeviceManager::DeviceErrorNoError; + } + + return DeviceManager::DeviceErrorNoError; +} + +void DevicePluginGpio::postSetupDevice(Device *device) +{ + if (device->deviceClassId() == gpioSwitchDeviceClassId) { + Gpio *gpio = m_gpioDevices.key(device); + device->setStateValue(powerValueStateTypeId, (bool)gpio->value()); + } + + if (device->deviceClassId() == gpioButtonDeviceClassId) { + GpioMonitor *monitor = m_monitorDevices.key(device); + device->setStateValue(pressedStateTypeId, monitor->value()); + } +} + +QList DevicePluginGpio::raspberryPiGpioDescriptors() +{ + // Note: http://www.raspberrypi-spy.co.uk/wp-content/uploads/2012/06/Raspberry-Pi-GPIO-Layout-Model-B-Plus-rotated-2700x900.png + QList gpioDescriptors; + gpioDescriptors << GpioDescriptor(2, 3, "SDA1_I2C"); + gpioDescriptors << GpioDescriptor(3, 5, "SCL1_I2C"); + gpioDescriptors << GpioDescriptor(4, 7); + gpioDescriptors << GpioDescriptor(5, 29); + gpioDescriptors << GpioDescriptor(6, 31); + gpioDescriptors << GpioDescriptor(7, 26, "SPI0_CE1_N"); + gpioDescriptors << GpioDescriptor(8, 24, "SPI0_CE0_N"); + gpioDescriptors << GpioDescriptor(9, 21, "SPI0_MISO"); + gpioDescriptors << GpioDescriptor(10, 19, "SPI0_MOSI"); + gpioDescriptors << GpioDescriptor(11, 23, "SPI0_SCLK"); + gpioDescriptors << GpioDescriptor(12, 32); + gpioDescriptors << GpioDescriptor(13, 33); + gpioDescriptors << GpioDescriptor(14, 8, "UART0_TXD"); + gpioDescriptors << GpioDescriptor(15, 10, "UART0_RXD"); + gpioDescriptors << GpioDescriptor(16, 36); + gpioDescriptors << GpioDescriptor(17, 11); + gpioDescriptors << GpioDescriptor(18, 12, "PCM_CLK"); + gpioDescriptors << GpioDescriptor(19, 35); + gpioDescriptors << GpioDescriptor(20, 38); + gpioDescriptors << GpioDescriptor(21, 40); + gpioDescriptors << GpioDescriptor(22, 15); + gpioDescriptors << GpioDescriptor(23, 16); + gpioDescriptors << GpioDescriptor(24, 18); + gpioDescriptors << GpioDescriptor(25, 22); + gpioDescriptors << GpioDescriptor(26, 37); + gpioDescriptors << GpioDescriptor(27, 13); + return gpioDescriptors; +} + +void DevicePluginGpio::onGpioValueChanged(const bool &value) +{ + GpioMonitor *monitor = static_cast(sender()); + + // Get device and set state value + if (m_raspberryPiGpioMoniors.values().contains(monitor)) { + Device *device = m_monitorDevices.value(monitor); + if (!device) + return; + + device->setStateValue(pressedStateTypeId, value); + } + +} + diff --git a/plugins/deviceplugins/gpio/deviceplugingpio.h b/plugins/deviceplugins/gpio/deviceplugingpio.h new file mode 100644 index 00000000..8ba29d67 --- /dev/null +++ b/plugins/deviceplugins/gpio/deviceplugingpio.h @@ -0,0 +1,63 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2016 Simon Stürz * + * * + * 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 . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef DEVICEPLUGINGPIO_H +#define DEVICEPLUGINGPIO_H + +#include "hardware/gpio.h" +#include "hardware/gpiomonitor.h" +#include "gpiodescriptor.h" +#include "hardware/gpiomonitor.h" +#include "plugin/deviceplugin.h" + +class DevicePluginGpio : public DevicePlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "deviceplugingpio.json") + Q_INTERFACES(DevicePlugin) + +public: + explicit DevicePluginGpio(); + ~DevicePluginGpio(); + + DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const ParamList ¶ms) override; + DeviceManager::HardwareResources requiredHardware() const override; + void deviceRemoved(Device *device) override; + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; + + void postSetupDevice(Device *device); + +private: + QHash m_gpioDevices; + QHash m_raspberryPiGpios; + + QHash m_monitorDevices; + QHash m_raspberryPiGpioMoniors; + + QList raspberryPiGpioDescriptors(); + +private slots: + void onGpioValueChanged(const bool &value); + +}; + +#endif // DEVICEPLUGINGPIO_H diff --git a/plugins/deviceplugins/gpio/deviceplugingpio.json b/plugins/deviceplugins/gpio/deviceplugingpio.json new file mode 100644 index 00000000..2ad45784 --- /dev/null +++ b/plugins/deviceplugins/gpio/deviceplugingpio.json @@ -0,0 +1,112 @@ +{ + "name": "Gpio Controller", + "idName": "GpioController", + "id": "127ead55-996a-44ac-ba82-fc3c634e018a", + "vendors": [ + { + "name": "Raspberry Pi 2", + "idName": "raspberryPi", + "id": "f0d00b66-bbd8-4a07-8591-ea48a61b229e", + "deviceClasses": [ + { + "id": "3885c520-e202-4435-88f6-3c35c362b2e6", + "name": "GPIO Switch", + "idName": "gpioSwitch", + "deviceIcon": "Switch", + "basicTags": [ + "Device", + "Actuator" + ], + "createMethods": ["discovery"], + "paramTypes": [ + { + "id": "9eda783f-6d9f-4d39-986d-d2cbfff5a7dd", + "idName": "gpio", + "name": "GPIO", + "type": "int", + "index": 0, + "defaultValue": -1 + }, + { + "id": "2204d278-7bc7-407f-ac82-ce3ae1d5779c", + "idName": "pin", + "name": "Pin number", + "type": "int", + "index": 1, + "defaultValue": -1 + }, + { + "id": "504798eb-1faa-4703-a57a-2778e4bf9a67", + "idName": "description", + "name": "Description", + "type": "QString", + "index": 2, + "defaultValue": "-" + } + ], + "stateTypes": [ + { + "id": "06843766-358e-44b0-8d52-2b46ef98459a", + "idName": "powerValue", + "name": "Power", + "index": 0, + "type": "bool", + "defaultValue": false, + "writable": true, + "eventTypeName": "Power changed", + "actionTypeName": "Set power" + } + ] + }, + { + "id": "6aff228b-0410-4ef9-9593-51e8639aacea", + "name": "GPIO Button", + "idName": "gpioButton", + "deviceIcon": "Power", + "basicTags": [ + "Device", + "Sensor" + ], + "createMethods": ["discovery"], + "paramTypes": [ + { + "id": "9eda783f-6d9f-4d39-986d-d2cbfff5a7dd", + "idName": "gpio", + "name": "GPIO", + "type": "int", + "index": 0, + "defaultValue": -1 + }, + { + "id": "2204d278-7bc7-407f-ac82-ce3ae1d5779c", + "idName": "pin", + "name": "Pin number", + "type": "int", + "index": 1, + "defaultValue": -1 + }, + { + "id": "504798eb-1faa-4703-a57a-2778e4bf9a67", + "idName": "description", + "name": "Description", + "type": "QString", + "index": 2, + "defaultValue": "-" + } + ], + "stateTypes": [ + { + "id": "57f1b7cc-26c8-434b-ba04-d3077dc886c8", + "idName": "pressed", + "name": "Pressed", + "index": 0, + "type": "bool", + "defaultValue": false, + "eventTypeName": "Pressed changed" + } + ] + } + ] + } + ] +} diff --git a/plugins/deviceplugins/gpio/gpio.pro b/plugins/deviceplugins/gpio/gpio.pro new file mode 100644 index 00000000..71eb0c5a --- /dev/null +++ b/plugins/deviceplugins/gpio/gpio.pro @@ -0,0 +1,17 @@ +TRANSLATIONS = translations/en_US.ts \ + translations/de_DE.ts + +# Note: include after the TRANSLATIONS definition +include(../../plugins.pri) + +TARGET = $$qtLibraryTarget(guh_deviceplugingpio) + +SOURCES += \ + deviceplugingpio.cpp \ + gpiodescriptor.cpp + +HEADERS += \ + deviceplugingpio.h \ + gpiodescriptor.h + + diff --git a/plugins/deviceplugins/gpio/gpiodescriptor.cpp b/plugins/deviceplugins/gpio/gpiodescriptor.cpp new file mode 100644 index 00000000..b806797f --- /dev/null +++ b/plugins/deviceplugins/gpio/gpiodescriptor.cpp @@ -0,0 +1,44 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2016 Simon Stürz * + * * + * 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 "gpiodescriptor.h" + +GpioDescriptor::GpioDescriptor(const int &gpio, const int &pin, const QString &description): + m_gpio(gpio), + m_pin(pin), + m_description(description) +{ + +} + +int GpioDescriptor::gpio() const +{ + return m_gpio; +} + +int GpioDescriptor::pin() const +{ + return m_pin; +} + +QString GpioDescriptor::description() const +{ + return m_description; +} diff --git a/plugins/deviceplugins/gpio/gpiodescriptor.h b/plugins/deviceplugins/gpio/gpiodescriptor.h new file mode 100644 index 00000000..73b3b36c --- /dev/null +++ b/plugins/deviceplugins/gpio/gpiodescriptor.h @@ -0,0 +1,41 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2016 Simon Stürz * + * * + * 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 . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef GPIODESCRIPTOR_H +#define GPIODESCRIPTOR_H + +#include + +class GpioDescriptor +{ +public: + GpioDescriptor(const int &gpio, const int &pin, const QString &description = QString()); + + int gpio() const; + int pin() const; + QString description() const; + +private: + int m_gpio; + int m_pin; + QString m_description; +}; + +#endif // GPIODESCRIPTOR_H diff --git a/plugins/deviceplugins/gpio/translations/de_DE.ts b/plugins/deviceplugins/gpio/translations/de_DE.ts new file mode 100644 index 00000000..a1967f1c --- /dev/null +++ b/plugins/deviceplugins/gpio/translations/de_DE.ts @@ -0,0 +1,79 @@ + + + + + GpioController + + + Gpio Controller + The name of the plugin Gpio Controller (127ead55-996a-44ac-ba82-fc3c634e018a) + + + + + Raspberry Pi 2 + The name of the vendor (f0d00b66-bbd8-4a07-8591-ea48a61b229e) + + + + + GPIO Switch + The name of the DeviceClass (3885c520-e202-4435-88f6-3c35c362b2e6) + + + + + GPIO + The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of GPIO Switch + + + + + Pin number + The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of GPIO Switch + + + + + Description + The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of GPIO Switch + + + + + Power changed + The name of the autocreated EventType (06843766-358e-44b0-8d52-2b46ef98459a) + + + + + Power + The name of the ParamType of StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass GPIO Switch + + + + + Set power + The name of the autocreated ActionType (06843766-358e-44b0-8d52-2b46ef98459a) + + + + + GPIO Button + The name of the DeviceClass (6aff228b-0410-4ef9-9593-51e8639aacea) + + + + + Pressed changed + The name of the autocreated EventType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) + + + + + Pressed + The name of the ParamType of StateType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass GPIO Button + + + + diff --git a/plugins/deviceplugins/gpio/translations/en_US.ts b/plugins/deviceplugins/gpio/translations/en_US.ts new file mode 100644 index 00000000..eb9546e0 --- /dev/null +++ b/plugins/deviceplugins/gpio/translations/en_US.ts @@ -0,0 +1,79 @@ + + + + + GpioController + + + Gpio Controller + The name of the plugin Gpio Controller (127ead55-996a-44ac-ba82-fc3c634e018a) + + + + + Raspberry Pi 2 + The name of the vendor (f0d00b66-bbd8-4a07-8591-ea48a61b229e) + + + + + GPIO Switch + The name of the DeviceClass (3885c520-e202-4435-88f6-3c35c362b2e6) + + + + + GPIO + The name of the paramType (9eda783f-6d9f-4d39-986d-d2cbfff5a7dd) of GPIO Switch + + + + + Pin number + The name of the paramType (2204d278-7bc7-407f-ac82-ce3ae1d5779c) of GPIO Switch + + + + + Description + The name of the paramType (504798eb-1faa-4703-a57a-2778e4bf9a67) of GPIO Switch + + + + + Power changed + The name of the autocreated EventType (06843766-358e-44b0-8d52-2b46ef98459a) + + + + + Power + The name of the ParamType of StateType (06843766-358e-44b0-8d52-2b46ef98459a) of DeviceClass GPIO Switch + + + + + Set power + The name of the autocreated ActionType (06843766-358e-44b0-8d52-2b46ef98459a) + + + + + GPIO Button + The name of the DeviceClass (6aff228b-0410-4ef9-9593-51e8639aacea) + + + + + Pressed changed + The name of the autocreated EventType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) + + + + + Pressed + The name of the ParamType of StateType (57f1b7cc-26c8-434b-ba04-d3077dc886c8) of DeviceClass GPIO Button + + + +