improved used io handling
This commit is contained in:
parent
d05a469e49
commit
59e1711961
@ -56,44 +56,58 @@ DeviceManager::DeviceSetupStatus DevicePluginUniPi::setupDevice(Device *device)
|
|||||||
{
|
{
|
||||||
if (device->deviceClassId() == relayOutputDeviceClassId) {
|
if (device->deviceClassId() == relayOutputDeviceClassId) {
|
||||||
|
|
||||||
m_usedGpios.insert(device->paramValue(relayOutputRelayNumberParamTypeId).toString(), device);
|
m_usedRelais.insert(device->paramValue(relayOutputRelayNumberParamTypeId).toString(), device);
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
return DeviceManager::DeviceSetupStatusSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device->deviceClassId() == digitalOutputDeviceClassId) {
|
if (device->deviceClassId() == digitalOutputDeviceClassId) {
|
||||||
|
|
||||||
m_usedGpios.insert(device->paramValue(digitalOutputDigitalOutputNumberParamTypeId).toString(), device);
|
m_usedDigitalOutputs.insert(device->paramValue(digitalOutputDigitalOutputNumberParamTypeId).toString(), device);
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
return DeviceManager::DeviceSetupStatusSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device->deviceClassId() == digitalInputDeviceClassId) {
|
if (device->deviceClassId() == digitalInputDeviceClassId) {
|
||||||
|
|
||||||
m_usedGpios.insert(device->paramValue(digitalInputDigitalInputNumberParamTypeId).toString(), device);
|
m_usedDigitalInputs.insert(device->paramValue(digitalInputDigitalInputNumberParamTypeId).toString(), device);
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
return DeviceManager::DeviceSetupStatusSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device->deviceClassId() == analogInputDeviceClassId) {
|
if (device->deviceClassId() == analogInputDeviceClassId) {
|
||||||
|
|
||||||
m_usedGpios.insert(device->paramValue(analogInputAnalogInputNumberParamTypeId).toString(), device);
|
m_usedAnalogInputs.insert(device->paramValue(analogInputAnalogInputNumberParamTypeId).toString(), device);
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
return DeviceManager::DeviceSetupStatusSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device->deviceClassId() == analogOutputDeviceClassId) {
|
if (device->deviceClassId() == analogOutputDeviceClassId) {
|
||||||
|
|
||||||
m_usedGpios.insert(device->paramValue(analogOutputAnalogOutputNumberParamTypeId).toString(), device);
|
m_usedAnalogOutputs.insert(device->paramValue(analogOutputAnalogOutputNumberParamTypeId).toString(), device);
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
return DeviceManager::DeviceSetupStatusSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device->deviceClassId() == shutterDeviceClassId) {
|
if (device->deviceClassId() == shutterDeviceClassId) {
|
||||||
|
|
||||||
m_usedGpios.insert(device->paramValue(shutterOutputOpenParamTypeId).toString(), device);
|
if (device->paramValue(shutterOutputTypeOpenParamTypeId) == GPIOType::relay) {
|
||||||
m_usedGpios.insert(device->paramValue(shutterOutputCloseParamTypeId).toString(), device);
|
m_usedRelais.insert(device->paramValue(shutterOutputOpenParamTypeId).toString(), device);
|
||||||
|
} else if (device->paramValue(shutterOutputOpenParamTypeId) == GPIOType::digitalOutput) {
|
||||||
|
m_usedDigitalOutputs.insert(device->paramValue(shutterOutputOpenParamTypeId).toString(), device);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (device->paramValue(shutterOutputTypeCloseParamTypeId) == GPIOType::relay) {
|
||||||
|
m_usedRelais.insert(device->paramValue(shutterOutputCloseParamTypeId).toString(), device);
|
||||||
|
} else if (device->paramValue(shutterOutputOpenParamTypeId) == GPIOType::digitalOutput) {
|
||||||
|
m_usedDigitalOutputs.insert(device->paramValue(shutterOutputCloseParamTypeId).toString(), device);
|
||||||
|
}
|
||||||
|
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
return DeviceManager::DeviceSetupStatusSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device->deviceClassId() == lightDeviceClassId) {
|
if (device->deviceClassId() == lightDeviceClassId) {
|
||||||
|
|
||||||
m_usedGpios.insert(device->paramValue(relayOutputRelayNumberParamTypeId).toString(), device);
|
if (device->paramValue(lightOutputTypeParamTypeId) == GPIOType::relay) {
|
||||||
|
m_usedRelais.insert(device->paramValue(lightOutputParamTypeId).toString(), device);
|
||||||
|
} else if (device->paramValue(lightOutputParamTypeId) == GPIOType::digitalOutput) {
|
||||||
|
m_usedDigitalOutputs.insert(device->paramValue(lightOutputParamTypeId).toString(), device);
|
||||||
|
}
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
return DeviceManager::DeviceSetupStatusSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,13 +122,13 @@ DeviceManager::DeviceError DevicePluginUniPi::discoverDevices(const DeviceClassI
|
|||||||
if (deviceClass.vendorId() == unipiVendorId) {
|
if (deviceClass.vendorId() == unipiVendorId) {
|
||||||
|
|
||||||
if (deviceClassId == relayOutputDeviceClassId) {
|
if (deviceClassId == relayOutputDeviceClassId) {
|
||||||
// Create the list of available gpios
|
// Create the list of available relais
|
||||||
QList<DeviceDescriptor> deviceDescriptors;
|
QList<DeviceDescriptor> deviceDescriptors;
|
||||||
for (int i = 0; i < m_relais.count(); i++) {
|
for (int i = 0; i < m_relais.count(); i++) {
|
||||||
const QString circuit = m_relais.at(i);
|
const QString circuit = m_relais.at(i);
|
||||||
|
|
||||||
// Offer only gpios which arn't in use already
|
// Offer only gpios which arn't in use already
|
||||||
if (m_usedGpios.contains(circuit)){
|
if (m_usedRelais.contains(circuit)){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
DeviceDescriptor descriptor(deviceClassId, QString("Relay %1").arg(circuit), circuit);
|
DeviceDescriptor descriptor(deviceClassId, QString("Relay %1").arg(circuit), circuit);
|
||||||
@ -129,18 +143,82 @@ DeviceManager::DeviceError DevicePluginUniPi::discoverDevices(const DeviceClassI
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (deviceClassId == digitalOutputDeviceClassId) {
|
if (deviceClassId == digitalOutputDeviceClassId) {
|
||||||
|
// Create the list of available digital outputs
|
||||||
|
QList<DeviceDescriptor> deviceDescriptors;
|
||||||
|
for (int i = 0; i < m_digitalOutputs.count(); i++) {
|
||||||
|
const QString circuit = m_digitalOutputs.at(i);
|
||||||
|
|
||||||
|
// Offer only gpios which arn't in use already
|
||||||
|
if (m_usedDigitalOutputs.contains(circuit)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DeviceDescriptor descriptor(deviceClassId, QString("Digital output %1").arg(circuit), circuit);
|
||||||
|
ParamList parameters;
|
||||||
|
parameters.append(Param(digitalOutputDigitalOutputNumberParamTypeId, circuit));
|
||||||
|
descriptor.setParams(parameters);
|
||||||
|
deviceDescriptors.append(descriptor);
|
||||||
|
}
|
||||||
|
emit devicesDiscovered(deviceClassId, deviceDescriptors);
|
||||||
return DeviceManager::DeviceErrorAsync;
|
return DeviceManager::DeviceErrorAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deviceClassId == digitalInputDeviceClassId) {
|
if (deviceClassId == digitalInputDeviceClassId) {
|
||||||
|
// Create the list of available digital inputs
|
||||||
|
QList<DeviceDescriptor> deviceDescriptors;
|
||||||
|
for (int i = 0; i < m_digitalInputs.count(); i++) {
|
||||||
|
const QString circuit = m_digitalInputs.at(i);
|
||||||
|
|
||||||
|
// Offer only digital inputs which arn't in use already
|
||||||
|
if (m_usedDigitalInputs.contains(circuit)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DeviceDescriptor descriptor(deviceClassId, QString("Digital input %1").arg(circuit), circuit);
|
||||||
|
ParamList parameters;
|
||||||
|
parameters.append(Param(digitalInputDigitalInputNumberParamTypeId, circuit));
|
||||||
|
descriptor.setParams(parameters);
|
||||||
|
deviceDescriptors.append(descriptor);
|
||||||
|
}
|
||||||
|
emit devicesDiscovered(deviceClassId, deviceDescriptors);
|
||||||
return DeviceManager::DeviceErrorAsync;
|
return DeviceManager::DeviceErrorAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deviceClassId == analogInputDeviceClassId) {
|
if (deviceClassId == analogInputDeviceClassId) {
|
||||||
|
// Create the list of available digital inputs
|
||||||
|
QList<DeviceDescriptor> deviceDescriptors;
|
||||||
|
for (int i = 0; i < m_analogInputs.count(); i++) {
|
||||||
|
const QString circuit = m_analogInputs.at(i);
|
||||||
|
|
||||||
|
// Offer only analog inputs which arn't in use already
|
||||||
|
if (m_usedAnalogInputs.contains(circuit)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DeviceDescriptor descriptor(deviceClassId, QString("Analog input %1").arg(circuit), circuit);
|
||||||
|
ParamList parameters;
|
||||||
|
parameters.append(Param(analogInputAnalogInputNumberParamTypeId, circuit));
|
||||||
|
descriptor.setParams(parameters);
|
||||||
|
deviceDescriptors.append(descriptor);
|
||||||
|
}
|
||||||
|
emit devicesDiscovered(deviceClassId, deviceDescriptors);
|
||||||
return DeviceManager::DeviceErrorAsync;
|
return DeviceManager::DeviceErrorAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deviceClassId == analogOutputDeviceClassId) {
|
if (deviceClassId == analogOutputDeviceClassId) {
|
||||||
|
// Create the list of available digital inputs
|
||||||
|
QList<DeviceDescriptor> deviceDescriptors;
|
||||||
|
for (int i = 0; i < m_analogOutputs.count(); i++) {
|
||||||
|
const QString circuit = m_analogOutputs.at(i);
|
||||||
|
|
||||||
|
// Offer only digital inputs which arn't in use already
|
||||||
|
if (m_usedAnalogOutputs.contains(circuit)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DeviceDescriptor descriptor(deviceClassId, QString("Analog Output %1").arg(circuit), circuit);
|
||||||
|
ParamList parameters;
|
||||||
|
parameters.append(Param(analogOutputAnalogOutputNumberParamTypeId, circuit));
|
||||||
|
descriptor.setParams(parameters);
|
||||||
|
deviceDescriptors.append(descriptor);
|
||||||
|
}
|
||||||
|
emit devicesDiscovered(deviceClassId, deviceDescriptors);
|
||||||
return DeviceManager::DeviceErrorAsync;
|
return DeviceManager::DeviceErrorAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,18 +230,18 @@ DeviceManager::DeviceError DevicePluginUniPi::discoverDevices(const DeviceClassI
|
|||||||
const QString circuit = m_relais.at(i);
|
const QString circuit = m_relais.at(i);
|
||||||
|
|
||||||
// Offer only gpios which aren't in use already
|
// Offer only gpios which aren't in use already
|
||||||
if (m_usedGpios.contains(circuit)){
|
if (m_usedRelais.contains(circuit)){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeviceDescriptor descriptor(deviceClassId, QString("Opening relay %1 | Closing relay %2").arg(circuit, m_relais.at(i+1)), circuit);
|
DeviceDescriptor descriptor(deviceClassId, "Roller shutter", QString("Opening relay %1 | Closing relay %2").arg(circuit, m_relais.at(i+1)));
|
||||||
ParamList parameters;
|
ParamList parameters;
|
||||||
parameters.append(Param(shutterOutputOpenParamTypeId, circuit));
|
parameters.append(Param(shutterOutputOpenParamTypeId, circuit));
|
||||||
for (int a = i; a < (m_relais.count()); a++) {
|
for (int a = i; a < (m_relais.count()); a++) {
|
||||||
|
|
||||||
const QString circuit = m_relais.at(a);
|
const QString circuit = m_relais.at(a);
|
||||||
// Offer only gpios which aren't in use already
|
// Offer only gpios which aren't in use already
|
||||||
if (m_usedGpios.contains(circuit)){
|
if (m_usedRelais.contains(circuit)){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
parameters.append(Param(shutterOutputCloseParamTypeId, m_relais.at(a)));
|
parameters.append(Param(shutterOutputCloseParamTypeId, m_relais.at(a)));
|
||||||
@ -184,7 +262,7 @@ DeviceManager::DeviceError DevicePluginUniPi::discoverDevices(const DeviceClassI
|
|||||||
const QString circuit = m_relais.at(i);
|
const QString circuit = m_relais.at(i);
|
||||||
|
|
||||||
// Offer only gpios which arn't in use already
|
// Offer only gpios which arn't in use already
|
||||||
if (m_usedGpios.contains(circuit)){
|
if (m_usedRelais.contains(circuit)){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
DeviceDescriptor descriptor(deviceClassId, QString("Relay %1").arg(circuit), circuit);
|
DeviceDescriptor descriptor(deviceClassId, QString("Relay %1").arg(circuit), circuit);
|
||||||
@ -199,7 +277,7 @@ DeviceManager::DeviceError DevicePluginUniPi::discoverDevices(const DeviceClassI
|
|||||||
const QString circuit = m_digitalOutputs.at(i);
|
const QString circuit = m_digitalOutputs.at(i);
|
||||||
|
|
||||||
// Offer only gpios which arn't in use already
|
// Offer only gpios which arn't in use already
|
||||||
if (m_usedGpios.contains(circuit)){
|
if (m_usedDigitalOutputs.contains(circuit)){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
DeviceDescriptor descriptor(deviceClassId, QString("Digital output %1").arg(circuit), circuit);
|
DeviceDescriptor descriptor(deviceClassId, QString("Digital output %1").arg(circuit), circuit);
|
||||||
@ -237,7 +315,36 @@ void DevicePluginUniPi::postSetupDevice(Device *device)
|
|||||||
|
|
||||||
void DevicePluginUniPi::deviceRemoved(Device *device)
|
void DevicePluginUniPi::deviceRemoved(Device *device)
|
||||||
{
|
{
|
||||||
m_usedGpios.remove(m_usedGpios.key(device)); //TODO remove multible IOs associated to a single device
|
if(device->deviceClassId() == relayOutputDeviceClassId) {
|
||||||
|
m_usedRelais.remove(device->paramValue(relayOutputRelayNumberParamTypeId).toString());
|
||||||
|
} else if(device->deviceClassId() == digitalOutputDeviceClassId) {
|
||||||
|
m_usedDigitalOutputs.remove(device->paramValue(digitalOutputDigitalOutputNumberParamTypeId).toString());
|
||||||
|
} else if(device->deviceClassId() == digitalInputDeviceClassId) {
|
||||||
|
m_usedDigitalOutputs.remove(device->paramValue(digitalInputDigitalInputNumberParamTypeId).toString());
|
||||||
|
} else if (device->deviceClassId() == analogOutputDeviceClassId) {
|
||||||
|
m_usedDigitalOutputs.remove(device->paramValue(analogOutputAnalogOutputNumberParamTypeId).toString());
|
||||||
|
} else if (device->deviceClassId() == analogInputDeviceClassId) {
|
||||||
|
m_usedDigitalOutputs.remove(device->paramValue(analogInputAnalogInputNumberParamTypeId).toString());
|
||||||
|
|
||||||
|
} else if (device->deviceClassId() == shutterDeviceClassId) {
|
||||||
|
if (device->paramValue(shutterOutputTypeOpenParamTypeId) == GPIOType::relay) {
|
||||||
|
m_usedRelais.remove(device->paramValue(shutterOutputOpenParamTypeId).toString());
|
||||||
|
} else if (device->paramValue(shutterOutputOpenParamTypeId) == GPIOType::digitalOutput) {
|
||||||
|
m_usedDigitalOutputs.remove(device->paramValue(shutterOutputOpenParamTypeId).toString());
|
||||||
|
}
|
||||||
|
if (device->paramValue(shutterOutputTypeCloseParamTypeId) == GPIOType::relay) {
|
||||||
|
m_usedRelais.remove(device->paramValue(shutterOutputCloseParamTypeId).toString());
|
||||||
|
} else if (device->paramValue(shutterOutputOpenParamTypeId) == GPIOType::digitalOutput) {
|
||||||
|
m_usedDigitalOutputs.remove(device->paramValue(shutterOutputCloseParamTypeId).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (device->deviceClassId() == lightDeviceClassId) {
|
||||||
|
if (device->paramValue(lightOutputTypeParamTypeId) == GPIOType::relay) {
|
||||||
|
m_usedRelais.remove(device->paramValue(lightOutputParamTypeId).toString());
|
||||||
|
} else if (device->paramValue(lightOutputParamTypeId) == GPIOType::digitalOutput) {
|
||||||
|
m_usedDigitalOutputs.remove(device->paramValue(lightOutputParamTypeId).toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (myDevices().isEmpty()) {
|
if (myDevices().isEmpty()) {
|
||||||
m_webSocket->close();
|
m_webSocket->close();
|
||||||
|
|||||||
@ -58,7 +58,12 @@ private:
|
|||||||
analogOutput
|
analogOutput
|
||||||
};
|
};
|
||||||
|
|
||||||
QHash<QString, Device*> m_usedGpios;
|
QHash<QString, Device*> m_usedRelais;
|
||||||
|
QHash<QString, Device*> m_usedDigitalOutputs;
|
||||||
|
QHash<QString, Device*> m_usedDigitalInputs;
|
||||||
|
QHash<QString, Device*> m_usedAnalogOutputs;
|
||||||
|
QHash<QString, Device*> m_usedAnalogInputs;
|
||||||
|
QHash<QString, Device*> m_usedTemperatureSensors;
|
||||||
|
|
||||||
QList<QString> m_relais;
|
QList<QString> m_relais;
|
||||||
QList<QString> m_digitalOutputs;
|
QList<QString> m_digitalOutputs;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user