gatsyntax: support short prompt for permissive

This commit is contained in:
Denis Kenzior 2011-03-25 17:03:04 -05:00
parent 57faa0c931
commit b6d6282158
1 changed files with 25 additions and 0 deletions

View File

@ -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;
};