From 033510ffc9b8fc50c96ee61e1749f3e758287480 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Tue, 24 Jan 2012 17:59:05 +0100 Subject: [PATCH] WIP: try read-only secondary port --- plugins/mm-plugin-huawei.c | 3 ++- src/mm-generic-gsm.c | 21 +++++++++++++++++++++ src/mm-port.h | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/plugins/mm-plugin-huawei.c b/plugins/mm-plugin-huawei.c index e6c02d4..13ba9b5 100644 --- a/plugins/mm-plugin-huawei.c +++ b/plugins/mm-plugin-huawei.c @@ -279,7 +279,8 @@ grab_port (MMPluginBase *base, if ( (port_usbif == pcui_usbif) || (caps & MM_PLUGIN_BASE_PORT_CAP_GSM) || (caps & CAP_CDMA)) - ptype = MM_PORT_TYPE_SECONDARY; + /* Setting as secondary-unsolicited so that we don not send any command to that port */ + ptype = MM_PORT_TYPE_SECONDARY_UNSOLICITED; else if (caps & MM_PLUGIN_BASE_PORT_CAP_QCDM) ptype = MM_PORT_TYPE_QCDM; diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index e361262..2286506 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -114,6 +114,7 @@ typedef struct { MMAtSerialPort *primary; MMAtSerialPort *secondary; + MMAtSerialPort *secondary_unsolicited; MMQcdmSerialPort *qcdm; MMPort *data; @@ -915,6 +916,8 @@ mm_generic_gsm_grab_port (MMGenericGsm *self, } else if (ptype == MM_PORT_TYPE_SECONDARY) priv->secondary = MM_AT_SERIAL_PORT (port); + else if (ptype == MM_PORT_TYPE_SECONDARY_UNSOLICITED) + priv->secondary_unsolicited = MM_AT_SERIAL_PORT (port); } else if (MM_IS_QCDM_SERIAL_PORT (port)) { if (!priv->qcdm) priv->qcdm = MM_QCDM_SERIAL_PORT (port); @@ -987,6 +990,11 @@ release_port (MMModem *modem, const char *subsys, const char *name) priv->secondary = NULL; } + if (port == (MMPort *) priv->secondary_unsolicited) { + mm_modem_base_remove_port (MM_MODEM_BASE (modem), port); + priv->secondary_unsolicited = NULL; + } + if (port == (MMPort *) priv->qcdm) { mm_modem_base_remove_port (MM_MODEM_BASE (modem), port); priv->qcdm = NULL; @@ -1255,6 +1263,8 @@ enable_failed (MMModem *modem, GError *error, MMCallbackInfo *info) mm_serial_port_close_force (MM_SERIAL_PORT (priv->primary)); if (priv->secondary && mm_serial_port_is_open (MM_SERIAL_PORT (priv->secondary))) mm_serial_port_close_force (MM_SERIAL_PORT (priv->secondary)); + if (priv->secondary_unsolicited && mm_serial_port_is_open (MM_SERIAL_PORT (priv->secondary_unsolicited))) + mm_serial_port_close_force (MM_SERIAL_PORT (priv->secondary_unsolicited)); mm_callback_info_schedule (info); } @@ -1911,6 +1921,14 @@ mm_generic_gsm_enable_complete (MMGenericGsm *self, } } + if (priv->secondary_unsolicited) { + if (!mm_serial_port_open (MM_SERIAL_PORT (priv->secondary_unsolicited), &error)) { + mm_dbg ("error opening secondary (unsolicited-only) port: (%d) %s", + error ? error->code : -1, + error && error->message ? error->message : "(unknown)"); + } + } + /* Try to enable flow control */ g_object_get (G_OBJECT (info->modem), MM_GENERIC_GSM_FLOW_CONTROL_CMD, &cmd, NULL); if (cmd && strlen (cmd)) @@ -2289,6 +2307,9 @@ disable (MMModem *modem, GUINT_TO_POINTER (state), NULL); + if (priv->secondary_unsolicited && mm_serial_port_is_open (MM_SERIAL_PORT (priv->secondary_unsolicited))) + mm_serial_port_close_force (MM_SERIAL_PORT (priv->secondary_unsolicited)); + /* Clean up the secondary port if it's open */ if (priv->secondary && mm_serial_port_is_open (MM_SERIAL_PORT (priv->secondary))) { mm_dbg("Shutting down secondary port"); diff --git a/src/mm-port.h b/src/mm-port.h index df935db..4f630b2 100644 --- a/src/mm-port.h +++ b/src/mm-port.h @@ -31,6 +31,7 @@ typedef enum { MM_PORT_TYPE_UNKNOWN = 0x0, MM_PORT_TYPE_PRIMARY, MM_PORT_TYPE_SECONDARY, + MM_PORT_TYPE_SECONDARY_UNSOLICITED, MM_PORT_TYPE_IGNORED, MM_PORT_TYPE_QCDM, @@ -80,4 +81,3 @@ const char * mm_port_type_to_name (MMPortType ptype); const char * mm_port_subsys_to_name (MMPortSubsys psubsys); #endif /* MM_PORT_H */ - -- 1.7.6