diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-04-03 15:19:09 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-05-06 15:34:13 +0200 |
commit | 8ce1e26e1b37e2cf3bc652872a707b493ed657dc (patch) | |
tree | aae603bcd9f8680e34570bbbaaff1c30264b212d /plugins/wavecom | |
parent | 65b92dfba5131579be663f6b00140342d5b450e7 (diff) |
wavecom: implement custom flow control handling
Diffstat (limited to 'plugins/wavecom')
-rw-r--r-- | plugins/wavecom/mm-broadband-modem-wavecom.c | 40 |
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; } |