diff options
-rw-r--r-- | cli/main.c | 66 |
1 files changed, 66 insertions, 0 deletions
@@ -42,6 +42,7 @@ static GCancellable *cancellable; static gboolean version_flag; static gboolean async_flag; static gboolean list_modems_flag; +static gboolean monitor_modems_flag; static GOptionEntry entries[] = { { "version", 'V', 0, G_OPTION_ARG_NONE, &version_flag, @@ -56,6 +57,10 @@ static GOptionEntry entries[] = { "List available modems", NULL }, + { "monitor-modems", 'm', 0, G_OPTION_ARG_NONE, &monitor_modems_flag, + "List available modems and monitor additions and removals", + NULL + }, { NULL } }; @@ -139,6 +144,26 @@ enumerate_devices_ready (MMManager *manager, } static void +device_added (MMManager *manager, + const gchar *path) +{ + g_print ("%s: '%s'\n", + "Added modem", + path); + fflush (stdout); +} + +static void +device_removed (MMManager *manager, + const gchar *path) +{ + g_print ("%s: '%s'\n", + "Removed modem", + path); + fflush (stdout); +} + +static void asynchronous (MMManager *manager) { g_debug ("Running asynchronous operations..."); @@ -146,6 +171,18 @@ asynchronous (MMManager *manager) /* Setup global cancellable */ cancellable = g_cancellable_new (); + /* Request to monitor modems? */ + if (monitor_modems_flag) { + g_signal_connect (manager, + "device-added", + G_CALLBACK (device_added), + NULL); + g_signal_connect (manager, + "device-removed", + G_CALLBACK (device_removed), + NULL); + } + /* Request to list modems? */ if (list_modems_flag) { mm_manager_enumerate_devices_async (manager, @@ -174,6 +211,32 @@ synchronous (MMManager *manager) } } +static void +ensure_single_action (void) +{ + guint n_actions; + + n_actions = (list_modems_flag + + monitor_modems_flag); + + if (n_actions == 0) + print_version_and_exit (); + + if (n_actions > 1) { + g_printerr ("error, too many actions requested\n"); + exit (EXIT_FAILURE); + } + + /* Additional fixes to the modem monitoring request */ + if (monitor_modems_flag) { + /* Do not stop loop after listing initial modems */ + keep_loop = TRUE; + /* Assume an implicit list modems request */ + list_modems_flag = TRUE; + /* Monitoring always asynchronously */ + async_flag = TRUE; + } +} gint main (gint argc, gchar **argv) @@ -192,6 +255,9 @@ main (gint argc, gchar **argv) if (version_flag) print_version_and_exit (); + /* We must have exactly 1 action requested */ + ensure_single_action (); + g_type_init (); /* Setup signals */ |