diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2013-11-22 11:54:30 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2014-02-13 13:41:23 +0100 |
commit | 243720414e2d7a1b1c6d42bed3275296b4bc1da0 (patch) | |
tree | ef4737ac78fa5763a84260667c813ce0ea0742d6 /src | |
parent | bf57da537d62c5ef15b7be32818cd4a531f89d38 (diff) |
context: new '--test-no-auto-scan' to avoid automatic scanning for devices
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 4 | ||||
-rw-r--r-- | src/mm-context.c | 8 | ||||
-rw-r--r-- | src/mm-context.h | 1 | ||||
-rw-r--r-- | src/mm-manager.c | 31 | ||||
-rw-r--r-- | src/mm-manager.h | 2 |
5 files changed, 44 insertions, 2 deletions
@@ -62,7 +62,9 @@ bus_acquired_cb (GDBusConnection *connection, /* Create Manager object */ g_assert (!manager); - manager = mm_manager_new (connection, &error); + manager = mm_manager_new (connection, + !mm_context_get_test_no_auto_scan (), + &error); if (!manager) { mm_warn ("Could not create manager: %s", error->message); g_error_free (error); diff --git a/src/mm-context.c b/src/mm-context.c index 7ada188e..0a3a025e 100644 --- a/src/mm-context.c +++ b/src/mm-context.c @@ -69,9 +69,11 @@ mm_context_get_relative_timestamps (void) /* Test context */ static gboolean test_session; +static gboolean test_no_auto_scan; static const GOptionEntry test_entries[] = { { "test-session", 0, 0, G_OPTION_ARG_NONE, &test_session, "Run in session DBus", NULL }, + { "test-no-auto-scan", 0, 0, G_OPTION_ARG_NONE, &test_no_auto_scan, "Don't auto-scan looking for devices", NULL }, { NULL } }; @@ -95,6 +97,12 @@ mm_context_get_test_session (void) return test_session; } +gboolean +mm_context_get_test_no_auto_scan (void) +{ + return test_no_auto_scan; +} + /*****************************************************************************/ void diff --git a/src/mm-context.h b/src/mm-context.h index 642e2b46..68fe20f6 100644 --- a/src/mm-context.h +++ b/src/mm-context.h @@ -29,5 +29,6 @@ gboolean mm_context_get_relative_timestamps (void); /* Testing support */ gboolean mm_context_get_test_session (void); +gboolean mm_context_get_test_no_auto_scan (void); #endif /* MM_CONTEXT_H */ diff --git a/src/mm-manager.c b/src/mm-manager.c index 7103a002..32d7d835 100644 --- a/src/mm-manager.c +++ b/src/mm-manager.c @@ -42,12 +42,15 @@ G_DEFINE_TYPE_EXTENDED (MMManager, mm_manager, MM_GDBUS_TYPE_ORG_FREEDESKTOP_MOD enum { PROP_0, PROP_CONNECTION, + PROP_AUTO_SCAN, LAST_PROP }; struct _MMManagerPrivate { /* The connection to the system bus */ GDBusConnection *connection; + /* Whether auto-scanning is enabled */ + gboolean auto_scan; /* The UDev client */ GUdevClient *udev; /* The authorization provider */ @@ -453,6 +456,9 @@ mm_manager_start (MMManager *manager, g_return_if_fail (manager != NULL); g_return_if_fail (MM_IS_MANAGER (manager)); + if (!manager->priv->auto_scan && !manual_scan) + return; + mm_dbg ("Starting %s device scan...", manual_scan ? "manual" : "automatic"); devices = g_udev_client_query_by_subsystem (manager->priv->udev, "tty"); @@ -677,6 +683,7 @@ handle_scan_devices (MmGdbusOrgFreedesktopModemManager1 *manager, MMManager * mm_manager_new (GDBusConnection *connection, + gboolean auto_scan, GError **error) { g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL); @@ -685,6 +692,7 @@ mm_manager_new (GDBusConnection *connection, NULL, /* cancellable */ error, MM_MANAGER_CONNECTION, connection, + MM_MANAGER_AUTO_SCAN, auto_scan, NULL); } @@ -702,6 +710,9 @@ set_property (GObject *object, g_object_unref (priv->connection); priv->connection = g_value_dup_object (value); break; + case PROP_AUTO_SCAN: + priv->auto_scan = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -720,6 +731,9 @@ get_property (GObject *object, case PROP_CONNECTION: g_value_set_object (value, priv->connection); break; + case PROP_AUTO_SCAN: + g_value_set_boolean (value, priv->auto_scan); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -746,7 +760,9 @@ mm_manager_init (MMManager *manager) /* Setup UDev client */ priv->udev = g_udev_client_new (subsys); - g_signal_connect (priv->udev, "uevent", G_CALLBACK (handle_uevent), manager); + + /* By default, enable autoscan */ + priv->auto_scan = TRUE; /* Setup Object Manager Server */ priv->object_manager = g_dbus_object_manager_server_new (MM_DBUS_PATH); @@ -769,6 +785,10 @@ initable_init (GInitable *initable, { MMManagerPrivate *priv = MM_MANAGER (initable)->priv; + /* If autoscan enabled, list for udev events */ + if (priv->auto_scan) + g_signal_connect (priv->udev, "uevent", G_CALLBACK (handle_uevent), initable); + /* Create plugin manager */ priv->plugin_manager = mm_plugin_manager_new (error); if (!priv->plugin_manager) @@ -836,6 +856,7 @@ mm_manager_class_init (MMManagerClass *manager_class) object_class->finalize = finalize; /* Properties */ + g_object_class_install_property (object_class, PROP_CONNECTION, g_param_spec_object (MM_MANAGER_CONNECTION, @@ -843,4 +864,12 @@ mm_manager_class_init (MMManagerClass *manager_class) "GDBus connection to the system bus.", G_TYPE_DBUS_CONNECTION, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_AUTO_SCAN, + g_param_spec_boolean (MM_MANAGER_AUTO_SCAN, + "Auto scan", + "Automatically look for new devices", + TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); } diff --git a/src/mm-manager.h b/src/mm-manager.h index 7f1a00ad..9262ce20 100644 --- a/src/mm-manager.h +++ b/src/mm-manager.h @@ -31,6 +31,7 @@ #define MM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_MANAGER, MMManagerClass)) #define MM_MANAGER_CONNECTION "connection" /* Construct-only */ +#define MM_MANAGER_AUTO_SCAN "auto-scan" /* Construct-only */ typedef struct _MMManagerPrivate MMManagerPrivate; @@ -46,6 +47,7 @@ typedef struct { GType mm_manager_get_type (void); MMManager *mm_manager_new (GDBusConnection *bus, + gboolean auto_scan, GError **error); void mm_manager_start (MMManager *manager, |