aboutsummaryrefslogtreecommitdiff
path: root/plugins/mm-modem-wavecom-gsm.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/mm-modem-wavecom-gsm.c')
-rw-r--r--plugins/mm-modem-wavecom-gsm.c89
1 files changed, 78 insertions, 11 deletions
diff --git a/plugins/mm-modem-wavecom-gsm.c b/plugins/mm-modem-wavecom-gsm.c
index 3c8a49b0..c66637cf 100644
--- a/plugins/mm-modem-wavecom-gsm.c
+++ b/plugins/mm-modem-wavecom-gsm.c
@@ -239,12 +239,19 @@ set_band_done (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
if (error)
info->error = g_error_copy (error);
- else
+ else {
+ MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
priv->current_bands = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "new-band"));
+ }
mm_callback_info_schedule (info);
}
@@ -389,11 +396,16 @@ get_2g_band_done (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
if (error)
info->error = g_error_copy (error);
else {
+ MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
const gchar *p;
guint32 mm_band = MM_MODEM_GSM_BAND_UNKNOWN;
@@ -430,11 +442,16 @@ get_3g_band_done (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
if (error)
info->error = g_error_copy (error);
else {
+ MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
const gchar *p;
guint mm_band = MM_MODEM_GSM_BAND_UNKNOWN;
guint32 wavecom_band;
@@ -516,6 +533,11 @@ get_access_technology_cb (MMAtSerialPort *port,
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
const gchar *p;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error)
info->error = g_error_copy (error);
else {
@@ -583,19 +605,26 @@ get_allowed_mode_cb (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = user_data;
- MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+ MMModemWavecomGsmPrivate *priv;
gint read_mode = -1;
gchar *mode_str = NULL;
gchar *prefer_str = NULL;
GRegex *r = NULL;
GMatchInfo *match_info = NULL;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
info->error = g_error_copy (error);
mm_callback_info_schedule (info);
return;
}
+ priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
/* Possible responses:
* +WWSM: 0 (2G only)
* +WWSM: 1 (3G only)
@@ -706,12 +735,19 @@ set_allowed_mode_cb (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
if (error)
info->error = g_error_copy (error);
- else
+ else {
+ MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
priv->allowed_mode = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "new-mode"));
+ }
mm_callback_info_schedule (info);
}
@@ -813,17 +849,24 @@ set_highest_ms_class_cb (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
guint new_class;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
return;
}
new_class = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "new-class"));
- if (new_class)
+ if (new_class) {
+ MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
priv->current_ms_class = new_class;
+ }
/* All done without errors! */
mm_dbg ("[5/5] All done");
@@ -882,14 +925,21 @@ get_current_ms_class_cb (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = user_data;
- MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+ MMModemWavecomGsmPrivate *priv;
const gchar *p;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
return;
}
+ priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
p = mm_strip_tag (response->str, "+CGCLASS:");
if (strncmp (p,
@@ -936,14 +986,21 @@ get_supported_ms_classes_cb (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = user_data;
- MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+ MMModemWavecomGsmPrivate *priv;
const gchar *p;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
return;
}
+ priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
+
/* Reset currently supported MS classes */
priv->supported_ms_classes = 0;
@@ -996,6 +1053,11 @@ get_current_functionality_status_cb (MMAtSerialPort *port,
const gchar *p;
GError *inner_error;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
return;
@@ -1027,6 +1089,11 @@ do_enable_power_up_done (MMGenericGsm *gsm,
MMAtSerialPort *port;
GError *inner_error = NULL;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
enable_complete (gsm, error, info);
return;