diff options
Diffstat (limited to 'src/mm-generic-gsm.c')
-rw-r--r-- | src/mm-generic-gsm.c | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index 840a5ab0..eb712aba 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -397,6 +397,10 @@ init_done (MMSerialPort *port, */ mm_serial_port_queue_command (port, "E0 +CMEE=1", 2, NULL, NULL); + g_object_get (G_OBJECT (info->modem), MM_GENERIC_GSM_INIT_CMD_OPTIONAL, &cmd, NULL); + mm_serial_port_queue_command (port, cmd, 2, NULL, NULL); + g_free (cmd); + if (MM_GENERIC_GSM_GET_PRIVATE (info->modem)->unsolicited_registration) mm_serial_port_queue_command (port, "+CREG=1", 5, NULL, NULL); else @@ -1311,7 +1315,7 @@ scan (MMModemGsmNetwork *modem, G_CALLBACK (callback), user_data); - mm_serial_port_queue_command (priv->primary, "+COPS=?", 60, scan_done, info); + mm_serial_port_queue_command (priv->primary, "+COPS=?", 120, scan_done, info); } /* SetApn */ @@ -1505,15 +1509,20 @@ get_signal_quality_done (MMSerialPort *port, reply += 6; - if (sscanf (reply, "%d,%d", &quality, &ber)) { + if (sscanf (reply, "%d, %d", &quality, &ber)) { /* 99 means unknown */ - if (quality != 99) + if (quality == 99) { + info->error = g_error_new_literal (MM_MOBILE_ERROR, + MM_MOBILE_ERROR_NO_NETWORK, + "No service"); + } else { /* Normalize the quality */ - quality = quality * 100 / 31; + quality = CLAMP (quality, 0, 31) * 100 / 31; - priv = MM_GENERIC_GSM_GET_PRIVATE (info->modem); - priv->signal_quality = quality; - mm_callback_info_set_result (info, GUINT_TO_POINTER (quality), NULL); + priv = MM_GENERIC_GSM_GET_PRIVATE (info->modem); + priv->signal_quality = quality; + mm_callback_info_set_result (info, GUINT_TO_POINTER (quality), NULL); + } } else info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL, "Could not parse signal quality results"); @@ -1919,6 +1928,7 @@ set_property (GObject *object, guint prop_id, case MM_GENERIC_GSM_PROP_POWER_UP_CMD: case MM_GENERIC_GSM_PROP_POWER_DOWN_CMD: case MM_GENERIC_GSM_PROP_INIT_CMD: + case MM_GENERIC_GSM_PROP_INIT_CMD_OPTIONAL: case MM_GENERIC_GSM_PROP_SUPPORTED_BANDS: case MM_GENERIC_GSM_PROP_SUPPORTED_MODES: break; @@ -1958,7 +1968,10 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, ""); break; case MM_GENERIC_GSM_PROP_INIT_CMD: - g_value_set_string (value, "Z E0 V1 X4 &C1 +CMEE=1"); + g_value_set_string (value, "Z E0 V1 +CMEE=1"); + break; + case MM_GENERIC_GSM_PROP_INIT_CMD_OPTIONAL: + g_value_set_string (value, "X4 &C1"); break; case MM_GENERIC_GSM_PROP_SUPPORTED_BANDS: g_value_set_uint (value, 0); @@ -2038,5 +2051,13 @@ mm_generic_gsm_class_init (MMGenericGsmClass *klass) "Initialization command", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property + (object_class, MM_GENERIC_GSM_PROP_INIT_CMD_OPTIONAL, + g_param_spec_string (MM_GENERIC_GSM_INIT_CMD_OPTIONAL, + "InitCommandOptional", + "Optional initialization command (errors ignored)", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); } |