summaryrefslogtreecommitdiffstats
path: root/gatchat/gatsyntax.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-03-31 18:48:52 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-03-31 18:48:52 -0500
commit988b24adb0a17ab29dce62c50ab93748e71cb9e7 (patch)
treebc4bea7d5cd89a2030d79dbb4c85da568446ee36 /gatchat/gatsyntax.c
parentee8084c0d02d99cbb0d6835a13b4c1fbb9d1fa0f (diff)
downloadofono-988b24adb0a17ab29dce62c50ab93748e71cb9e7.tar.bz2
Fix: Introduce PPP data state
Some modems send PPP data introspersed along with the CONNECT final response. Fixup the parser so we can still detect the final response.
Diffstat (limited to 'gatchat/gatsyntax.c')
-rw-r--r--gatchat/gatsyntax.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gatchat/gatsyntax.c b/gatchat/gatsyntax.c
index 6201e4cf..6266e795 100644
--- a/gatchat/gatsyntax.c
+++ b/gatchat/gatsyntax.c
@@ -42,6 +42,7 @@ enum GSMV1_STATE {
GSMV1_STATE_PDU_CR,
GSMV1_STATE_PROMPT,
GSMV1_STATE_ECHO,
+ GSMV1_PPP_DATA,
};
enum GSM_PERMISSIVE_STATE {
@@ -79,6 +80,8 @@ static GAtSyntaxResult gsmv1_feed(GAtSyntax *syntax,
case GSMV1_STATE_IDLE:
if (byte == '\r')
syntax->state = GSMV1_STATE_INITIAL_CR;
+ else if (byte == '~')
+ syntax->state = GSMV1_PPP_DATA;
else
syntax->state = GSMV1_STATE_ECHO;
break;
@@ -199,6 +202,16 @@ static GAtSyntaxResult gsmv1_feed(GAtSyntax *syntax,
break;
+ case GSMV1_PPP_DATA:
+ if (byte == '~') {
+ syntax->state = GSMV1_STATE_IDLE;
+ res = G_AT_SYNTAX_RESULT_UNRECOGNIZED;
+ i += 1;
+ goto out;
+ }
+
+ break;
+
default:
break;
};