diff options
author | Dan Williams <dcbw@redhat.com> | 2009-07-06 11:40:22 -0400 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-07-06 11:40:22 -0400 |
commit | 736aa0d2d63cf62e7e2fe3c6e25ddf6b57f6ff05 (patch) | |
tree | b82239e25796040e71c97dff9d8b7f7fa0b337c5 /src/mm-port.c | |
parent | 869c69e223208564302ba3be074dafbdf1b02cc2 (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.c | 40 |
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)); } |