📄 at_core.c
字号:
static void QueryNetworkInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
status &= ~_QueryNetwork;
if (reason == AT_SUCCESS) {
networkregistration = atcmdack->ackbuf[1];
if (networkregistration == NETWORK_HomeNetwork || networkregistration == NETWORK_Roaming) {
if ((status & _NetworkRegistered) == 0) {
if(NEED_SATC == needsatc) satcregstatut = NEED_SATC_NO;
else if(NEED_SATC_NO == needsatc) satcregstatut = NEED_SATC;
else satcregstatut = NEED_SATC_CLEAR;
status |= (_NetworkRegistered | _QuerySignal);
StartTmr(RestartTmr, PERIOD_Restart);
OSQPost(GsmTaskMsgQue, MSG_ATCORE_SEARCHNETWORK, 0, 0);
}
} else {
if (status & _NetworkRegistered) {
status &= ~_NetworkRegistered;
StartTmr(RestartTmr, PERIOD_Restart_NoNetwork);
OSQPost(GsmTaskMsgQue, MSG_ATCORE_NONETWORK, 0, 0);
signalintensity = 0;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_SIGNAL, signalintensity, 0);
}
}
}
}
static void QueryNetworkProc(void)
{
INT16U len;
if (CanSendATCmd(DLC_CFG)) {
len = AT_R_CREG(sendbuf[DLC_CFG]);
SendATCmd(DLC_CFG, &AT_R_CREG_PARA, sendbuf[DLC_CFG], len, QueryNetworkInformer);
}
}
static void QueryConfigInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
status &= ~_QueryConfig;
if (reason == AT_SUCCESS) {
if (atcmdack->ackbuf[0] == 1 && atcmdack->ackbuf[1] == 2) {
;
} else {
StartInitGsm(STEP_SetSMService);
}
} else {
StartInitGsm(STEP_SetSMService);
}
}
static void QueryConfigProc(void)
{
INT16U len;
if (CanSendATCmd(DLC_SM)) {
len = AT_R_CNMI(sendbuf[DLC_SM]);
SendATCmd(DLC_SM, &AT_R_CNMI_PARA, sendbuf[DLC_SM], len, QueryConfigInformer);
}
}
static void InitWaitTmrProc(void)
{
StopTmr(InitWaitTmr);
status &= (~_InitWait);
OSQPost(GsmTaskMsgQue, MSG_ATCORE_INIT, 0, 0);
}
static void QuerySIMTmrProc(void)
{
StopTmr(QuerySIMTmr);
OSQPost(GsmTaskMsgQue, MSG_ATCORE_INIT, 0, 0);
}
static void QueryNetworkTmrProc(void)
{
StartTmr(QueryNetworkTmr, PERIOD_QueryNetwork);
//StopTmr(QueryNetworkTmr);
if ((status & _Init) == 0) {
status |= _QueryNetwork;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
}
static void QuerySignalTmrProc(void)
{
//StopTmr(QuerySignalTmr);
StartTmr(QuerySignalTmr, PERIOD_QuerySignal);
if ((status & _Init) == 0) {
status |= _QuerySignal;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
}
static void QueryConfigTmrProc(void)
{
StartTmr(QueryConfigTmr, PERIOD_QueryConfig);
//StopTmr(QueryConfigTmr);
if ((status & _Init) == 0) {
status |= _QueryConfig;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
}
static void ResetTmrProc(void)
{
switch(opstep)
{
case STEP_Prewait:
StartTmr(ResetTmr, PERIOD_Prewait);
opstep = STEP_Powerdown;
break;
case STEP_Powerdown:
InitGsmPort();
PowerdownGsm(); /* powerdown gsm */
PowerupGsm();
StartTmr(ResetTmr, PERIOD_Powerdown);
opstep = STEP_WaitPowerdown;
break;
case STEP_WaitPowerdown:
ResetPowerdownGsm(); /* reset powerdown pin */
StartTmr(ResetTmr, PERIOD_WaitPowerdown);
opstep = STEP_Powerup;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_POWERDOWNGSM, 0, 0);
break;
case STEP_Powerup:
InitGsmPort();
PowerupGsm(); /* powerup gsm */
StartTmr(ResetTmr, PERIOD_Powerup);
opstep = STEP_WaitPowerup;
break;
case STEP_WaitPowerup:
ResetPowerupGsm(); /* reset powerup pin */
StartTmr(ResetTmr, PERIOD_WaitPowerup);
opstep = STEP_StopPowerup;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_POWERUPGSM, 0, 0);
/* open DLC_CFG */
if (!EstablishDLC(DLC_CFG, TRUE, 0)) {
ErrExit(ERR_ATCORE_ESTABLISHDLC);
} else {
OpenATTrans(DLC_CFG);
EchoOnATTrans(DLC_CFG);
}
break;
case STEP_StopPowerup:
StopResetProcess();
break;
default:
ErrExit(ERR_ATCORE_OPSTEP);
}
}
static void RestartTmrProc(void)
{
StartTmr(RestartTmr, PERIOD_Restart);
if ((status & (_VoiceConnect | _DataMode)) == 0){
#if DEBUG_UARTNo_GSMSTATUS <= 3
PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "<reset gsm for restart>\n");
#endif
ResetGsm();
}
}
static void DiagnoseProc(void)
{
if (status & _InitWait) {
if (GetTmrSwitch(InitWaitTmr) != ON) ErrExit(ERR_ATCORE_TMR);
}
if (status & _Reset) {
if (GetTmrSwitch(ResetTmr) != ON) ErrExit(ERR_ATCORE_TMR);
} else {
if (GetTmrSwitch(RestartTmr) != ON) ErrExit(ERR_ATCORE_TMR);
}
}
void InitAT_Core(void)
{
ResetTmr = CreateTimer(ResetTmrProc, 0); /* install reset timer */
InitWaitTmr = CreateTimer(InitWaitTmrProc, 0); /* install init wait timer */
RestartTmr = CreateTimer(RestartTmrProc, 0); /* install restart timer */
QuerySIMTmr = CreateTimer(QuerySIMTmrProc, 0); /* install query SIM card timer */
QuerySignalTmr = CreateTimer(QuerySignalTmrProc, 0); /* install query signal timer */
QueryConfigTmr = CreateTimer(QueryConfigTmrProc, 0); /* install query config timer */
QueryNetworkTmr = CreateTimer(QueryNetworkTmrProc, 0); /* install query network timer */
InstallDiagProc(DiagnoseProc);
#if DEBUG_UARTNo_GSMSTATUS <= 3
PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "<reset gsm for init>\n");
#endif
satcregstatut = NEED_SATC;
SetCopsMode(RESET_MANUAL_MODE);
tag_baud = 0;
status = _DetectSIM;
ResetGsm();
}
void ResetGsm(void)
{
AbandonAllATCmd(); /* abandon current AT command */
CloseAllATTrans(); /* close all at trans */
#if GSM_BENQ
Init_PIN_RS232();
#endif
ResetPowerupGsm(); /* reset powerup pin */
PowerdownGsm(); /* powerdown pin */
StopTmr(InitWaitTmr); /* stop init wait timer */
StopTmr(RestartTmr); /* stop restart timer */
StopTmr(QuerySignalTmr); /* stop querysignal timer */
StopTmr(QueryNetworkTmr); /* stop query network timer */
StopTmr(QueryConfigTmr); /* stop queryconfig timer */
OSQPost(GsmTaskMsgQue, MSG_ATCORE_RESET, 0, 0); /* send MSG_ATCORE_RESET */
status &= _DetectSIM;
status |= _Reset;
ClearAllRecoveryCHA(); /* clear recovery flag */
networkregistration = NETWORK_NotRegistered_Searching;
ct_smfailure = 0;
signalintensity = 0;
InitBuf(unreadsm, FALSE, sizeof(unreadsm));
if((NEED_SATC == satcregstatut) || (NEED_SATC_NO == satcregstatut)) needsatc = satcregstatut;
if((NEED_SATC != needsatc) && (NEED_SATC_NO != needsatc)) needsatc = NEED_SATC;
ConvertCopsMode(RESET_CONVERT);
SetCopsModeByResetMode();
OpenATTrans(DLC_GPRS);
ClearDLCDataMode(DLC_GPRS);
opstep = STEP_Prewait;
ResetTmrProc();
}
void AT_CoreEntry(void)
{
if (status & _Reset) return;
if (status & _RequestReset) {
if ((status & _VoiceConnect) == 0) ResetGsm();
}
if (FindRecoveryCHA() != 0xFF) RecoveryProc();
if (status & _Escape) EscapeProc();
if (status & _AckSM) AckSMProc();
if (status & _Init) InitProc();
if (status & _ReadSM) ReadSMProc();
if (status & _QueryNetwork) QueryNetworkProc();
if (status & _QueryConfig) QueryConfigProc();
if (status & _QuerySignal) QuerySignalProc();
}
BOOLEAN AT_CoreHaveTask(void)
{
INT16U mask;
if (FindRecoveryCHA() != 0xFF) return TRUE;
mask = _Reset | _AckSM | _Init | _QueryConfig | _QuerySignal | _QueryNetwork | _Escape | _ReadSM;
if ((status & mask) == 0) {
return FALSE;
} else {
return TRUE;
}
}
void NotifySendSMSuccess(void)
{
ct_smfailure = 0;
SetDefSMSuspendTime();
}
void NotifySendSMFailure(void)
{
SetErrSMSuspendTime();
if (++ct_smfailure >= MAX_SMFAILURE) {
if ((status & (_VoiceConnect | _DataMode)) == 0) {
#if DEBUG_UARTNo_GSMSTATUS <= 3
PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "<reset gsm for sending SM error>\n");
#endif
ResetGsm();
} else {
ct_smfailure = 0;
}
}
}
void NotifyVoiceConnect(void)
{
if ((status & _Reset) == 0) status |= _VoiceConnect;
}
void NotifyVoiceDisconnect(void)
{
status &= (~_VoiceConnect);
OSQPost(GsmTaskMsgQue, MSG_ATCORE_VOICEDISCONNECT, 0, 0);
}
void NotifyDataConnect(void)
{
if ((status & _Reset) == 0) {
status |= _DataMode;
CloseATTrans(DLC_GPRS);
SetDLCDataMode(DLC_GPRS);
}
}
void NotifyDataDisconnect(void)
{
status &= ~_DataMode;
OpenATTrans(DLC_GPRS);
ClearDLCDataMode(DLC_GPRS);
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
void RequestResetGSM(void)
{
if ((status & _Reset) == 0) {
status |= _RequestReset;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
}
void NotifyRecvSM(void)
{
#if GSM_BENQ
status |= _QueryConfig;
#else
status |= (_AckSM | _QueryConfig);
#endif
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
void NotifyUnReadSM(INT8U index)
{
if (index < sizeof(unreadsm)) {
unreadsm[index] = TRUE;
if ((status & _ReadSM) == 0) {
status |= _ReadSM;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
}
}
void RecoveryATCmd(INT8U ch)
{
if (ch >= MAX_CHA) return;
if (!ch_recovery[ch]) {
ch_recovery[ch] = TRUE;
ct_recovery[ch] = 0;
}
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
void EscapeATCmd(void)
{
status |= _Escape;
StopATCmd(DLC_SM, AT_FAILURE);
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
void ProhibitSM(void)
{
if ((status & _ProhibitSM) == 0) {
status |= _ProhibitSM;
}
}
void UnprohibitSM(void)
{
if (status & _ProhibitSM) {
status &= ~_ProhibitSM;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_UNPROHIBITSM, 0, 0);
}
}
void DetectGsmSysStart(void)
{
//opstep = STEP_StopPowerup;
//StartTmr(ResetTmr, PERIOD_WaitPowerup);
}
INT8U GetSignalIntensity(void)
{
return signalintensity;
}
INT8U GetNetworkStatus(void)
{
return networkregistration;
}
BOOLEAN NetworkRegisted(void)
{
if (networkregistration == NETWORK_HomeNetwork || networkregistration == NETWORK_Roaming) return TRUE;
else return FALSE;
}
BOOLEAN SIMCardInserted(void)
{
if (status & _DetectSIM) return TRUE;
else return FALSE;
}
BOOLEAN VoiceConnected(void)
{
if (status & _VoiceConnect) return TRUE;
else return FALSE;
}
BOOLEAN DataConnected(void)
{
if (status & _DataMode) return TRUE;
else return FALSE;
}
BOOLEAN SMIsProhibited(void)
{
if (status & _ProhibitSM) return TRUE;
else return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -