📄 at_core.c
字号:
{
reason = reason;
atcmdack = atcmdack;
Turninto_SetSMSAddr();
}
/* set SMS address */
static void Turninto_SetSMSAddr(void)
{
opstep = STEP_SetSMSAddr;
}
static void InitProc_SetSMSAddr(void)
{
INT16U len;
if (!CanSendATCmd(DLC_SM)) return;
if (PubParaValid(SMSTEL_)) {
len = AT_CSCA(sendbuf[DLC_SM], SmsTel.tel, SmsTel.len);
SendATCmd(DLC_SM, &AT_CSCA_PARA, sendbuf[DLC_SM], len, InitInformer);
} else {
#if SMSADDRDEBUG
memcpy(SmsTel.tel,(INT8U*)"+8613800592500",14);
SmsTel.len=14;
len = AT_CSCA(sendbuf[DLC_SM], SmsTel.tel, SmsTel.len);
SendATCmd(DLC_SM, &AT_CSCA_PARA, sendbuf[DLC_SM], len, InitInformer);
#endif
StopInitGsm();
}
}
static void Informer_SetSMSAddr(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
reason = reason;
atcmdack = atcmdack;
StopInitGsm();
}
static INT8U FailureInformer(INT8U step, const ATCMDACK_STRUCT *atcmdack)
{
INT8U ret_result;
atcmdack = atcmdack;
ret_result = 0x00;
switch(step){
case STEP_QueryAutocompon:
ret_result = NEED_INGORE;
Inform_QueryAutoCompon(AT_FAILURE, atcmdack);
break;
case STEP_SetAutoCompon:
ret_result = NEED_INGORE;
Inform_SetAutoCompon(AT_FAILURE, atcmdack);
break;
case STEP_SetSATC:
ret_result = NEED_INGORE;
Inform_SetSatc(AT_FAILURE, atcmdack);
break;
case STEP_CFUN:
ret_result = NEED_INGORE;
Inform_SetCfun(AT_FAILURE, atcmdack);
break;
case STEP_COPS:
Inform_SetCops(AT_FAILURE, atcmdack);
break;
default:
break;
}
return ret_result;
}
static void InitInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
if (reason == AT_SUCCESS) {
ct_try = 0;
switch (opstep)
{
case STEP_Test: /* Test Gsm module */
Informer_Test(reason, atcmdack);
break;
case STEP_SetBaud: /* Set communication BAUD */
Informer_SetBaud(reason, atcmdack);
break;
case STEP_QueryAutocompon:
Inform_QueryAutoCompon(reason, atcmdack);
break;
case STEP_SetAutoCompon:
Inform_SetAutoCompon(reason, atcmdack);
break;
case STEP_SetSATC:
Inform_SetSatc(reason, atcmdack);
break;
case STEP_CFUN:
Inform_SetCfun(reason, atcmdack);
break;
case STEP_COPS:
Inform_SetCops(reason, atcmdack);
break;
case STEP_NOSLEEP:
Informer_SetNoSleep(reason, atcmdack);
break;
case STEP_QuerySIM: /* Query SIM */
Informer_QuerySIM(reason, atcmdack);
break;
case STEP_EnterMuxInit:
Informer_EnterMuxInit(reason, atcmdack); /* Close echo for mux mode */
break;
case STEP_EnterMux: /* enter multiplex mode */
Informer_EnterMux(reason, atcmdack);
break;
case STEP_EchoON: /* turn on echo */
Informer_EchoON(reason, atcmdack);
break;
case STEP_SetCMEE:
Informer_SetCMEE(reason, atcmdack);
break;
case STEP_SetCOLP:
Informer_SetCOLP(reason, atcmdack);
break;
case STEP_SetSMService: /* Set SMS service mode */
Informer_SetSMService(reason, atcmdack);
break;
case STEP_OpenCLIP: /* Open CLIP */
Informer_OpenCLIP(reason, atcmdack);
break;
case STEP_SetPDUMode: /* Select PDU mode */
Informer_SetPDUMode(reason, atcmdack);
break;
case STEP_OpenSMIndication: /* Enable new SMS message indication */
Informer_OpenSMIndication(reason, atcmdack);
break;
case STEP_ListSM: /* List SM */
Informer_ListSM(reason, atcmdack);
break;
case STEP_SetSMSAddr: /* Set SMS address */
Informer_SetSMSAddr(reason, atcmdack);
break;
default:
ErrExit(ERR_ATCORE_OPSTEP);
}
OSQPost(GsmTaskMsgQue, MSG_ATCORE_INIT, 0, 0);
} else {
if(NEED_INGORE == FailureInformer(opstep, atcmdack)) return ;
if (++ct_try > MAX_TRY) {
if (opstep == STEP_SetSMSAddr) {
StopInitGsm();
} else {
#if DEBUG_UARTNo_GSMSTATUS <= 3
PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "<reset gsm for init error>\n");
#endif
// if(opstep == STEP_SetSMSAddr)
ResetGsm();
}
} else {
status |= _InitWait;
StartTmr(InitWaitTmr, PERIOD_INITWAIT);
}
}
}
static void InitProc(void)
{
if (status & _InitWait) return;
switch (opstep)
{
case STEP_Test: /* Test Gsm module */
InitProc_Test();
break;
case STEP_SetBaud: /* Set communication BAUD */
InitProc_SetBaud();
break;
case STEP_QueryAutocompon:
InitProc_QueryAutoCompon();
break;
case STEP_SetAutoCompon:
InitProc_SetAutoCompon();
break;
case STEP_SetSATC:
InitProc_SetSatc();
break;
case STEP_CFUN:
InitProc_SetCfun();
break;
case STEP_COPS:
InitProc_SetCops();
break;
case STEP_NOSLEEP:
InitProc_SetNoSleep();
break;
case STEP_QuerySIM: /* Query SIM */
InitProc_QuerySIM();
break;
case STEP_EnterMuxInit:
InitProc_EnterMuxInit();
break;
case STEP_EnterMux: /* enter multiplex mode */
InitProc_EnterMux();
break;
case STEP_EstablishDLC: /* establish DLCS */
InitProc_EstablishDLC();
break;
case STEP_EchoON: /* turn on echo mode */
InitProc_EchoON();
break;
case STEP_SetCMEE:
InitProc_SetCMEE();
break;
case STEP_SetCOLP:
InitProc_SetCOLP(); /* Set CLOP */
break;
case STEP_OpenCLIP: /* Open CLIP */
InitProc_OpenCLIP();
break;
case STEP_SetPDUMode: /* Select PDU mode */
InitProc_SetPDUMode();
break;
case STEP_SetSMService: /* Set SMS service mode */
InitProc_SetSMService();
break;
case STEP_OpenSMIndication: /* Enable new SMS message indication */
InitProc_OpenSMIndication();
break;
case STEP_ListSM: /* List SM */
InitProc_ListSM();
break;
case STEP_SetSMSAddr: /* Set SMS address */
InitProc_SetSMSAddr();
break;
default:
ErrExit(ERR_ATCORE_OPSTEP);
}
}
static INT8U FindRecoveryCHA(void)
{
INT8U i;
for (i = 0; i < MAX_CHA; i++) {
if (ch_recovery[i]) return i;
}
return 0xFF;
}
static void ClearAllRecoveryCHA(void)
{
INT8U i;
for (i = 0; i < MAX_CHA; i++) {
ch_recovery[i] = FALSE;
ct_recovery[i] = 0;
}
}
static void StartInitGsm(INT8U step)
{
status |= _Init;
ct_try = 0;
opstep = step;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_INIT, 0, 0);
}
static void StopInitGsm(void)
{
status &= ~_Init;
status |= _QueryNetwork;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_ENDINIT, 0, 0);
}
static void StopResetProcess(void)
{
status &= ~_Reset;
StopTmr(ResetTmr);
StartTmr(RestartTmr, PERIOD_Restart_NoNetwork);
StartTmr(QueryNetworkTmr, SECOND, 1);
StartTmr(QuerySignalTmr, SECOND, 1);
StartTmr(QueryConfigTmr, SECOND, 1);
StartInitGsm(STEP_Test);
}
#if 0
static void AckSMInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
atcmdack = atcmdack;
status &= ~_AckSM;
if (reason != AT_SUCCESS)
StartInitGsm(STEP_SetSMService);
}
#endif
static void AckSMProc(void)
{
#if GSM_BENQ
#else
if (CanSendATCmd(DLC_SM)) {
len = AT_CNMA(sendbuf[DLC_SM],0,0);
SendATCmd(DLC_SM, &AT_CNMA_PARA, sendbuf[DLC_SM], len, AckSMInformer);
}
#endif
}
static void RecoveryInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
INT8U curcha;
atcmdack = atcmdack;
if ((curcha = FindRecoveryCHA()) == 0xFF) return;
if (reason == AT_SUCCESS) {
ch_recovery[curcha] = FALSE;
} else {
if (++ct_recovery[curcha] > MAX_RECOVERY) {
#if DEBUG_UARTNo_GSMSTATUS <= 3
PrintFromUART(DEBUG_UARTNo_GSMSTATUS, "<reset gsm for recovery error>\n");
#endif
if ((status & _Init) && opstep == STEP_Test) {
if (tag_baud >= sizeof(GSMBAUD) / sizeof(GSMBAUD[0])) tag_baud = 0;
uarts_init(UART_GSMIO, GSMBAUD[tag_baud++]);
}
ResetGsm();
}
}
}
static void RecoveryProc(void)
{
INT8U curcha;
INT16U len;
if ((curcha = FindRecoveryCHA()) == 0xFF) return;
if (CanSendATCmd(curcha)) {
len = AT_TEST(sendbuf[curcha]);
SendATCmd(curcha, &AT_TEST_PARA, sendbuf[curcha], len, RecoveryInformer);
}
}
static void EscapeInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
atcmdack = atcmdack;
status &= ~_Escape;
if (reason != AT_SUCCESS) RecoveryATCmd(DLC_SM);
}
static void EscapeProc(void)
{
INT16U len;
if (CanSendATCmd(DLC_SM)) {
len = AT_ESCAPE(sendbuf[DLC_SM]);
SendATCmd(DLC_SM, &AT_ESCAPE_PARA, sendbuf[DLC_SM], len, EscapeInformer);
}
}
static void DelSMInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
reason = reason;
atcmdack = atcmdack;
if (curindex < sizeof(unreadsm)) {
unreadsm[curindex] = FALSE;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
}
static void DelSMProc(void)
{
INT8U len;
len = AT_CMGD(sendbuf[DLC_SM], curindex);
SendATCmd(DLC_SM, &AT_CMGD_PARA, sendbuf[DLC_SM], len, DelSMInformer);
}
static void ReadSMInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
reason = reason;
atcmdack = atcmdack;
DelSMProc();
}
static void ReadSMProc(void)
{
INT8U i, len;
if (CanSendATCmd(DLC_SM)) {
for (i = 0; i < sizeof(unreadsm) - 1; i++) {
if (unreadsm[i]) {
curindex = i;
len = AT_CMGR(sendbuf[DLC_SM], i);
SendATCmd(DLC_SM, &AT_CMGR_PARA, sendbuf[DLC_SM], len, ReadSMInformer);
return;
}
}
status &= ~_ReadSM;
OSQPost(GsmTaskMsgQue, MSG_ATCORE_TSK, 0, 0);
}
}
static void QuerySignalInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
status &= ~_QuerySignal;
if (reason == AT_SUCCESS) {
if ((signalintensity = atcmdack->ackbuf[0]) > 31) signalintensity = 0;
if (signalintensity > 2 && signalintensity < 28) {
signalintensity = signalintensity / 6 + 1;
} else {
signalintensity = signalintensity / 6;
}
if ((status & _NetworkRegistered) == 0) {
signalintensity = 0;
}
OSQPost(GsmTaskMsgQue, MSG_ATCORE_SIGNAL, signalintensity, 0);
}
}
static void QuerySignalProc(void)
{
INT16U len;
if (CanSendATCmd(DLC_CFG)) {
len = AT_CSQ(sendbuf[DLC_CFG]);
SendATCmd(DLC_CFG, &AT_CSQ_PARA, sendbuf[DLC_CFG], len, QuerySignalInformer);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -