WORD GSM_Call(void)
WORD GSM_Call(void) { WORD i, j; BYTE k; if(ModemGsm.Signal.Control.RcvMessage){ if(GSM_CompareMessage("NO CARRIER") && Gsm.ActualCommand == mcATD && ModemGsm.Semaphore.Control.alarm_call){ ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; ModemGsm.Signal.Control.Process = FALSE; Call.IndexWrite = 0; Call.IndexRead = 0; biREGISTER.GlobalBlock = 0; return 3; } else if(GSM_CompareMessage("NO CARRIER") && Gsm.ActualCommand == mcATD){ ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; ModemGsm.Signal.Control.Process = FALSE; biREGISTER.GlobalBlock = 0; return 3; } else if(GSM_CompareMessage("BUSY") && Gsm.ActualCommand == mcATD){ ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; ModemGsm.Signal.Control.Process = FALSE; biREGISTER.GlobalBlock = 0; return 3; } else if(GSM_CompareMessage("NO ANSWER") && Gsm.ActualCommand == mcATD){ ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; ModemGsm.Signal.Control.Process = FALSE; biREGISTER.GlobalBlock = 0; return 3; } else if(GSM_CompareMessage("RING")){ // ModemGsm.Signal.Control.CommandOK = TRUE; // Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; } else if(GSM_CompareMessage(GSMResponse[mrATD])){ for(i=0; i<strlen((char*)Gsm.ReceiveData); i++){ if(Gsm.ReceiveData[i] == '\"'){ for(j=i+1, k=0; j<strlen(Gsm.ReceiveData); j++, k++){ ModemGsmCredit[k] = Gsm.ReceiveData[j]; if(Gsm.ReceiveData[j] == '\"') break; } break; } else if(Gsm.ReceiveData[i] == '1' || Gsm.ReceiveData[i] == '3' || Gsm.ReceiveData[i] == '4' || Gsm.ReceiveData[i] == '5' || Gsm.ReceiveData[i] == '6' || Gsm.ReceiveData[i] == '7'){ ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; return 2; } } ModemGsmCredit[k] = 0; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; } else if(GSM_CompareMessage(GSMResponse[mrCLIP])){ GSM_SendCallToData(); Call.Flag = 1; // Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; } else if(GSM_CompareMessage(GSMResponse[mrOK])){ switch(Gsm.ActualCommand){ case mcATD: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; if(ModemGsm.Semaphore.Control.alarm_call) break; else return 2; case mcCOLP: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = SET_AUDIO; ModemGsm.Signal.Control.RcvMessage = FALSE; break; case mcQAUDCH: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = GAIN_MIC; ModemGsm.Signal.Control.RcvMessage = FALSE; break; case mcQMIC: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = GAIN_SPK; ModemGsm.Signal.Control.RcvMessage = FALSE; break; case mcCLVL: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = SET_ECHO; //SIDET; ModemGsm.Signal.Control.RcvMessage = FALSE; break; // case mcQSIDET: // ModemGsm.Signal.Control.CommandOK = TRUE; // Gsm.State = SET_ECHO; // ModemGsm.Signal.Control.RcvMessage = FALSE; // break; case mcQECHO: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = SET_CLIP; ModemGsm.Signal.Control.RcvMessage = FALSE; break; case mcCLIP: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; return 0; case mcATH0: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; break; } } else if(GSM_CompareMessage(GSMResponse[mrERROR])){ switch(Gsm.ActualCommand){ case mcATD: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; if(ModemGsm.Semaphore.Control.alarm_call) break; else return 2; case mcCOLP: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = SET_AUDIO; ModemGsm.Signal.Control.RcvMessage = FALSE; break; case mcQAUDCH: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = GAIN_MIC; ModemGsm.Signal.Control.RcvMessage = FALSE; break; case mcQMIC: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = GAIN_SPK; ModemGsm.Signal.Control.RcvMessage = FALSE; break; case mcCLVL: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = SET_ECHO; //SIDET; ModemGsm.Signal.Control.RcvMessage = FALSE; break; //case mcQSIDET: case mcQECHO: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = SET_CLIP; ModemGsm.Signal.Control.RcvMessage = FALSE; break; case mcCLIP: case mcATH0: ModemGsm.Signal.Control.CommandOK = TRUE; Gsm.State = NONE; ModemGsm.Signal.Control.RcvMessage = FALSE; break; } } } switch(Gsm.State){ case GET_CREDIT: strcpy((char*)Gsm.CommandData, GSMCommand[mcATD]); Gsm.ActualCommand = mcATD; strcat((char*)Gsm.CommandData, TableApnSettingGPRS[Gsm.Operator].USSD); strcat((char*)Gsm.CommandData, "\r"); ModemGsmCredit[0] = 0; ModemGsm.Signal.Control.SendCommand = TRUE; Gsm.State = NONE; break; case SET_CALL: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcCOLP]); Gsm.ActualCommand = mcCOLP; ModemGsm.Signal.Control.SendCommand = TRUE; break; case SET_AUDIO: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcQAUDCH]); Gsm.ActualCommand = mcQAUDCH; ModemGsm.Signal.Control.SendCommand = TRUE; break; case SET_CLIP: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcCLIP]); Gsm.ActualCommand = mcCLIP; ModemGsm.Signal.Control.SendCommand = TRUE; break; case TERMINATE_CALL: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcATH0]); Gsm.ActualCommand = mcATH0; ModemGsm.Signal.Control.SendCommand = TRUE; break; case VOICE_CALL: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcATD]); strcat((char*)Gsm.CommandData, Call.PhoneNumber[Call.IndexRead]); strcat((char*)Gsm.CommandData, ";\r"); Gsm.ActualCommand = mcATD; ModemGsm.Signal.Control.SendCommand = TRUE; break; case SET_ECHO: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcQECHO]); Gsm.ActualCommand = mcQECHO; ModemGsm.Signal.Control.SendCommand = TRUE; break; case GAIN_MIC: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcQMIC]); Gsm.ActualCommand = mcQMIC; ModemGsm.Signal.Control.SendCommand = TRUE; break; case GAIN_SPK: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcCLVL]); Gsm.ActualCommand = mcCLVL; ModemGsm.Signal.Control.SendCommand = TRUE; break; case SIDET: Gsm.State = NONE; strcpy((char*)Gsm.CommandData, GSMCommand[mcQSIDET]); Gsm.ActualCommand = mcQSIDET; ModemGsm.Signal.Control.SendCommand = TRUE; break; } return 1; }