Hola, tengo este "problema",
Estoy manejando un modulo GPRS, no tengo problema, envío un comando y luego busco la respuesta, pero esto tarde mucho tiempo...
Para optimizar quiero saber cuando tengo una respuesta al comando desde la interrupción
Tengo esta tabla de posibles respuestas:
AT{0D} {0D}{0A}OK {0D}{0A}
AT+CGSN{0D} {0D}{0A}861445030295583 {0D}{0A}{0D}{0A}OK {0D}{0A}
AT+CPIN?{0D} {0D}{0A}+CPIN: READY {0D}{0A}{0D}{0A}OK {0D}{0A}
AT+CSQ{0D} {0D}{0A}+CSQ: 26,0 {0D}{0A}{0D}{0A}OK {0D}{0A}
AT+CREG?{0D} {0D}{0A}+CREG: 0,1 {0D}{0A}{0D}{0A}OK {0D}{0A}
AT+CIFSR{0D} {0D}{0A}10.140.148.116 {0D}{0A}
AT+CBC{0D} {0D}{0A}+CBC: 0,100,4202 {0D}{0A}{0D}{0A}OK {0D}{0A}
Una vez que se envíe el comando AT, el modem responde 0x0D y 0x0A ...
respuesta del comando ...nuevamente 0x0D y0x0A, aquí esta el problema, se vuelve a enviar el mismo inicio y como se ve en la tabla , dependiendo del comando varia la cantidad de 0D y 0A.
Cuando el comando tiene dos respuestas, ( la respuesta al comando + una respuesta de
OK o
ERROR también") envía doble {0D}{0A}
Alguna sugerencia?
Siempre uso esta forma en otros modulo el cual no tiene ningún carácter de inicio a final de cada respuesta es siempre {0D}{0A}.
#int_rda
void rda_isr(){
// See what we got
if (bufferByte == 0x0D){
moduleResonseBuffer[moduleBufferIndex] = 0x00; // Add Null terminator
messageReady=1; // Message Ready
moduleBufferIndex = 0; // Prepare index for next message
}
else if ( (bufferByte == 0x00) || (bufferByte == 0x0A) )
{
// Do nothing
}
else
{
moduleResonseBuffer[moduleBufferIndex++] = bufferByte; // Add Byte to Buffer
}
}