aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Palmas <dnlplm@gmail.com>2015-03-12 11:33:39 +0100
committerAleksander Morgado <aleksander@aleksander.es>2015-03-12 12:01:23 +0100
commitf9a5848d71972797a2871c6ccceaa6d9123eb8de (patch)
treeb3f8b255eca62ebaa0c005ca66609b2509db35aa
parent00b5ae3e5b61eaf2757d7d34044842299181d80e (diff)
telit: add custom flow control settings for Telit HE910, UE910, UL865
Telit HE910, UE910 and UL865 do not support XON/XOFF; defaulting to RTS/CTS
-rw-r--r--plugins/telit/mm-broadband-modem-telit.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/plugins/telit/mm-broadband-modem-telit.c b/plugins/telit/mm-broadband-modem-telit.c
index 5e1dbff0..2f44a4bd 100644
--- a/plugins/telit/mm-broadband-modem-telit.c
+++ b/plugins/telit/mm-broadband-modem-telit.c
@@ -175,6 +175,52 @@ load_access_technologies (MMIfaceModem *self,
}
/*****************************************************************************/
+/* Flow control (Modem interface) */
+
+static gboolean
+setup_flow_control_finish (MMIfaceModem *self,
+ GAsyncResult *res,
+ GError **error)
+{
+ /* Completely ignore errors */
+ return TRUE;
+}
+
+static void
+setup_flow_control (MMIfaceModem *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *result;
+ gchar *cmd;
+ guint flow_control = 1; /* Default flow control: XON/XOFF */
+
+ switch (mm_base_modem_get_product_id (MM_BASE_MODEM (self)) & 0xFFFF) {
+ case 0x0021:
+ flow_control = 2; /* Telit IMC modems support only RTS/CTS mode */
+ break;
+ default:
+ break;
+ }
+
+ cmd = g_strdup_printf ("+IFC=%u,%u", flow_control, flow_control);
+ mm_base_modem_at_command (MM_BASE_MODEM (self),
+ cmd,
+ 3,
+ FALSE,
+ NULL,
+ NULL);
+ result = g_simple_async_result_new (G_OBJECT (self),
+ callback,
+ user_data,
+ setup_flow_control);
+ g_simple_async_result_set_op_res_gboolean (result, TRUE);
+ g_simple_async_result_complete_in_idle (result);
+ g_object_unref (result);
+ g_free (cmd);
+}
+
+/*****************************************************************************/
MMBroadbandModemTelit *
mm_broadband_modem_telit_new (const gchar *device,
@@ -202,6 +248,8 @@ iface_modem_init (MMIfaceModem *iface)
{
iface->load_access_technologies = load_access_technologies;
iface->load_access_technologies_finish = load_access_technologies_finish;
+ iface->setup_flow_control = setup_flow_control;
+ iface->setup_flow_control_finish = setup_flow_control_finish;
}
static void