mbm: send ENAP=0 on init to set modem back to sane state and ignore CIND errors
This commit is contained in:
@@ -166,16 +166,16 @@ mbm_cind_done (MMSerialPort *port,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||||
int quality = 0, ignored;
|
int quality = 100, ignored;
|
||||||
|
|
||||||
if (error)
|
/* cind is just used got get signal stregth; this seems to fail
|
||||||
info->error = g_error_copy (error);
|
* with some modem firmwares ... keep on going. */
|
||||||
else {
|
if (!error) {
|
||||||
if (sscanf (response->str, "+CIND: %d,%d", &ignored, &quality) == 2)
|
if (sscanf (response->str, "+CIND: %d,%d", &ignored, &quality) == 2)
|
||||||
quality *= 20; /* normalize to percent */
|
quality *= 20; /* normalize to percent */
|
||||||
|
|
||||||
mm_callback_info_set_result (info, GUINT_TO_POINTER (quality), NULL);
|
|
||||||
}
|
}
|
||||||
|
mm_callback_info_set_result (info, GUINT_TO_POINTER (quality), NULL);
|
||||||
mm_callback_info_schedule (info);
|
mm_callback_info_schedule (info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,7 +355,7 @@ mbm_enable_done (MMSerialPort *port,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mbm_init_done (MMSerialPort *port,
|
mbm_enap0_done (MMSerialPort *port,
|
||||||
GString *response,
|
GString *response,
|
||||||
GError *error,
|
GError *error,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
@@ -364,15 +364,29 @@ mbm_init_done (MMSerialPort *port,
|
|||||||
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
||||||
char *command;
|
char *command;
|
||||||
|
|
||||||
|
if (!priv->network_mode)
|
||||||
|
priv->network_mode = MBM_NETWORK_MODE_ANY;
|
||||||
|
command = g_strdup_printf ("+CFUN=%d", priv->network_mode);
|
||||||
|
mm_serial_port_queue_command (port, command, 3, mbm_enable_done, info);
|
||||||
|
g_free (command);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
mbm_init_done (MMSerialPort *port,
|
||||||
|
GString *response,
|
||||||
|
GError *error,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
MMCallbackInfo *info = user_data;
|
||||||
|
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
info->error = g_error_copy (error);
|
info->error = g_error_copy (error);
|
||||||
mm_callback_info_schedule (info);
|
mm_callback_info_schedule (info);
|
||||||
} else {
|
} else {
|
||||||
if (!priv->network_mode)
|
if (!priv->network_mode)
|
||||||
priv->network_mode = MBM_NETWORK_MODE_ANY;
|
priv->network_mode = MBM_NETWORK_MODE_ANY;
|
||||||
command = g_strdup_printf ("+CFUN=%d", priv->network_mode);
|
mm_serial_port_queue_command (port, "*ENAP=0", 3, mbm_enap0_done, info);
|
||||||
mm_serial_port_queue_command (port, command, 3, mbm_enable_done, info);
|
|
||||||
g_free (command);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user