diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-06-22 16:00:58 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2011-06-22 16:00:58 +0200 |
commit | 7e69d2cf307efdb4ddec5ef0eef9f6141bf8fa65 (patch) | |
tree | 93be99f9302d1fc4b0b0b7a24752245ee3ffcede | |
parent | 39abb023ed180d03ea8324285116e228b46cd411 (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.c | 39 |
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; |