void DevicePluginWifiDetector::processFinished(int exitCode, QProcess::ExitStatus exitStatus) { QProcess *p = static_cast<QProcess*>(sender()); p->deleteLater(); if (exitCode != 0 || exitStatus != QProcess::NormalExit) { qCWarning(dcWifiDetector) << "error performing network scan:" << p->readAllStandardError(); return; } QList<Device*> watchedDevices = deviceManager()->findConfiguredDevices(supportedDevices().first().id()); if (watchedDevices.isEmpty()) { return; } QStringList foundDevices; while(p->canReadLine()) { QString result = QString::fromLatin1(p->readLine()); if (result.startsWith("MAC Address:")) { QStringList lineParts = result.split(' '); if (lineParts.count() > 3) { QString addr = lineParts.at(2); foundDevices << addr.toLower(); } } } foreach (Device *device, watchedDevices) { bool wasInRange = device->stateValue(inRangeStateTypeId).toBool(); bool wasFound = foundDevices.contains(device->paramValue("mac").toString().toLower()); if (wasInRange != wasFound) { device->setStateValue(inRangeStateTypeId, wasFound); } }
void UDPServer::handleDataRequest(QString data) { qDebug() << "UDPServer::handleDataRequest called with data:" << data; QString cmd = data.section(';',1,1).toLower(); switch (COMMANDS.indexOf(cmd.section(' ',0,0))) { case 0: // Help command (help) qDebug() << "help command called"; sendHelp(); break; case 1: // List devices command (lsdvs) qDebug() << "List devices command called"; sendDeviceList(); break; case 2: // Select device command (sldvc) qDebug() << "Select device command called"; selectDevice(cmd); break; case 3: // Deselect device command (dsdvc) qDebug() << "Deselect device command called"; deselectDevice(); break; case 4: // List buttons command (lsbts) qDebug() << "List buttons command called"; listButtons(); break; case 5: // Keymap command (kmap) qDebug() << "Keymap command called"; mapKey(cmd); break; case 6: // Undo keymap command (umap) qDebug() << "Undo keymap command called"; unmapKey(cmd); break; case 7: // Supported devices command (supdvs) qDebug() << "Supported devices command called"; supportedDevices(cmd); break; case 8: // Axis Format Map (afmap) qDebug() << "Axis Format Map command called"; axisFormatMap(cmd); break; case 9: // Axis Key Map (akmap) qDebug() << "Axis Key Map command called"; axisKeyMap(cmd); break; default: qDebug() << "Command not recognised"; QString reply = "10;"; reply += "\'" + cmd.section(' ',0,0) + "\'"; reply += " is not recognized as a command, use the \'help\' command for more information"; sendDatagram(reply.toLatin1()); break; } emit dataAvailable(data); }
void DevicePluginLircd::buttonPressed(const QString &remoteName, const QString &buttonName, int repeat) { Device *remote = nullptr; QList<Device*> configuredRemotes = deviceManager()->findConfiguredDevices(lircdDeviceClassId); foreach (Device *device, configuredRemotes) { if (device->paramValue("remoteName").toString() == remoteName) { remote = device; break; } } if (!remote) { qCWarning(dcLircd) << "Unhandled remote" << remoteName << buttonName; return; } qCDebug(dcLircd) << "found remote" << remoteName << supportedDevices().first().eventTypes().count(); ParamList params; Param buttonParam("button", buttonName); params.append(buttonParam); Param repeatParam("repeat", repeat); params.append(repeatParam); Event event(LircKeypressEventTypeId, remote->id(), params); emitEvent(event); }
void DevicePluginIntertechno::radioData(const QList<int> &rawData) { // filter right here a wrong signal length if(rawData.length() != 49){ return; } QList<Device*> deviceList = deviceManager()->findConfiguredDevices(intertechnoRemote); if(deviceList.isEmpty()){ return; } int delay = rawData.first()/31; QByteArray binCode; // ======================================= // average 314 if(delay > 300 && delay < 400){ // go trough all 48 timings (without sync signal) for(int i = 1; i <= 48; i+=2 ){ int div; int divNext; // if short if(rawData.at(i) <= 700){ div = 1; }else{ div = 3; } // if long if(rawData.at(i+1) < 700){ divNext = 1; }else{ divNext = 3; } // _ // if we have | |___ = 0 -> in 4 delays => 1000 // _ // if we have ___| | = 1 -> in 4 delays => 0001 if(div == 1 && divNext == 3){ binCode.append('0'); }else if(div == 3 && divNext == 1){ binCode.append('1'); }else{ return; } } }else{ return; } // ======================================= // Check nibble 16-19, must be 0001 if(binCode.mid(16,4) != "0001"){ return; } // ======================================= // Get family code QString familyCode; bool ok; QByteArray familyCodeBin = binCode.left(8); int famiyCodeInt = familyCodeBin.toInt(&ok,2); if(!ok){ return; } switch (famiyCodeInt) { case 0b00000000: familyCode = "A"; break; case 0b01000000: familyCode = "B"; break; case 0b00010000: familyCode = "C"; break; case 0b01010000: familyCode = "D"; break; case 0b00000100: familyCode = "E"; break; case 0b01000100: familyCode = "F"; break; case 0b00010100: familyCode = "G"; break; case 0b01010100: familyCode = "H"; break; case 0b00000001: familyCode = "I"; break; case 0b01000001: familyCode = "J"; break; case 0b00010001: familyCode = "K"; break; case 0b01010001: familyCode = "L"; break; case 0b00000101: familyCode = "M"; break; case 0b01000101: familyCode = "N"; break; case 0b00010101: familyCode = "O"; break; case 0b01010101: familyCode = "P"; break; default: return; } // ======================================= // Get button code QString buttonCode; QByteArray buttonCodeBin = binCode.mid(8,8); int buttonCodeInt = buttonCodeBin.toInt(&ok,2); if(!ok){ return; } switch (buttonCodeInt) { case 0b00000000: buttonCode = "1"; break; case 0b01000000: buttonCode = "2"; break; case 0b00010000: buttonCode = "3"; break; case 0b01010000: buttonCode = "4"; break; case 0b00000100: buttonCode = "5"; break; case 0b01000100: buttonCode = "6"; break; case 0b00010100: buttonCode = "7"; break; case 0b01010100: buttonCode = "8"; break; case 0b00000001: buttonCode = "9"; break; case 0b01000001: buttonCode = "10"; break; case 0b00010001: buttonCode = "11"; break; case 0b01010001: buttonCode = "12"; break; case 0b00000101: buttonCode = "13"; break; case 0b01000101: buttonCode = "14"; break; case 0b00010101: buttonCode = "15"; break; case 0b01010101: buttonCode = "16"; break; default: return; } // ======================================= // get power status -> On = 0100, Off = 0001 bool power; if(binCode.right(4).toInt(0,2) == 5){ power = true; }else if(binCode.right(4).toInt(0,2) == 4){ power = false; }else{ return; } qDebug() << "family code = " << familyCode << "button code =" << buttonCode << power; // =================================================== Device *device = 0; foreach (Device *dev, deviceList) { if (dev->paramValue("familyCode").toString() == familyCode) { // Yippie! We found the device. device = dev; break; } } if (!device) { qWarning() << "couldn't find any configured device for intertech familyCode:" << familyCode; return; } ParamList params; Param powerParam("power", power); params.append(powerParam); // FIXME: find a better way to get to the remote DeviceClass DeviceClass deviceClass = supportedDevices().first(); foreach (const EventType &eventType, deviceClass.eventTypes()) { if (eventType.name() == buttonCode) { qDebug() << "emit event " << pluginName() << familyCode << eventType.name() << power; Event event = Event(eventType.id(), device->id(), params); emit emitEvent(event); return; } } }