Estoy diseñando una aplicación en la que estoy interconectando SIM900 con PIC18F2520. Estoy haciendo una llamada a un número usando ATD
. Ahora si el receptor no responde la llamada, o si está ocupado, o la llamada no se puede realizar. Por lo tanto, la llamada actual debe desviarse a otro número. A continuación se presenta la respuesta de ATD
OK Command Executed
ERROR Invalid Command
BUSY Receiving end is currently on other call
NO ANSWER Connection failed upto time out
NO CARRIER Call failed to connect or disconnected
CONNECT Connection set up(ATX=0)
Entonces, en mi condición, necesito verificar si el extremo del receptor es BUSY
o NO ANSWER
o NO CARRIER
y luego hacer otra llamada.
if(
(strstrrampgm(rxData,(const far rom char *)"NO CARRIER") != NULL) ||
(strstrrampgm(rxData,(const far rom char *)"BUSY") != NULL) ||
(strstrrampgm(rxData,(const far rom char *)"NO ANSWER") != NULL)
)
{
serialSendString("ATD91xxxxxx78;\r");
}
Ahora, lo que está sucediendo es cuando no contesté la llamada actual NO ANSWER
o BUSY
o NO CARRIER
, por lo que la condición if se convierte en realidad hace otra llamada. Pero si acepto la primera llamada, GSM no envía CONNECT
response mientras desconecta la llamada que envía NO CARRIER
debido a lo cual, la condición if se convierte en verdadera y se realiza la segunda llamada (lo cual no es necesario). Lo busqué y descubrí que necesitamos habilitar ATX
usando ATX0
, luego muestra la respuesta CONNECT
. Lo probé pero no apareció el CONNECT
.
También quiero saber en qué casos se recibe NO CARRIER
. Siempre que hay un problema de red, dice NO CARRIER
. Si después de conectar la llamada, la desconectamos, nuevamente muestra NO CARRIER
. Si corto la llamada, a veces muestra BUSY
pero a veces (en otra SIM) muestra NO CARRIER
. ¿Qué significa realmente NO CARRIER
? ¿Qué condiciones debo verificar en mi solicitud?
Por favor ayuda!