aboutsummaryrefslogtreecommitdiff
path: root/plugins/wavecom
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-04-03 15:19:09 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-05-06 15:34:13 +0200
commit8ce1e26e1b37e2cf3bc652872a707b493ed657dc (patch)
treeaae603bcd9f8680e34570bbbaaff1c30264b212d /plugins/wavecom
parent65b92dfba5131579be663f6b00140342d5b450e7 (diff)
wavecom: implement custom flow control handling
Diffstat (limited to 'plugins/wavecom')
-rw-r--r--plugins/wavecom/mm-broadband-modem-wavecom.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/plugins/wavecom/mm-broadband-modem-wavecom.c b/plugins/wavecom/mm-broadband-modem-wavecom.c
index e49c3e2d..6227502b 100644
--- a/plugins/wavecom/mm-broadband-modem-wavecom.c
+++ b/plugins/wavecom/mm-broadband-modem-wavecom.c
@@ -37,6 +37,31 @@ G_DEFINE_TYPE_EXTENDED (MMBroadbandModemWavecom, mm_broadband_modem_wavecom, MM_
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init))
/*****************************************************************************/
+/* Flow control (Modem interface) */
+
+static gboolean
+setup_flow_control_finish (MMIfaceModem *self,
+ GAsyncResult *res,
+ GError **error)
+{
+ return !!mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error);
+}
+
+static void
+setup_flow_control (MMIfaceModem *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ /* Wavecom doesn't have XOFF/XON flow control, so we enable RTS/CTS */
+ mm_base_modem_at_command (MM_BASE_MODEM (self),
+ "+IFC=2,2",
+ 3,
+ FALSE,
+ callback,
+ user_data);
+}
+
+/*****************************************************************************/
/* Modem power down (Modem interface) */
static gboolean
@@ -54,13 +79,12 @@ modem_power_down (MMIfaceModem *self,
{
/* Use AT+CFUN=4 for power down. It will stop the RF (IMSI detach), and
* keeps access to the SIM */
- mm_base_modem_at_command (
- MM_BASE_MODEM (self),
- "+CFUN=4",
- 3,
- FALSE,
- callback,
- user_data);
+ mm_base_modem_at_command (MM_BASE_MODEM (self),
+ "+CFUN=4",
+ 3,
+ FALSE,
+ callback,
+ user_data);
}
/*****************************************************************************/
@@ -89,6 +113,8 @@ mm_broadband_modem_wavecom_init (MMBroadbandModemWavecom *self)
static void
iface_modem_init (MMIfaceModem *iface)
{
+ iface->setup_flow_control = setup_flow_control;
+ iface->setup_flow_control_finish = setup_flow_control_finish;
iface->modem_power_down = modem_power_down;
iface->modem_power_down_finish = modem_power_down_finish;
}