diff options
author | Dan Williams <dcbw@redhat.com> | 2010-03-19 11:01:19 -0700 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2010-03-19 11:01:19 -0700 |
commit | 85fc71818e3f3058cf256aaab1ba269a424a27f8 (patch) | |
tree | 8e7612df505f895fc4d6d81e42696af700bf16db /src/mm-generic-gsm.c | |
parent | 4558df894bb20a121ee1d2942c206b5bfde2c030 (diff) |
core: have modem base class handle card information
Diffstat (limited to 'src/mm-generic-gsm.c')
-rw-r--r-- | src/mm-generic-gsm.c | 103 |
1 files changed, 19 insertions, 84 deletions
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index 050229ea..e1aec8ee 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -746,6 +746,17 @@ get_allowed_mode_done (MMModem *modem, } } +static void +get_enable_info_done (MMModem *modem, + const char *manufacturer, + const char *model, + const char *version, + GError *error, + gpointer user_data) +{ + /* Modem base class handles the response for us */ +} + void mm_generic_gsm_enable_complete (MMGenericGsm *self, GError *error, @@ -783,6 +794,9 @@ mm_generic_gsm_enable_complete (MMGenericGsm *self, /* Try to enable XON/XOFF flow control */ mm_at_serial_port_queue_command (priv->primary, "+IFC=1,1", 3, NULL, NULL); + /* Grab device info right away */ + mm_modem_get_info (MM_MODEM (self), get_enable_info_done, NULL); + /* Get allowed mode */ if (MM_GENERIC_GSM_GET_CLASS (self)->get_allowed_mode) MM_GENERIC_GSM_GET_CLASS (self)->get_allowed_mode (self, get_allowed_mode_done, NULL); @@ -1075,95 +1089,16 @@ get_imsi (MMModemGsmCard *modem, } static void -card_info_invoke (MMCallbackInfo *info) -{ - MMModemInfoFn callback = (MMModemInfoFn) info->callback; - - callback (info->modem, - (char *) mm_callback_info_get_data (info, "card-info-manufacturer"), - (char *) mm_callback_info_get_data (info, "card-info-model"), - (char *) mm_callback_info_get_data (info, "card-info-version"), - info->error, info->user_data); -} - -#define GMI_RESP_TAG "+CGMI:" -#define GMM_RESP_TAG "+CGMM:" -#define GMR_RESP_TAG "+CGMR:" - -static const char * -strip_tag (const char *str, const char *tag) -{ - /* Strip the response header, if any */ - if (strncmp (str, tag, strlen (tag)) == 0) - str += strlen (tag); - while (*str && isspace (*str)) - str++; - return str; -} - -static void -get_version_done (MMAtSerialPort *port, - GString *response, - GError *error, - gpointer user_data) -{ - MMCallbackInfo *info = (MMCallbackInfo *) user_data; - const char *resp = strip_tag (response->str, GMR_RESP_TAG); - - if (!error) - mm_callback_info_set_data (info, "card-info-version", g_strdup (resp), g_free); - else if (!info->error) - info->error = g_error_copy (error); - - mm_callback_info_schedule (info); -} - -static void -get_model_done (MMAtSerialPort *port, - GString *response, - GError *error, - gpointer user_data) -{ - MMCallbackInfo *info = (MMCallbackInfo *) user_data; - const char *resp = strip_tag (response->str, GMM_RESP_TAG); - - if (!error) - mm_callback_info_set_data (info, "card-info-model", g_strdup (resp), g_free); - else if (!info->error) - info->error = g_error_copy (error); -} - -static void -get_manufacturer_done (MMAtSerialPort *port, - GString *response, - GError *error, - gpointer user_data) -{ - MMCallbackInfo *info = (MMCallbackInfo *) user_data; - const char *resp = strip_tag (response->str, GMI_RESP_TAG); - - if (!error) - mm_callback_info_set_data (info, "card-info-manufacturer", g_strdup (resp), g_free); - else - info->error = g_error_copy (error); -} - -static void get_card_info (MMModem *modem, MMModemInfoFn callback, gpointer user_data) { - MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (modem); - MMCallbackInfo *info; - - info = mm_callback_info_new_full (MM_MODEM (modem), - card_info_invoke, - G_CALLBACK (callback), - user_data); + MMAtSerialPort *port; + GError *error = NULL; - mm_at_serial_port_queue_command_cached (priv->primary, "+CGMI", 3, get_manufacturer_done, info); - mm_at_serial_port_queue_command_cached (priv->primary, "+CGMM", 3, get_model_done, info); - mm_at_serial_port_queue_command_cached (priv->primary, "+CGMR", 3, get_version_done, info); + port = mm_generic_gsm_get_best_at_port (MM_GENERIC_GSM (modem), &error); + mm_modem_base_get_card_info (MM_MODEM_BASE (modem), port, error, callback, user_data); + g_clear_error (&error); } #define PIN_CLOSE_PORT_TAG "pin-close-port" |