aboutsummaryrefslogtreecommitdiff
path: root/src/mm-port.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-port.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-port.c')
-rw-r--r--src/mm-port.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/mm-port.c b/src/mm-port.c
index 715db958..7e8edc4f 100644
--- a/src/mm-port.c
+++ b/src/mm-port.c
@@ -28,6 +28,7 @@ enum {
PROP_SUBSYS,
PROP_TYPE,
PROP_CARRIER_DETECT,
+ PROP_CONNECTED,
LAST_PROP
};
@@ -39,6 +40,7 @@ typedef struct {
MMPortSubsys subsys;
MMPortType ptype;
gboolean carrier_detect;
+ gboolean connected;
} MMPortPrivate;
/*****************************************************************************/
@@ -117,6 +119,30 @@ mm_port_get_carrier_detect (MMPort *self)
return MM_PORT_GET_PRIVATE (self)->carrier_detect;
}
+gboolean
+mm_port_get_connected (MMPort *self)
+{
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (MM_IS_PORT (self), FALSE);
+
+ return MM_PORT_GET_PRIVATE (self)->connected;
+}
+
+void
+mm_port_set_connected (MMPort *self, gboolean connected)
+{
+ MMPortPrivate *priv;
+
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (MM_IS_PORT (self));
+
+ priv = MM_PORT_GET_PRIVATE (self);
+ if (priv->connected != connected) {
+ priv->connected = connected;
+ g_object_notify (G_OBJECT (self), MM_PORT_CONNECTED);
+ }
+}
+
/*****************************************************************************/
static void
@@ -146,6 +172,9 @@ set_property (GObject *object, guint prop_id,
case PROP_CARRIER_DETECT:
priv->carrier_detect = g_value_get_boolean (value);
break;
+ case PROP_CONNECTED:
+ priv->connected = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -171,6 +200,9 @@ get_property (GObject *object, guint prop_id,
case PROP_CARRIER_DETECT:
g_value_set_boolean (value, priv->carrier_detect);
break;
+ case PROP_CONNECTED:
+ g_value_set_boolean (value, priv->connected);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -235,4 +267,12 @@ mm_port_class_init (MMPortClass *klass)
"Has Carrier Detect",
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property
+ (object_class, PROP_CONNECTED,
+ g_param_spec_boolean (MM_PORT_CONNECTED,
+ "Connected",
+ "Is connected for data and not usable for control",
+ FALSE,
+ G_PARAM_READWRITE));
}