diff options
Diffstat (limited to 'src/mm-manager.c')
-rw-r--r-- | src/mm-manager.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/mm-manager.c b/src/mm-manager.c index 32d7d835..30619012 100644 --- a/src/mm-manager.c +++ b/src/mm-manager.c @@ -25,6 +25,7 @@ #include <ModemManager.h> #include <mm-errors-types.h> #include <mm-gdbus-manager.h> +#include <mm-gdbus-test.h> #include "mm-manager.h" #include "mm-device.h" @@ -43,6 +44,7 @@ enum { PROP_0, PROP_CONNECTION, PROP_AUTO_SCAN, + PROP_ENABLE_TEST, LAST_PROP }; @@ -51,6 +53,8 @@ struct _MMManagerPrivate { GDBusConnection *connection; /* Whether auto-scanning is enabled */ gboolean auto_scan; + /* Whether the test interface is enabled */ + gboolean enable_test; /* The UDev client */ GUdevClient *udev; /* The authorization provider */ @@ -62,6 +66,9 @@ struct _MMManagerPrivate { GHashTable *devices; /* The Object Manager server */ GDBusObjectManagerServer *object_manager; + + /* The Test interface support */ + MmGdbusTest *test_skeleton; }; /*****************************************************************************/ @@ -569,6 +576,7 @@ mm_manager_num_modems (MMManager *self) } /*****************************************************************************/ +/* Set logging */ typedef struct { MMManager *self; @@ -628,6 +636,7 @@ handle_set_logging (MmGdbusOrgFreedesktopModemManager1 *manager, } /*****************************************************************************/ +/* Manual scan */ typedef struct { MMManager *self; @@ -681,9 +690,28 @@ handle_scan_devices (MmGdbusOrgFreedesktopModemManager1 *manager, return TRUE; } +/*****************************************************************************/ +/* Test profile setup */ + +static gboolean +handle_set_profile (MmGdbusTest *skeleton, + GDBusMethodInvocation *invocation, + const gchar *id, + const gchar *plugin_name, + const gchar *const *ports, + MMManager *self) +{ + mm_info ("Test profile set to: %s", profile); + mm_gdbus_test_complete_set_profile (skeleton, invocation); + return TRUE; +} + +/*****************************************************************************/ + MMManager * mm_manager_new (GDBusConnection *connection, gboolean auto_scan, + gboolean enable_test, GError **error) { g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL); @@ -693,6 +721,7 @@ mm_manager_new (GDBusConnection *connection, error, MM_MANAGER_CONNECTION, connection, MM_MANAGER_AUTO_SCAN, auto_scan, + MM_MANAGER_ENABLE_TEST, enable_test, NULL); } @@ -713,6 +742,9 @@ set_property (GObject *object, case PROP_AUTO_SCAN: priv->auto_scan = g_value_get_boolean (value); break; + case PROP_ENABLE_TEST: + priv->enable_test = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -734,6 +766,9 @@ get_property (GObject *object, case PROP_AUTO_SCAN: g_value_set_boolean (value, priv->auto_scan); break; + case PROP_ENABLE_TEST: + g_value_set_boolean (value, priv->enable_test); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -764,6 +799,9 @@ mm_manager_init (MMManager *manager) /* By default, enable autoscan */ priv->auto_scan = TRUE; + /* By default, no test interface */ + priv->enable_test = FALSE; + /* Setup Object Manager Server */ priv->object_manager = g_dbus_object_manager_server_new (MM_DBUS_PATH); @@ -805,6 +843,20 @@ initable_init (GInitable *initable, g_dbus_object_manager_server_set_connection (priv->object_manager, priv->connection); + /* Setup the Test skeleton and export the interface */ + if (priv->enable_test) { + priv->test_skeleton = mm_gdbus_test_skeleton_new (); + g_signal_connect (priv->test_skeleton, + "handle-set-profile", + G_CALLBACK (handle_set_profile), + initable); + if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->test_skeleton), + priv->connection, + MM_DBUS_PATH, + error)) + return FALSE; + } + /* All good */ return TRUE; } @@ -825,6 +877,9 @@ finalize (GObject *object) if (priv->object_manager) g_object_unref (priv->object_manager); + if (priv->test_skeleton) + g_object_unref (priv->test_skeleton); + if (priv->connection) g_object_unref (priv->connection); @@ -872,4 +927,12 @@ mm_manager_class_init (MMManagerClass *manager_class) "Automatically look for new devices", TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property + (object_class, PROP_ENABLE_TEST, + g_param_spec_boolean (MM_MANAGER_ENABLE_TEST, + "Enable tests", + "Enable the Test interface", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); } |