Hi Denis,
I managed to handle the garbage adding a new syntax which is the copy/paste
of gsm_permissive plus a new state.
Here is how the new feed looks:
static GAtSyntaxResult gsm_telit_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 GSM_TELIT_STATE_IDLE:
if (byte == '\r' || byte == '\n')
/* ignore */;
else if (byte == '>')
syntax->state = GSM_TELIT_STATE_PROMPT;
else if (byte == '~')
syntax->state = GSM_TELIT_STATE_GARBAGE;
else if (byte == '"')
syntax->state = GSM_TELIT_STATE_RESPONSE_STRING;
else
syntax->state = GSM_TELIT_STATE_RESPONSE;
break;
case GSM_TELIT_STATE_RESPONSE:
if (byte == '\r') {
syntax->state = GSM_TELIT_STATE_IDLE;
i += 1;
res = G_AT_SYNTAX_RESULT_LINE;
goto out;
} else if (byte == '"')
syntax->state =
GSM_TELIT_STATE_RESPONSE_STRING;
break;
case GSM_TELIT_STATE_RESPONSE_STRING:
if (byte == '"')
syntax->state = GSM_TELIT_STATE_RESPONSE;
break;
case GSM_TELIT_STATE_GUESS_PDU:
if (byte != '\r' && byte != '\n')
syntax->state = GSM_TELIT_STATE_PDU;
break;
case GSM_TELIT_STATE_PDU:
if (byte == '\r') {
syntax->state = GSM_TELIT_STATE_IDLE;
i += 1;
res = G_AT_SYNTAX_RESULT_PDU;
goto out;
}
break;
case GSM_TELIT_STATE_PROMPT:
if (byte == ' ') {
syntax->state = GSM_TELIT_STATE_IDLE;
i += 1;
res = G_AT_SYNTAX_RESULT_PROMPT;
goto out;
}
syntax->state = GSM_TELIT_STATE_RESPONSE;
return G_AT_SYNTAX_RESULT_UNSURE;
case GSM_TELIT_STATE_GUESS_SHORT_PROMPT:
if (byte == '\n')
/* ignore */;
else if (byte == '\r')
syntax->state = GSM_TELIT_STATE_SHORT_PROMPT;
else
syntax->state = GSM_TELIT_STATE_RESPONSE;
break;
case GSM_TELIT_STATE_SHORT_PROMPT:
if (byte == '\n') {
syntax->state = GSM_TELIT_STATE_IDLE;
i += 1;
res = G_AT_SYNTAX_RESULT_PROMPT;
goto out;
}
syntax->state = GSM_TELIT_STATE_RESPONSE;
return G_AT_SYNTAX_RESULT_UNSURE;
case GSM_TELIT_STATE_GARBAGE:
if (byte == '~')
syntax->state = GSM_TELIT_STATE_RESPONSE;
break;
default:
break;
};
i += 1;
}
out:
*len = i;
return res;
}
Enrico
_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono