[PATCH v2] Add custom flow control settings for Telit HE910, UE910, UL865

Daniele Palmas dnlplm at gmail.com
Thu Mar 12 03:33:39 PDT 2015


Telit HE910, UE910 and UL865 do not support XON/XOFF; defaulting
to RTS/CTS
---
 plugins/telit/mm-broadband-modem-telit.c | 48 ++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/plugins/telit/mm-broadband-modem-telit.c b/plugins/telit/mm-broadband-modem-telit.c
index 5e1dbff..2f44a4b 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
-- 
1.9.1



More information about the ModemManager-devel mailing list