diff options
author | Tambet Ingo <tambet@gmail.com> | 2008-09-15 17:08:46 +0300 |
---|---|---|
committer | Tambet Ingo <tambet@gmail.com> | 2008-09-15 17:08:46 +0300 |
commit | f570e1517dcf293583614d671b6dd7aae93f028f (patch) | |
tree | 27b2654a2a4ecb4c7d68ffd63e026097bb8fefc7 | |
parent | 1455c424c2a5b2fcb61163b2feb3a2aadc0bfad0 (diff) |
Implement PIN changing and enabling/disabling.
-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 |