From f93e24dda3fa790ca9dd9a0471aa5fc26495a04c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 25 Oct 2010 21:00:26 -0500 Subject: [PATCH] sierra: fix ICCID requests Depending on when the core requested the ICCID, the port may or may not be open. Stuff that needs an open serial port needs to make sure that the port gets opened itself. --- plugins/mm-modem-sierra-gsm.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/plugins/mm-modem-sierra-gsm.c b/plugins/mm-modem-sierra-gsm.c index b33af6b2..f8eac045 100644 --- a/plugins/mm-modem-sierra-gsm.c +++ b/plugins/mm-modem-sierra-gsm.c @@ -293,26 +293,33 @@ get_sim_iccid_done (MMAtSerialPort *port, } done: + mm_serial_port_close (MM_SERIAL_PORT (port)); mm_callback_info_schedule (info); } static void get_sim_iccid (MMGenericGsm *modem, MMModemStringFn callback, - gpointer user_data) + gpointer callback_data) { MMAtSerialPort *port; MMCallbackInfo *info; + GError *error = NULL; - info = mm_callback_info_string_new (MM_MODEM (modem), callback, user_data); + port = mm_generic_gsm_get_best_at_port (modem, &error); + if (!port) + goto error; - port = mm_generic_gsm_get_best_at_port (modem, &info->error); - if (!port) { - mm_callback_info_schedule (info); - return; - } + if (!mm_serial_port_open (MM_SERIAL_PORT (port), &error)) + goto error; + info = mm_callback_info_string_new (MM_MODEM (modem), callback, callback_data); mm_at_serial_port_queue_command (port, "!ICCID?", 3, get_sim_iccid_done, info); + return; + +error: + callback (MM_MODEM (modem), NULL, error, callback_data); + g_clear_error (&error); } /*****************************************************************************/