summaryrefslogtreecommitdiffstats
path: root/gatchat/gatsyntax.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2011-03-25 17:19:26 -0500
committerDenis Kenzior <denkenz@gmail.com>2011-03-28 18:06:59 -0500
commit2ed142de3c975f8f87447b3d3e3fde710aee334e (patch)
treec7191441b041462fd97a7b1924630f37032b400c /gatchat/gatsyntax.c
parentb6d62821585380b9218f26e027df84f07e89ccc8 (diff)
downloadofono-2ed142de3c975f8f87447b3d3e3fde710aee334e.tar.bz2
gatsyntax: support short prompt in v1 parser
Diffstat (limited to 'gatchat/gatsyntax.c')
-rw-r--r--gatchat/gatsyntax.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/gatchat/gatsyntax.c b/gatchat/gatsyntax.c
index 3e472d65..0d32ec3e 100644
--- a/gatchat/gatsyntax.c
+++ b/gatchat/gatsyntax.c
@@ -44,6 +44,8 @@ enum GSMV1_STATE {
GSMV1_STATE_PROMPT,
GSMV1_STATE_ECHO,
GSMV1_STATE_PPP_DATA,
+ GSMV1_STATE_SHORT_PROMPT,
+ GSMV1_STATE_SHORT_PROMPT_CR,
};
enum GSM_PERMISSIVE_STATE {
@@ -66,6 +68,9 @@ static void gsmv1_hint(GAtSyntax *syntax, GAtSyntaxExpectHint hint)
case G_AT_SYNTAX_EXPECT_MULTILINE:
syntax->state = GSMV1_STATE_GUESS_MULTILINE_RESPONSE;
break;
+ case G_AT_SYNTAX_EXPECT_SHORT_PROMPT:
+ syntax->state = GSMV1_STATE_SHORT_PROMPT;
+ break;
default:
break;
};
@@ -228,6 +233,25 @@ static GAtSyntaxResult gsmv1_feed(GAtSyntax *syntax,
break;
+ case GSMV1_STATE_SHORT_PROMPT:
+ if (byte == '\r')
+ syntax->state = GSMV1_STATE_SHORT_PROMPT_CR;
+ else
+ syntax->state = GSMV1_STATE_ECHO;
+
+ break;
+
+ case GSMV1_STATE_SHORT_PROMPT_CR:
+ if (byte == '\n') {
+ syntax->state = GSMV1_STATE_IDLE;
+ i += 1;
+ res = G_AT_SYNTAX_RESULT_PROMPT;
+ goto out;
+ }
+
+ syntax->state = GSMV1_STATE_RESPONSE;
+ return G_AT_SYNTAX_RESULT_UNSURE;
+
default:
break;
};