Improve adapter monitor and skipp all virtual devices
This commit is contained in:
parent
467d2cc715
commit
28878adb73
@ -663,5 +663,5 @@ QDebug operator<<(QDebug debug, ZigbeeNetwork *network)
|
|||||||
<< "Channel: " << network->channel() << ", "
|
<< "Channel: " << network->channel() << ", "
|
||||||
<< network->state()
|
<< network->state()
|
||||||
<< ") ";
|
<< ") ";
|
||||||
return debug;
|
return debug.space();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,57 +42,69 @@ ZigbeeUartAdapterMonitor::ZigbeeUartAdapterMonitor(QObject *parent) : QObject(pa
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts()) {
|
||||||
|
addAdapterInternally(serialPortInfo.systemLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Read initially all tty devices
|
// Read initially all tty devices
|
||||||
struct udev_enumerate *enumerate = udev_enumerate_new(m_udev);
|
// struct udev_enumerate *enumerate = udev_enumerate_new(m_udev);
|
||||||
if (!enumerate) {
|
// if (!enumerate) {
|
||||||
qCWarning(dcZigbeeAdapterMonitor()) << "Could not create udev enumerate for initial device reading for the adapter monitor.";
|
// qCWarning(dcZigbeeAdapterMonitor()) << "Could not create udev enumerate for initial device reading for the adapter monitor.";
|
||||||
udev_unref(m_udev);
|
// udev_unref(m_udev);
|
||||||
m_udev = nullptr;
|
// m_udev = nullptr;
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
udev_enumerate_add_match_subsystem(enumerate, "tty");
|
// udev_enumerate_add_match_subsystem(enumerate, "tty");
|
||||||
|
|
||||||
if (udev_enumerate_scan_devices(enumerate) < 0) {
|
// if (udev_enumerate_scan_devices(enumerate) < 0) {
|
||||||
qCWarning(dcZigbeeAdapterMonitor()) << "Failed to scan devices from udev enumerate.";
|
// qCWarning(dcZigbeeAdapterMonitor()) << "Failed to scan devices from udev enumerate.";
|
||||||
udev_enumerate_unref(enumerate);
|
// udev_enumerate_unref(enumerate);
|
||||||
enumerate = nullptr;
|
// enumerate = nullptr;
|
||||||
udev_unref(m_udev);
|
// udev_unref(m_udev);
|
||||||
m_udev = nullptr;
|
// m_udev = nullptr;
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
qCDebug(dcZigbeeAdapterMonitor()) << "Load initial list of available serial ports...";
|
// qCDebug(dcZigbeeAdapterMonitor()) << "Load initial list of available serial ports...";
|
||||||
struct udev_list_entry *devices = nullptr;
|
// struct udev_list_entry *devices = nullptr;
|
||||||
devices = udev_enumerate_get_list_entry(enumerate);
|
// devices = udev_enumerate_get_list_entry(enumerate);
|
||||||
struct udev_list_entry *dev_list_entry = nullptr;
|
// struct udev_list_entry *dev_list_entry = nullptr;
|
||||||
udev_list_entry_foreach(dev_list_entry, devices) {
|
// udev_list_entry_foreach(dev_list_entry, devices) {
|
||||||
struct udev_device *device = nullptr;
|
// struct udev_device *device = nullptr;
|
||||||
const char *path;
|
// const char *path;
|
||||||
path = udev_list_entry_get_name(dev_list_entry);
|
// path = udev_list_entry_get_name(dev_list_entry);
|
||||||
device = udev_device_new_from_syspath(m_udev, path);
|
// device = udev_device_new_from_syspath(m_udev, path);
|
||||||
|
|
||||||
// Print properties
|
// // Filter out virtual devices
|
||||||
struct udev_list_entry *properties = udev_device_get_properties_list_entry(device);
|
// QString devicePath = QString::fromLatin1(udev_device_get_property_value(device,"DEVPATH"));
|
||||||
struct udev_list_entry *property_list_entry = nullptr;
|
// QString systemPath = QString::fromLatin1(udev_device_get_property_value(device,"DEVNAME"));
|
||||||
udev_list_entry_foreach(property_list_entry, properties) {
|
|
||||||
qCDebug(dcZigbeeAdapterMonitor()) << " - Property" << udev_list_entry_get_name(property_list_entry) << udev_list_entry_get_value(property_list_entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString devicePath = QString::fromLatin1(udev_device_get_property_value(device,"DEVNAME"));
|
// if (!devicePath.contains("/virtual/tty/")) {
|
||||||
QString manufacturerString = QString::fromLatin1(udev_device_get_property_value(device,"ID_VENDOR_ENC"));
|
// // Print properties
|
||||||
QString descriptionString = QString::fromLatin1(udev_device_get_property_value(device,"ID_MODEL_ENC"));
|
// struct udev_list_entry *properties = udev_device_get_properties_list_entry(device);
|
||||||
QString serialNumberString = QString::fromLatin1(udev_device_get_property_value(device, "ID_SERIAL_SHORT"));
|
// struct udev_list_entry *property_list_entry = nullptr;
|
||||||
|
// udev_list_entry_foreach(property_list_entry, properties) {
|
||||||
|
// qCDebug(dcZigbeeAdapterMonitor()) << " - Property" << udev_list_entry_get_name(property_list_entry) << udev_list_entry_get_value(property_list_entry);
|
||||||
|
// }
|
||||||
|
|
||||||
// Clean up this device since we have all information
|
// QString manufacturerString = QString::fromLatin1(udev_device_get_property_value(device,"ID_VENDOR_ENC"));
|
||||||
udev_device_unref(device);
|
// QString descriptionString = QString::fromLatin1(udev_device_get_property_value(device,"ID_MODEL_ENC"));
|
||||||
|
// QString serialNumberString = QString::fromLatin1(udev_device_get_property_value(device, "ID_SERIAL_SHORT"));
|
||||||
|
|
||||||
qCDebug(dcZigbeeAdapterMonitor()) << "[+]" << devicePath << manufacturerString << descriptionString << serialNumberString;
|
// qCDebug(dcZigbeeAdapterMonitor()) << "[+]" << systemPath << manufacturerString << descriptionString << serialNumberString;
|
||||||
addAdapterInternally(devicePath);
|
// addAdapterInternally(systemPath);
|
||||||
}
|
// } else {
|
||||||
|
// qCDebug(dcZigbeeAdapterMonitor()) << "Skipping virtual tty device" << systemPath << "-->" << devicePath;
|
||||||
|
// }
|
||||||
|
|
||||||
udev_enumerate_unref(enumerate);
|
// // Clean up this device since we have all information
|
||||||
enumerate = nullptr;
|
// udev_device_unref(device);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// udev_enumerate_unref(enumerate);
|
||||||
|
// enumerate = nullptr;
|
||||||
|
|
||||||
// Create udev monitor
|
// Create udev monitor
|
||||||
m_monitor = udev_monitor_new_from_netlink(m_udev, "udev");
|
m_monitor = udev_monitor_new_from_netlink(m_udev, "udev");
|
||||||
@ -140,8 +152,15 @@ ZigbeeUartAdapterMonitor::ZigbeeUartAdapterMonitor(QObject *parent) : QObject(pa
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString systemPath = QString::fromLatin1(udev_device_get_property_value(device,"DEVNAME"));
|
||||||
|
QString devicePath = QString::fromLatin1(udev_device_get_property_value(device,"DEVPATH"));
|
||||||
|
if (devicePath.contains("/virtual/tty/")) {
|
||||||
|
qCDebug(dcZigbeeAdapterMonitor()) << "Skipping virtual tty device" << systemPath << "-->" << devicePath;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QString actionString = QString::fromLatin1(udev_device_get_action(device));
|
QString actionString = QString::fromLatin1(udev_device_get_action(device));
|
||||||
QString devicePath = QString::fromLatin1(udev_device_get_property_value(device,"DEVNAME"));
|
|
||||||
QString manufacturerString = QString::fromLatin1(udev_device_get_property_value(device,"ID_VENDOR_ENC"));
|
QString manufacturerString = QString::fromLatin1(udev_device_get_property_value(device,"ID_VENDOR_ENC"));
|
||||||
QString descriptionString = QString::fromLatin1(udev_device_get_property_value(device,"ID_MODEL_ENC"));
|
QString descriptionString = QString::fromLatin1(udev_device_get_property_value(device,"ID_MODEL_ENC"));
|
||||||
QString serialNumberString = QString::fromLatin1(udev_device_get_property_value(device, "ID_SERIAL_SHORT"));
|
QString serialNumberString = QString::fromLatin1(udev_device_get_property_value(device, "ID_SERIAL_SHORT"));
|
||||||
@ -154,16 +173,16 @@ ZigbeeUartAdapterMonitor::ZigbeeUartAdapterMonitor(QObject *parent) : QObject(pa
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (actionString == "add") {
|
if (actionString == "add") {
|
||||||
qCDebug(dcZigbeeAdapterMonitor()) << "[+]" << devicePath << serialNumberString;
|
qCDebug(dcZigbeeAdapterMonitor()) << "[+]" << systemPath << serialNumberString;
|
||||||
if (!m_availableAdapters.contains(devicePath)) {
|
if (!m_availableAdapters.contains(systemPath)) {
|
||||||
addAdapterInternally(devicePath);
|
addAdapterInternally(systemPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actionString == "remove") {
|
if (actionString == "remove") {
|
||||||
qCDebug(dcZigbeeAdapterMonitor()) << "[-]" << devicePath << serialNumberString;
|
qCDebug(dcZigbeeAdapterMonitor()) << "[-]" << systemPath << serialNumberString;
|
||||||
if (m_availableAdapters.contains(devicePath)) {
|
if (m_availableAdapters.contains(systemPath)) {
|
||||||
ZigbeeUartAdapter adapter = m_availableAdapters.take(devicePath);
|
ZigbeeUartAdapter adapter = m_availableAdapters.take(systemPath);
|
||||||
qCDebug(dcZigbeeAdapterMonitor()) << "Removed" << adapter;
|
qCDebug(dcZigbeeAdapterMonitor()) << "Removed" << adapter;
|
||||||
emit adapterRemoved(adapter);
|
emit adapterRemoved(adapter);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user