From 1c3101fbaf74cbb9d8d0eb52ad6f84dc01544cf0 Mon Sep 17 00:00:00 2001 From: Nathan Williams Date: Thu, 14 Apr 2011 13:22:54 -0500 Subject: serial: allow spew control to be turned off It's only used during probing where some port types (Sierra CnS and some Icera devices) may send streams of data that we can't understand until we close the port. It interferes with some SMS operations, so turn it off for ports opened after probing. --- src/mm-plugin-base.c | 1 + src/mm-serial-port.c | 18 +++++++++++++++++- src/mm-serial-port.h | 13 +++++++------ 3 files changed, 25 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/mm-plugin-base.c b/src/mm-plugin-base.c index 88dd5405..1b5fc64c 100644 --- a/src/mm-plugin-base.c +++ b/src/mm-plugin-base.c @@ -872,6 +872,7 @@ mm_plugin_base_probe_port (MMPluginBase *self, g_object_set (serial, MM_SERIAL_PORT_SEND_DELAY, send_delay_us, MM_PORT_CARRIER_DETECT, FALSE, + MM_SERIAL_PORT_SPEW_CONTROL, TRUE, NULL); mm_at_serial_port_set_response_parser (serial, diff --git a/src/mm-serial-port.c b/src/mm-serial-port.c index f05a1aea..ab196140 100644 --- a/src/mm-serial-port.c +++ b/src/mm-serial-port.c @@ -44,6 +44,7 @@ enum { PROP_STOPBITS, PROP_SEND_DELAY, PROP_FD, + PROP_SPEW_CONTROL, LAST_PROP }; @@ -67,6 +68,7 @@ typedef struct { char parity; guint stopbits; guint64 send_delay; + gboolean spew_control; guint queue_id; guint watch_id; @@ -657,7 +659,7 @@ data_available (GIOChannel *source, } /* Make sure the response doesn't grow too long */ - if (priv->response->len > SERIAL_BUF_SIZE) { + if ((priv->response->len > SERIAL_BUF_SIZE) && priv->spew_control) { /* Notify listeners and then trim the buffer */ g_signal_emit_by_name (self, "buffer-full", priv->response); g_byte_array_remove_range (priv->response, 0, (SERIAL_BUF_SIZE / 2)); @@ -1250,6 +1252,9 @@ set_property (GObject *object, guint prop_id, case PROP_SEND_DELAY: priv->send_delay = g_value_get_uint64 (value); break; + case PROP_SPEW_CONTROL: + priv->spew_control = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1281,6 +1286,9 @@ get_property (GObject *object, guint prop_id, case PROP_SEND_DELAY: g_value_set_uint64 (value, priv->send_delay); break; + case PROP_SPEW_CONTROL: + g_value_set_boolean (value, priv->spew_control); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1383,6 +1391,14 @@ mm_serial_port_class_init (MMSerialPortClass *klass) 0, G_MAXUINT64, 0, G_PARAM_READWRITE)); + g_object_class_install_property + (object_class, PROP_SPEW_CONTROL, + g_param_spec_boolean (MM_SERIAL_PORT_SPEW_CONTROL, + "SpewControl", + "Spew control", + FALSE, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)); + /* Signals */ g_signal_new ("buffer-full", G_OBJECT_CLASS_TYPE (object_class), diff --git a/src/mm-serial-port.h b/src/mm-serial-port.h index 5fee1b4f..57ef94be 100644 --- a/src/mm-serial-port.h +++ b/src/mm-serial-port.h @@ -30,12 +30,13 @@ #define MM_IS_SERIAL_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_SERIAL_PORT)) #define MM_SERIAL_PORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_SERIAL_PORT, MMSerialPortClass)) -#define MM_SERIAL_PORT_BAUD "baud" -#define MM_SERIAL_PORT_BITS "bits" -#define MM_SERIAL_PORT_PARITY "parity" -#define MM_SERIAL_PORT_STOPBITS "stopbits" -#define MM_SERIAL_PORT_SEND_DELAY "send-delay" -#define MM_SERIAL_PORT_FD "fd" /* Construct-only */ +#define MM_SERIAL_PORT_BAUD "baud" +#define MM_SERIAL_PORT_BITS "bits" +#define MM_SERIAL_PORT_PARITY "parity" +#define MM_SERIAL_PORT_STOPBITS "stopbits" +#define MM_SERIAL_PORT_SEND_DELAY "send-delay" +#define MM_SERIAL_PORT_FD "fd" /* Construct-only */ +#define MM_SERIAL_PORT_SPEW_CONTROL "spew-control" /* Construct-only */ typedef struct _MMSerialPort MMSerialPort; typedef struct _MMSerialPortClass MMSerialPortClass; -- cgit v1.2.3-70-g09d2