---
 gatchat/gatchat.c |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/gatchat/gatchat.c b/gatchat/gatchat.c
index 546bd68..ae276eb 100644
--- a/gatchat/gatchat.c
+++ b/gatchat/gatchat.c
@@ -41,6 +41,9 @@
 #define COMMAND_FLAG_EXPECT_PDU                        0x1
 #define COMMAND_FLAG_EXPECT_SHORT_PROMPT       0x2
 
+/* Time to wait before and after +++ sequence */
+#define GUARD_TIMEOUTS 1500
+
 struct at_chat;
 static void chat_wakeup_writer(struct at_chat *chat);
 
@@ -102,6 +105,7 @@ struct at_chat {
        gboolean in_read_handler;               /* Re-entrancy guard */
        gboolean in_notify;
        GSList *terminator_list;                /* Non-standard terminator */
+       guint guard_timeout;                    /* guard_timeout CB id */
 };
 
 struct _GAtChat {
@@ -958,6 +962,9 @@ static void at_chat_unref(struct at_chat *chat)
                chat_cleanup(chat);
        }
 
+       if (chat->guard_timeout)
+               g_source_remove(chat->guard_timeout);
+
        if (chat->in_read_handler)
                chat->destroyed = TRUE;
        else
@@ -1495,6 +1502,31 @@ guint g_at_chat_send_and_expect_short_prompt(GAtChat 
*chat, const char *cmd,
                                        NULL, func, user_data, notify);
 }
 
+static gboolean resume_chat(gpointer user_data)
+{
+       struct at_chat *chat = user_data;
+
+       at_chat_resume(chat);
+
+       return FALSE;
+}
+
+static gboolean at_send_escape_sequence(gpointer user_data)
+{
+       struct at_chat *chat = user_data;
+
+       g_at_io_write(chat->io, "+++", 3);
+
+       chat->guard_timeout = g_timeout_add(GUARD_TIMEOUTS, resume_chat, chat);
+
+       return FALSE;
+}
+
+void g_at_chat_send_escape_sequence(GAtChat *chat)
+{
+       chat->parent->guard_timeout = g_timeout_add(GUARD_TIMEOUTS, 
at_send_escape_sequence, chat->parent);
+}
+
 gboolean g_at_chat_cancel(GAtChat *chat, guint id)
 {
        /* We use id 0 for wakeup commands */
-- 
1.7.1

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to