---
gatchat/gatsyntax.c | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/gatchat/gatsyntax.c b/gatchat/gatsyntax.c
index 2fc70b8..469ffc3 100644
--- a/gatchat/gatsyntax.c
+++ b/gatchat/gatsyntax.c
@@ -44,6 +44,7 @@ enum GSMV1_STATE {
GSMV1_STATE_PROMPT,
GSMV1_STATE_ECHO,
GSMV1_PPP_DATA,
+ GSMV1_STATE_SHORT_PROMPT,
};
enum GSM_PERMISSIVE_STATE {
@@ -53,6 +54,7 @@ enum GSM_PERMISSIVE_STATE {
GSM_PERMISSIVE_STATE_GUESS_PDU,
GSM_PERMISSIVE_STATE_PDU,
GSM_PERMISSIVE_STATE_PROMPT,
+ GSM_PERMISSIVE_STATE_SHORT_PROMPT,
};
static void gsmv1_hint(GAtSyntax *syntax, GAtSyntaxExpectHint hint)
@@ -64,6 +66,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;
};
@@ -200,6 +205,16 @@ static GAtSyntaxResult gsmv1_feed(GAtSyntax *syntax,
syntax->state = GSMV1_STATE_RESPONSE;
return G_AT_SYNTAX_RESULT_UNSURE;
+ case GSMV1_STATE_SHORT_PROMPT:
+ if (byte == '\r')
+ break;
+ else if (byte == '\n') {
+ syntax->state = GSMV1_STATE_IDLE;
+ i += 1;
+ res = G_AT_SYNTAX_RESULT_PROMPT;
+ goto out;
+ }
+
case GSMV1_STATE_ECHO:
/* This handles the case of echo of the PDU terminated
* by CtrlZ character
@@ -239,6 +254,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_SHORT_PROMPT;
}
static GAtSyntaxResult gsm_permissive_feed(GAtSyntax *syntax,
@@ -303,6 +320,16 @@ static GAtSyntaxResult gsm_permissive_feed(GAtSyntax *syntax,
syntax->state = GSM_PERMISSIVE_STATE_RESPONSE;
return G_AT_SYNTAX_RESULT_UNSURE;
+ case GSM_PERMISSIVE_STATE_SHORT_PROMPT:
+ if (byte == '\r')
+ break;
+ else if (byte == '\n') {
+ syntax->state = GSM_PERMISSIVE_STATE_IDLE;
+ i += 1;
+ res = G_AT_SYNTAX_RESULT_PROMPT;
+ goto out;
+ }
+
default:
break;
};
--
1.7.0.4