From b6d62821585380b9218f26e027df84f07e89ccc8 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 25 Mar 2011 17:03:04 -0500 Subject: [PATCH] gatsyntax: support short prompt for permissive --- gatchat/gatsyntax.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/gatchat/gatsyntax.c b/gatchat/gatsyntax.c index 83aa5c0..3e472d6 100644 --- a/gatchat/gatsyntax.c +++ b/gatchat/gatsyntax.c @@ -53,6 +53,8 @@ enum GSM_PERMISSIVE_STATE { GSM_PERMISSIVE_STATE_GUESS_PDU, GSM_PERMISSIVE_STATE_PDU, GSM_PERMISSIVE_STATE_PROMPT, + GSM_PERMISSIVE_STATE_GUESS_SHORT_PROMPT, + GSM_PERMISSIVE_STATE_SHORT_PROMPT, }; static void gsmv1_hint(GAtSyntax *syntax, GAtSyntaxExpectHint hint) @@ -242,6 +244,8 @@ static void gsm_permissive_hint(GAtSyntax *syntax, GAtSyntaxExpectHint hint) { if (hint == G_AT_SYNTAX_EXPECT_PDU) syntax->state = GSM_PERMISSIVE_STATE_GUESS_PDU; + else if (hint == G_AT_SYNTAX_EXPECT_SHORT_PROMPT) + syntax->state = GSM_PERMISSIVE_STATE_GUESS_SHORT_PROMPT; } static GAtSyntaxResult gsm_permissive_feed(GAtSyntax *syntax, @@ -306,6 +310,27 @@ static GAtSyntaxResult gsm_permissive_feed(GAtSyntax *syntax, syntax->state = GSM_PERMISSIVE_STATE_RESPONSE; return G_AT_SYNTAX_RESULT_UNSURE; + case GSM_PERMISSIVE_STATE_GUESS_SHORT_PROMPT: + if (byte == '\n') + /* ignore */; + else if (byte == '\r') + syntax->state = + GSM_PERMISSIVE_STATE_SHORT_PROMPT; + else + syntax->state = GSM_PERMISSIVE_STATE_RESPONSE; + break; + + case GSM_PERMISSIVE_STATE_SHORT_PROMPT: + if (byte == '\n') { + syntax->state = GSM_PERMISSIVE_STATE_IDLE; + i += 1; + res = G_AT_SYNTAX_RESULT_PROMPT; + goto out; + } + + syntax->state = GSM_PERMISSIVE_STATE_RESPONSE; + return G_AT_SYNTAX_RESULT_UNSURE; + default: break; }; -- 2.7.4