aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2013-11-22 11:54:30 +0100
committerAleksander Morgado <aleksander@aleksander.es>2014-02-13 13:41:23 +0100
commit243720414e2d7a1b1c6d42bed3275296b4bc1da0 (patch)
treeef4737ac78fa5763a84260667c813ce0ea0742d6
parentbf57da537d62c5ef15b7be32818cd4a531f89d38 (diff)
context: new '--test-no-auto-scan' to avoid automatic scanning for devices
-rw-r--r--data/tests/org.freedesktop.ModemManager1.service.in2
-rw-r--r--src/main.c4
-rw-r--r--src/mm-context.c8
-rw-r--r--src/mm-context.h1
-rw-r--r--src/mm-manager.c31
-rw-r--r--src/mm-manager.h2
6 files changed, 45 insertions, 3 deletions
diff --git a/data/tests/org.freedesktop.ModemManager1.service.in b/data/tests/org.freedesktop.ModemManager1.service.in
index 4fcbf63b..2fa449bc 100644
--- a/data/tests/org.freedesktop.ModemManager1.service.in
+++ b/data/tests/org.freedesktop.ModemManager1.service.in
@@ -2,4 +2,4 @@
[D-BUS Service]
Name=org.freedesktop.ModemManager1
-Exec=@abs_top_builddir@/src/ModemManager --test-session
+Exec=@abs_top_builddir@/src/ModemManager --test-session --test-no-auto-scan
diff --git a/src/main.c b/src/main.c
index ee4eaff0..973dd469 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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,