summaryrefslogtreecommitdiffstats
path: root/plugins/calypso.c
diff options
context:
space:
mode:
authorDenis Kenzior <denis.kenzior@intel.com>2009-09-04 13:27:37 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-09-04 20:37:49 -0500
commit918a8ee7f3ac939a90e37d4330e1dfc0adaf6cf9 (patch)
tree59b2a534e99dc932aeb702ce70b36052bd5c0e70 /plugins/calypso.c
parent85cbb8bfe9a36d3875c7242df8f75709b6ba49fa (diff)
downloadofono-918a8ee7f3ac939a90e37d4330e1dfc0adaf6cf9.tar.bz2
Make calypso plugin use the permissive parser
Diffstat (limited to 'plugins/calypso.c')
-rw-r--r--plugins/calypso.c158
1 files changed, 1 insertions, 157 deletions
diff --git a/plugins/calypso.c b/plugins/calypso.c
index c6ebec31..bc32258f 100644
--- a/plugins/calypso.c
+++ b/plugins/calypso.c
@@ -65,161 +65,6 @@ enum powercycle_state {
POWERCYCLE_STATE_FINISHED,
};
-enum calypso_state {
- CALYPSO_STATE_IDLE = 0,
- CALYPSO_STATE_INITIAL_CR,
- CALYPSO_STATE_INITIAL_LF,
- CALYPSO_STATE_RESPONSE,
- CALYPSO_STATE_TERMINATOR_CR,
- CALYPSO_STATE_GUESS_MULTILINE_RESPONSE,
- CALYPSO_STATE_MULTILINE_RESPONSE,
- CALYPSO_STATE_MULTILINE_TERMINATOR_CR,
- CALYPSO_STATE_PDU_CHECK_EXTRA_CR,
- CALYPSO_STATE_PDU_CHECK_EXTRA_LF,
- CALYPSO_STATE_PDU,
- CALYPSO_STATE_PDU_CR,
- CALYPSO_STATE_PROMPT,
-};
-
-static void calypso_hint(GAtSyntax *syntax, GAtSyntaxExpectHint hint)
-{
- switch (hint) {
- case G_AT_SYNTAX_EXPECT_PDU:
- syntax->state = CALYPSO_STATE_PDU_CHECK_EXTRA_CR;
- break;
- case G_AT_SYNTAX_EXPECT_MULTILINE:
- syntax->state = CALYPSO_STATE_GUESS_MULTILINE_RESPONSE;
- break;
- default:
- break;
- };
-}
-
-static GAtSyntaxResult calypso_feed(GAtSyntax *syntax,
- const char *bytes, gsize *len)
-{
- gsize i = 0;
- GAtSyntaxResult res = G_AT_SYNTAX_RESULT_UNSURE;
-
- while (i < *len) {
- char byte = bytes[i];
-
- switch (syntax->state) {
- case CALYPSO_STATE_IDLE:
- if (byte == '\r')
- syntax->state = CALYPSO_STATE_INITIAL_CR;
- else
- syntax->state = CALYPSO_STATE_RESPONSE;
- break;
-
- case CALYPSO_STATE_INITIAL_CR:
- if (byte == '\n')
- syntax->state = CALYPSO_STATE_INITIAL_LF;
- break;
-
- case CALYPSO_STATE_INITIAL_LF:
- if (byte == '\r')
- syntax->state = CALYPSO_STATE_TERMINATOR_CR;
- else if (byte == '>')
- syntax->state = CALYPSO_STATE_PROMPT;
- else
- syntax->state = CALYPSO_STATE_RESPONSE;
- break;
-
- case CALYPSO_STATE_RESPONSE:
- if (byte == '\r')
- syntax->state = CALYPSO_STATE_TERMINATOR_CR;
- break;
-
- case CALYPSO_STATE_TERMINATOR_CR:
- syntax->state = CALYPSO_STATE_IDLE;
-
- if (byte == '\n') {
- i += 1;
- res = G_AT_SYNTAX_RESULT_LINE;
- } else
- res = G_AT_SYNTAX_RESULT_UNRECOGNIZED;
-
- goto out;
-
- case CALYPSO_STATE_GUESS_MULTILINE_RESPONSE:
- if (byte == '\r')
- syntax->state = CALYPSO_STATE_INITIAL_CR;
- else
- syntax->state = CALYPSO_STATE_MULTILINE_RESPONSE;
- break;
-
- case CALYPSO_STATE_MULTILINE_RESPONSE:
- if (byte == '\r')
- syntax->state = CALYPSO_STATE_MULTILINE_TERMINATOR_CR;
- break;
-
- case CALYPSO_STATE_MULTILINE_TERMINATOR_CR:
- syntax->state = CALYPSO_STATE_IDLE;
-
- if (byte == '\n') {
- i += 1;
- res = G_AT_SYNTAX_RESULT_MULTILINE;
- } else
- res = G_AT_SYNTAX_RESULT_UNRECOGNIZED;
-
- goto out;
-
- case CALYPSO_STATE_PDU_CHECK_EXTRA_CR:
- if (byte == '\r')
- syntax->state = CALYPSO_STATE_PDU_CHECK_EXTRA_LF;
- else
- syntax->state = CALYPSO_STATE_PDU;
- break;
-
- case CALYPSO_STATE_PDU_CHECK_EXTRA_LF:
- res = G_AT_SYNTAX_RESULT_UNRECOGNIZED;
- syntax->state = CALYPSO_STATE_PDU;
-
- if (byte == '\n')
- i += 1;
-
- goto out;
-
- case CALYPSO_STATE_PDU:
- if (byte == '\r')
- syntax->state = CALYPSO_STATE_PDU_CR;
- break;
-
- case CALYPSO_STATE_PDU_CR:
- syntax->state = CALYPSO_STATE_IDLE;
-
- if (byte == '\n') {
- i += 1;
- res = G_AT_SYNTAX_RESULT_PDU;
- } else
- res = G_AT_SYNTAX_RESULT_UNRECOGNIZED;
-
- goto out;
-
- case CALYPSO_STATE_PROMPT:
- if (byte == ' ') {
- syntax->state = CALYPSO_STATE_IDLE;
- i += 1;
- res = G_AT_SYNTAX_RESULT_PROMPT;
- goto out;
- }
-
- syntax->state = CALYPSO_STATE_RESPONSE;
- return G_AT_SYNTAX_RESULT_UNSURE;
-
- default:
- break;
- };
-
- i += 1;
- }
-
-out:
- *len = i;
- return res;
-}
-
struct calypso_data {
GAtChat *chat;
enum powercycle_state state;
@@ -365,8 +210,7 @@ static void modem_initialize(struct ofono_modem *modem)
/* Calypso is normally compliant to 27.007, except the vendor-specific
* notifications (like %CSTAT) are not prefixed by \r\n
*/
- syntax = g_at_syntax_new_full(calypso_feed, calypso_hint,
- CALYPSO_STATE_IDLE);
+ syntax = g_at_syntax_new_gsm_permissive();
chat = g_at_chat_new(io, syntax);
g_at_syntax_unref(syntax);
g_io_channel_unref(io);