---
gatchat/gsmdial.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/gatchat/gsmdial.c b/gatchat/gsmdial.c
index a10e7cb..31bb910 100644
--- a/gatchat/gsmdial.c
+++ b/gatchat/gsmdial.c
@@ -57,6 +57,7 @@ static gchar *option_username = NULL;
static gchar *option_password = NULL;
static gchar *option_pppdump = NULL;
static gboolean option_bluetooth = FALSE;
+static gboolean option_esc = FALSE;
static GAtPPP *ppp;
static GAtChat *control;
@@ -237,6 +238,23 @@ static gboolean execute(const char *cmd)
return TRUE;
}
+static void ppp_suspend(gpointer user_data)
+{
+ g_at_chat_resume(modem);
+}
+
+static void start_test_sequence(gpointer data)
+{
+ /* Delete the write done CB */
+ g_at_io_set_write_done(g_at_chat_get_io(modem), NULL, NULL);
+
+ /*
+ * We are sure there are no more PPP packets to be written,
+ * we can suspend PPP client and send escape sequence
+ */
+ g_at_ppp_suspend(ppp);
+}
+
static void ppp_connect(const char *iface, const char *local, const char *peer,
const char *dns1, const char *dns2,
gpointer user_data)
@@ -261,6 +279,14 @@ static void ppp_connect(const char *iface, const char *local, const
char *peer,
snprintf(buf, sizeof(buf), "%s %s %s pointopoint %s", IFCONFIG_PATH,
iface, local, peer);
execute(buf);
+
+ /*
+ * As soon as a PPP packet is written by the client, we start
+ * test sequence.
+ */
+ if (option_esc)
+ g_at_io_set_write_done(g_at_chat_get_io(modem),
+ start_test_sequence, NULL);
}
static void no_carrier_notify(GAtResult *result, gpointer user_data)
@@ -327,6 +353,7 @@ static void connect_cb(gboolean ok, GAtResult *result, gpointer
user_data)
/* set connect and disconnect callbacks */
g_at_ppp_set_connect_function(ppp, ppp_connect, NULL);
g_at_ppp_set_disconnect_function(ppp, ppp_disconnect, NULL);
+ g_at_ppp_set_suspend_function(ppp, ppp_suspend, NULL);
/* open the ppp connection */
g_at_ppp_open(ppp);
@@ -624,6 +651,8 @@ static GOptionEntry options[] = {
"Use ATD*99***<cid>#" },
{ "bluetooth", 'b', 0, G_OPTION_ARG_NONE, &option_bluetooth,
"Use only ATD*99" },
+ { "esc_seq", 'e', 0, G_OPTION_ARG_NONE, &option_esc,
+ "Send escape sequence test" },
{ "username", 'u', 0, G_OPTION_ARG_STRING, &option_username,
"Specify PPP username" },
{ "password", 'w', 0, G_OPTION_ARG_STRING, &option_password,
--
1.7.1