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?