diff options
author | Denis Kenzior <denkenz@gmail.com> | 2011-03-25 17:19:26 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-03-28 18:06:59 -0500 |
commit | 2ed142de3c975f8f87447b3d3e3fde710aee334e (patch) | |
tree | c7191441b041462fd97a7b1924630f37032b400c /gatchat/gatsyntax.c | |
parent | b6d62821585380b9218f26e027df84f07e89ccc8 (diff) | |
download | ofono-2ed142de3c975f8f87447b3d3e3fde710aee334e.tar.bz2 |
gatsyntax: support short prompt in v1 parser
Diffstat (limited to 'gatchat/gatsyntax.c')
-rw-r--r-- | gatchat/gatsyntax.c | 24 |
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; }; |