diff options
author | Tambet Ingo <tambet@gmail.com> | 2009-01-13 11:27:41 +0200 |
---|---|---|
committer | Tambet Ingo <tambet@gmail.com> | 2009-01-13 11:27:41 +0200 |
commit | 6018ff81babf1296f13fa0f45a60faae4fd7e0d5 (patch) | |
tree | e15bdcb178ab6ae49f9355a6d591d4bf024fd2f1 /src | |
parent | 50d2a8b80c25f25e3327127d725277c70570cff3 (diff) |
Implement DCD disabling for serial base class.
Turn DCD detection off for certain Huawei modems that don't report it
correctly.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-serial.c | 29 | ||||
-rw-r--r-- | src/mm-serial.h | 1 |
2 files changed, 26 insertions, 4 deletions
diff --git a/src/mm-serial.c b/src/mm-serial.c index 36a42de1..fb3cad18 100644 --- a/src/mm-serial.c +++ b/src/mm-serial.c @@ -29,6 +29,7 @@ enum { PROP_PARITY, PROP_STOPBITS, PROP_SEND_DELAY, + PROP_CARRIER_DETECT, LAST_PROP }; @@ -57,6 +58,7 @@ typedef struct { char parity; guint stopbits; guint64 send_delay; + gboolean carrier_detect; guint queue_schedule; guint watch_id; @@ -688,16 +690,20 @@ mm_serial_flash (MMSerial *self, gboolean mm_serial_is_connected (MMSerial *self) { - int fd; + MMSerialPrivate *priv; int mcs = 0; g_return_val_if_fail (MM_IS_SERIAL (self), FALSE); - fd = MM_SERIAL_GET_PRIVATE (self)->fd; - if (fd == 0) + priv = MM_SERIAL_GET_PRIVATE (self); + + if (!priv->carrier_detect) return FALSE; - if (ioctl (fd, TIOCMGET, &mcs) < 0) + if (priv->fd == 0) + return FALSE; + + if (ioctl (priv->fd, TIOCMGET, &mcs) < 0) return FALSE; return mcs & TIOCM_CAR ? TRUE : FALSE; @@ -715,6 +721,7 @@ mm_serial_init (MMSerial *self) priv->parity = 'n'; priv->stopbits = 1; priv->send_delay = 1000; + priv->carrier_detect = TRUE; priv->queue = g_queue_new (); priv->command = g_string_new_len ("AT", SERIAL_BUF_SIZE); @@ -772,6 +779,9 @@ set_property (GObject *object, guint prop_id, case PROP_SEND_DELAY: priv->send_delay = g_value_get_uint64 (value); break; + case PROP_CARRIER_DETECT: + priv->carrier_detect = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -803,6 +813,9 @@ get_property (GObject *object, guint prop_id, case PROP_SEND_DELAY: g_value_set_uint64 (value, priv->send_delay); break; + case PROP_CARRIER_DETECT: + g_value_set_boolean (value, priv->carrier_detect); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -889,4 +902,12 @@ mm_serial_class_init (MMSerialClass *klass) "Send delay", 0, G_MAXUINT64, 0, G_PARAM_READWRITE)); + + g_object_class_install_property + (object_class, PROP_CARRIER_DETECT, + g_param_spec_boolean (MM_SERIAL_CARRIER_DETECT, + "CarrierDetect", + "Has carrier detect", + TRUE, + G_PARAM_READWRITE)); } diff --git a/src/mm-serial.h b/src/mm-serial.h index 6fc1f845..eeaac9c1 100644 --- a/src/mm-serial.h +++ b/src/mm-serial.h @@ -19,6 +19,7 @@ #define MM_SERIAL_PARITY "parity" #define MM_SERIAL_STOPBITS "stopbits" #define MM_SERIAL_SEND_DELAY "send-delay" +#define MM_SERIAL_CARRIER_DETECT "carrier-detect" typedef struct _MMSerial MMSerial; typedef struct _MMSerialClass MMSerialClass; |