qrtr-bus-watcher: add a class to watch for QRTR nodes
Add a watcher to listen for QRTR add/remove signals.
This commit is contained in:

committed by
Aleksander Morgado

parent
daf27a9933
commit
2b126725bf
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user