aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-06-22 16:00:58 +0200
committerAleksander Morgado <aleksander@lanedo.com>2011-06-22 16:00:58 +0200
commit7e69d2cf307efdb4ddec5ef0eef9f6141bf8fa65 (patch)
tree93be99f9302d1fc4b0b0b7a24752245ee3ffcede
parent39abb023ed180d03ea8324285116e228b46cd411 (diff)
cinterion: always try to use RTS/CTS flow control
Otherwise, power-up after going to standby will not work properly
-rw-r--r--plugins/mm-modem-cinterion-gsm.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/plugins/mm-modem-cinterion-gsm.c b/plugins/mm-modem-cinterion-gsm.c
index 34a5d6dc..df10fdbf 100644
--- a/plugins/mm-modem-cinterion-gsm.c
+++ b/plugins/mm-modem-cinterion-gsm.c
@@ -27,9 +27,11 @@
#include "mm-serial-parsers.h"
#include "mm-log.h"
+static void modem_init (MMModem *modem_class);
static void modem_gsm_network_init (MMModemGsmNetwork *gsm_network_class);
G_DEFINE_TYPE_EXTENDED (MMModemCinterionGsm, mm_modem_cinterion_gsm, MM_TYPE_GENERIC_GSM, 0,
+ G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM, modem_init)
G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM_GSM_NETWORK, modem_gsm_network_init))
/* Mask of all bands supported in 2G devices */
@@ -135,6 +137,37 @@ mm_modem_cinterion_gsm_new (const char *device,
NULL));
}
+static gboolean
+grab_port (MMModem *modem,
+ const char *subsys,
+ const char *name,
+ MMPortType suggested_type,
+ gpointer user_data,
+ GError **error)
+{
+ MMGenericGsm *gsm = MM_GENERIC_GSM (modem);
+ MMPortType ptype = MM_PORT_TYPE_IGNORED;
+ MMPort *port = NULL;
+
+ if (suggested_type == MM_PORT_TYPE_UNKNOWN) {
+ if (!mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_PRIMARY))
+ ptype = MM_PORT_TYPE_PRIMARY;
+ else if (!mm_generic_gsm_get_at_port (gsm, MM_PORT_TYPE_SECONDARY))
+ ptype = MM_PORT_TYPE_SECONDARY;
+ } else
+ ptype = suggested_type;
+
+ port = mm_generic_gsm_grab_port (gsm, subsys, name, ptype, error);
+ if (port && MM_IS_AT_SERIAL_PORT (port)) {
+ /* Set RTS/CTS flow control by default */
+ g_object_set (G_OBJECT (port),
+ MM_SERIAL_PORT_RTS_CTS, TRUE,
+ NULL);
+ }
+
+ return !!port;
+}
+
static void
convert_str_from_ucs2 (gchar **str)
{
@@ -1041,6 +1074,12 @@ finalize (GObject *object)
/*****************************************************************************/
static void
+modem_init (MMModem *modem_class)
+{
+ modem_class->grab_port = grab_port;
+}
+
+static void
modem_gsm_network_init (MMModemGsmNetwork *network_class)
{
network_class->set_band = set_band;