From 622a3e3880f0f4c57c4708d7d804848806bd57bb Mon Sep 17 00:00:00 2001 From: Tambet Ingo Date: Wed, 28 May 2008 15:08:51 +0000 Subject: [PATCH] 2008-05-28 Tambet Ingo Patch from Dennis Noordsij . * src/nm-gsm-device.c: Don't try to reset the modem before PIN is checked, it doesn't work on some devices. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3696 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 7 +++++++ src/nm-gsm-device.c | 47 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 44e404655b..5237130018 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-05-28 Tambet Ingo + + Patch from Dennis Noordsij . + + * src/nm-gsm-device.c: Don't try to reset the modem before PIN is + checked, it doesn't work on some devices. + 2008-05-28 Tambet Ingo * src/ppp-manager/nm-ppp-manager.c (nm_ppp_manager_stop): Make sure diff --git a/src/nm-gsm-device.c b/src/nm-gsm-device.c index c57a75c11c..b237023b30 100644 --- a/src/nm-gsm-device.c +++ b/src/nm-gsm-device.c @@ -310,6 +310,49 @@ do_register (NMSerialDevice *device) automatic_registration (device); } +static void +init_full_done (NMSerialDevice *device, + int reply_index, + gpointer user_data) +{ + gsm_device_set_pending (NM_GSM_DEVICE (device), 0); + + switch (reply_index) { + case 0: + do_register (device); + break; + case -1: + nm_warning ("Modem second stage initialization timed out"); + nm_device_state_changed (NM_DEVICE (device), NM_DEVICE_STATE_FAILED); + break; + default: + nm_warning ("Modem second stage initialization failed"); + nm_device_state_changed (NM_DEVICE (device), NM_DEVICE_STATE_FAILED); + return; + } +} + +static void +init_modem_full (NMSerialDevice *device) +{ + guint id; + char *responses[] = { "OK", "ERROR", "ERR", NULL }; + + /* At this point we know that SIM has been unlocked, and we can safely + * initialize the modem + */ + if (!nm_serial_device_send_command_string (device, "ATZ")) { + nm_device_state_changed (NM_DEVICE (device), NM_DEVICE_STATE_FAILED); + return; + } + + id = nm_serial_device_wait_for_reply (device, 10, responses, responses, init_full_done, NULL); + if (id) + gsm_device_set_pending (NM_GSM_DEVICE (device), id); + else + nm_device_state_changed (NM_DEVICE (device), NM_DEVICE_STATE_FAILED); +} + static void enter_pin_done (NMSerialDevice *device, int reply_index, @@ -318,10 +361,9 @@ enter_pin_done (NMSerialDevice *device, NMSettingGsm *setting; gsm_device_set_pending (NM_GSM_DEVICE (device), 0); - switch (reply_index) { case 0: - do_register (device); + init_modem_full (device); break; case -1: nm_warning ("Did not receive response for secret"); @@ -484,7 +526,6 @@ init_modem (NMSerialDevice *device, gpointer user_data) { guint id; char *responses[] = { "OK", "ERROR", "ERR", NULL }; - if (!nm_serial_device_send_command_string (device, "ATZ E0")) { nm_device_state_changed (NM_DEVICE (device), NM_DEVICE_STATE_FAILED); return;