¿Cómo manejar el código de resultado final anidado en el texto de comando AT?

2

Estoy escribiendo un analizador (una máquina de estados finitos para ser más precisos) para comandos AT y no veo cómo manejar un caso de esquina en particular:

Aquí están las especificaciones de la comunicación del módem: Cuando el DTE envía un comando AT terminado por <CR> (como ATE0<CR> ), el DCE opcionalmente contestará una respuesta de texto de información entre <CR><LF> caracteres y finalmente dará el código de resultado final (como <CR><LF>OK<CR><LF> ).

Mi algoritmo es así:

do {
    line = readLine(serial_modem);
} while (! is_final_result_code(line))

Aquí está el caso de la esquina: Supongamos que envío el comando para leer un mensaje SMS y que la respuesta del texto de información (es decir, el texto del SMS) contiene la secuencia <CR><LF>OK<CR><LF> .

Luego, mi analizador pensará erróneamente que el primer <CR><LF> termina la respuesta del texto de información, mientras que la siguiente parte es el código del resultado final.

¿Me pierdo una información importante sobre cómo manejar este caso correctamente?

    
pregunta anotherCode245

1 respuesta

1

En el modo de texto, no puede tener < CR > < LF > Dentro del mensaje recibido. Mientras se envía un mensaje de texto con el conjunto de comandos AT, el mensaje ya finalizó con la primera aparición de < CR > < LF & gt ;. Por lo tanto, no tiene que verificar este caso mientras recibe mensajes en modo de texto.

Para enviar y recibir mensajes de formato, debe usar el modo PDU. En el modo PDU, el mensaje se empaqueta en un marco que también contiene un campo para la longitud del mensaje.

No sé si hay una capa de protocolo subyacente que no está segura de que solo obtendrá tramas de PDU bien formadas.

    
respondido por el Kitana

Lea otras preguntas en las etiquetas