aboutsummaryrefslogtreecommitdiff
path: root/src/mm-generic-gsm.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2009-07-06 11:40:22 -0400
committerDan Williams <dcbw@redhat.com>2009-07-06 11:40:22 -0400
commit736aa0d2d63cf62e7e2fe3c6e25ddf6b57f6ff05 (patch)
treeb82239e25796040e71c97dff9d8b7f7fa0b337c5 /src/mm-generic-gsm.c
parent869c69e223208564302ba3be074dafbdf1b02cc2 (diff)
serial: rework 'connected' logic
So many modems just don't implement carrier detect that it makes the previous 'connected' logic useless, so base it off connect/disconnect and fix up a few places that didn't check connect status before trying to send commands. Also ensure the serial port is unlocked for PPP to use when connected.
Diffstat (limited to 'src/mm-generic-gsm.c')
-rw-r--r--src/mm-generic-gsm.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c
index 8435ee8e..743a2466 100644
--- a/src/mm-generic-gsm.c
+++ b/src/mm-generic-gsm.c
@@ -23,7 +23,6 @@ typedef struct {
gboolean valid;
- char *data_device;
char *oper_code;
char *oper_name;
guint32 ip_method;
@@ -406,7 +405,7 @@ enable (MMModem *modem,
if (!do_enable) {
mm_generic_gsm_pending_registration_stop (MM_GENERIC_GSM (modem));
- if (mm_serial_port_is_connected (priv->primary))
+ if (mm_port_get_connected (MM_PORT (priv->primary)))
mm_serial_port_flash (priv->primary, 1000, disable_flash_done, info);
else
disable_flash_done (priv->primary, info);
@@ -976,17 +975,19 @@ connect_done (MMSerialPort *port,
GError *error,
gpointer user_data)
{
- MMGenericGsmPrivate *priv;
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
+ MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (info->modem);
if (error) {
info->error = g_error_copy (error);
/* Try to get more information why it failed */
priv = MM_GENERIC_GSM_GET_PRIVATE (info->modem);
mm_serial_port_queue_command (priv->primary, "+CEER", 3, connect_report_done, info);
- } else
+ } else {
/* Done */
+ mm_port_set_connected (priv->data, TRUE);
mm_callback_info_schedule (info);
+ }
}
static void
@@ -1023,7 +1024,11 @@ connect (MMModem *modem,
static void
disconnect_flash_done (MMSerialPort *port, gpointer user_data)
{
- mm_callback_info_schedule ((MMCallbackInfo *) user_data);
+ MMCallbackInfo *info = (MMCallbackInfo *) user_data;
+ MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (info->modem);
+
+ mm_port_set_connected (priv->data, FALSE);
+ mm_callback_info_schedule (info);
}
static void
@@ -1361,7 +1366,7 @@ get_signal_quality (MMModemGsmNetwork *modem,
MMCallbackInfo *info;
gboolean connected;
- connected = mm_serial_port_is_connected (priv->primary);
+ connected = mm_port_get_connected (MM_PORT (priv->primary));
if (connected && !priv->secondary) {
g_message ("Returning saved signal quality %d", priv->signal_quality);
callback (MM_MODEM (modem), priv->signal_quality, NULL, user_data);
@@ -1408,14 +1413,14 @@ sms_send (MMModemGsmSms *modem,
info = mm_callback_info_new (MM_MODEM (modem), callback, user_data);
priv = MM_GENERIC_GSM_GET_PRIVATE (info->modem);
- connected = mm_serial_port_is_connected (priv->primary);
+ connected = mm_port_get_connected (MM_PORT (priv->primary));
if (connected)
port = priv->secondary;
else
port = priv->primary;
if (!port) {
- info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
+ info->error = g_error_new_literal (MM_MODEM_ERROR, MM_MODEM_ERROR_CONNECTED,
"Cannot send SMS while connected");
mm_callback_info_schedule (info);
return;
@@ -1827,7 +1832,6 @@ finalize (GObject *object)
mm_generic_gsm_pending_registration_stop (MM_GENERIC_GSM (object));
g_free (priv->driver);
- g_free (priv->data_device);
g_free (priv->oper_code);
g_free (priv->oper_name);