aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-base-manager.c')
-rw-r--r--src/mm-base-manager.c53
1 files changed, 52 insertions, 1 deletions
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c
index 03a387c3..61b30146 100644
--- a/src/mm-base-manager.c
+++ b/src/mm-base-manager.c
@@ -27,8 +27,9 @@
#if defined WITH_QMI
# include <libqmi-glib.h>
#endif
-#if defined WITH_QMI && QMI_QRTR_SUPPORTED
+#if defined WITH_QRTR
# include "mm-kernel-device-qrtr.h"
+# include "mm-qrtr-bus-watcher.h"
#endif
#if defined WITH_UDEV
# include "mm-kernel-device-udev.h"
@@ -104,6 +105,10 @@ struct _MMBaseManagerPrivate {
/* The UDev client */
GUdevClient *udev;
#endif
+#if defined WITH_QRTR
+ /* The Qrtr Bus Watcher */
+ MMQrtrBusWatcher *qrtr_bus_watcher;
+#endif
};
/*****************************************************************************/
@@ -365,6 +370,34 @@ device_added (MMBaseManager *self,
mm_device_grab_port (device, port);
}
+#if defined WITH_QRTR
+
+static void
+handle_qrtr_device_added (MMBaseManager *self,
+ guint node_id,
+ MMQrtrBusWatcher *bus_watcher)
+{
+ g_autoptr(MMKernelDevice) kernel_device = NULL;
+ QrtrNode *node;
+
+ node = mm_qrtr_bus_watcher_peek_node (bus_watcher, node_id);
+
+ kernel_device = mm_kernel_device_qrtr_new (node);
+
+ device_added (self, kernel_device, TRUE, FALSE);
+}
+
+static void
+handle_qrtr_device_removed (MMBaseManager *self,
+ guint node_id)
+{
+ g_autofree gchar *qrtr_device_name = NULL;
+
+ qrtr_device_name = mm_kernel_device_qrtr_helper_build_name (node_id);
+ device_removed (self, MM_KERNEL_DEVICE_QRTR_SUBSYSTEM, qrtr_device_name);
+}
+#endif
+
static gboolean
handle_kernel_event (MMBaseManager *self,
MMKernelEventProperties *properties,
@@ -1422,6 +1455,19 @@ initable_init (GInitable *initable,
{
MMBaseManager *self = MM_BASE_MANAGER (initable);
+#if defined WITH_QRTR
+ /* Create and setup the QrtrBusWatcher */
+ self->priv->qrtr_bus_watcher = mm_qrtr_bus_watcher_new ();
+ mm_qrtr_bus_watcher_start (self->priv->qrtr_bus_watcher, NULL, NULL);
+
+ /* If autoscan enabled, list for QrtrBusWatcher events */
+ if (self->priv->auto_scan) {
+ g_object_connect (self->priv->qrtr_bus_watcher,
+ "swapped-signal::" MM_QRTR_BUS_WATCHER_DEVICE_ADDED, G_CALLBACK (handle_qrtr_device_added), self,
+ "swapped-signal::" MM_QRTR_BUS_WATCHER_DEVICE_REMOVED, G_CALLBACK (handle_qrtr_device_removed), self,
+ NULL);
+ }
+#endif
/* Create filter */
self->priv->filter = mm_filter_new (self->priv->filter_policy, error);
if (!self->priv->filter)
@@ -1486,6 +1532,11 @@ finalize (GObject *object)
g_object_unref (self->priv->udev);
#endif
+#if defined WITH_QRTR
+ if (self->priv->qrtr_bus_watcher)
+ g_object_unref (self->priv->qrtr_bus_watcher);
+#endif
+
if (self->priv->filter)
g_object_unref (self->priv->filter);