diff options
-rw-r--r-- | introspection/mm-modem-gsm-card.xml | 2 | ||||
-rw-r--r-- | src/mm-generic-gsm.c | 60 |
2 files changed, 61 insertions, 1 deletions
diff --git a/introspection/mm-modem-gsm-card.xml b/introspection/mm-modem-gsm-card.xml index 88942356..0181b6db 100644 --- a/introspection/mm-modem-gsm-card.xml +++ b/introspection/mm-modem-gsm-card.xml @@ -4,7 +4,7 @@ <interface name="org.freedesktop.ModemManager.Modem.Gsm.Card"> <method name="GetImei"> <tp:docstring> - Get the IMEI of the SIM card. + Get the IMEI of the card. </tp:docstring> <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_gsm_modem_get_imei"/> diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index 5035e3d5..eed0c83c 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -275,6 +275,64 @@ send_pin (MMModemGsmCard *modem, g_free (command); } +static void +enable_pin_done (MMSerial *serial, + GString *response, + GError *error, + gpointer user_data) +{ + MMCallbackInfo *info = (MMCallbackInfo *) user_data; + + if (error) + info->error = g_error_copy (error); + mm_callback_info_schedule (info); +} + +static void +enable_pin (MMModemGsmCard *modem, + const char *pin, + gboolean enabled, + MMModemFn callback, + gpointer user_data) +{ + MMCallbackInfo *info; + char *command; + + info = mm_callback_info_new (MM_MODEM (modem), callback, user_data); + command = g_strdup_printf ("+CLCK=\"SC\",%d,\"%s\"", enabled ? 1 : 0, pin); + mm_serial_queue_command (MM_SERIAL (modem), command, 3, enable_pin_done, info); + g_free (command); +} + +static void +change_pin_done (MMSerial *serial, + GString *response, + GError *error, + gpointer user_data) +{ + MMCallbackInfo *info = (MMCallbackInfo *) user_data; + + if (error) + info->error = g_error_copy (error); + mm_callback_info_schedule (info); +} + +static void +change_pin (MMModemGsmCard *modem, + const char *old_pin, + const char *new_pin, + MMModemFn callback, + gpointer user_data) +{ + MMCallbackInfo *info; + char *command; + + info = mm_callback_info_new (MM_MODEM (modem), callback, user_data); + command = g_strdup_printf ("+CPWD=\"SC\",\"%s\",\"%s\"", old_pin, new_pin); + mm_serial_queue_command (MM_SERIAL (modem), command, 3, change_pin_done, info); + g_free (command); +} + static char * parse_operator (const char *reply) { @@ -962,6 +1020,8 @@ modem_gsm_card_init (MMModemGsmCard *class) class->get_imsi = get_imsi; class->get_info = get_card_info; class->send_pin = send_pin; + class->enable_pin = enable_pin; + class->change_pin = change_pin; } static void |