📄 at_core.c
字号:
/****************************************************************
** *
** FILE : AT_CORE.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "bsp.h"
#include "message.h"
#include "hardware.h"
#include "tools.h"
#include "public.h"
#include "errtask.h"
#include "timetask.h"
#include "gsmtask.h"
#include "at_cmd.h"
#include "at_sm.h"
#include "dlcs.h"
#include "at_trans.h"
#include "at_core.h"
#include "phonedrv.h"
//#include "ZPrint.h"
#define SMSADDRDEBUG 0
/*
********************************************************************************
* DEFINE CONFIG PARAMETERS
********************************************************************************
*/
#define MAX_CHA 4
#define SIZE_MEM 50
#define MAX_TRY 6
#define MAX_RECOVERY 15
#define MAX_SMFAILURE 6
#define MAX_UNREADSM 50
/*
********************************************************************************
* DEFINE Select mode status
********************************************************************************
*/
#define AUTO_MODE 0x00
#define MANUAL_MODE 0x01
#define RESET_MANUAL_MODE 0x80
#define AT_CONVERT 0x00
#define RESET_CONVERT 0x01
#define NEED_SATC 0xAA
#define NEED_SATC_NO 0x55
#define NEED_SATC_CLEAR 0x00
/*
********************************************************************************
* DEFINE AT Commands core status
********************************************************************************
*/
#define _Reset 0x0001
#define _Init 0x0002
#define _VoiceConnect 0x0004
#define _AckSM 0x0008
#define _QuerySignal 0x0010
#define _QueryConfig 0x0020
#define _QueryNetwork 0x0040
#define _Escape 0x0080
#define _DetectSIM 0x0100
#define _NetworkRegistered 0x0200
#define _DataMode 0x0400
#define _InitWait 0x0800
#define _RequestReset 0x1000
#define _ProhibitSM 0x2000
#define _ReadSM 0x4000
#define NEED_INGORE 0x01
/*
********************************************************************************
* DEFINE opstep
********************************************************************************
*/
/*
********************************************************************************
* define initialization step
********************************************************************************
*/
#define STEP_Test 0
#define STEP_SetBaud 1
#define STEP_QueryAutocompon 2
#define STEP_SetAutoCompon 3
#define STEP_SetSATC 4
#define STEP_NOSLEEP 5
#define STEP_CFUN 6
#define STEP_COPS 7
#define STEP_EnterMuxInit 8
#define STEP_QuerySIM 9
#define STEP_EnterMux 10
#define STEP_EstablishDLC 11
#define STEP_EchoON 12
#define STEP_SetCMEE 13
#define STEP_SetCOLP 14
#define STEP_OpenCLIP 15
#define STEP_SetPDUMode 16
#define STEP_SetSMService 17
#define STEP_OpenSMIndication 18
#define STEP_ListSM 19
#define STEP_SetSMSAddr 20
/*
********************************************************************************
* define reset step
********************************************************************************
*/
#define STEP_Prewait 0
#define STEP_Powerdown 1
#define STEP_WaitPowerdown 2
#define STEP_Powerup 3
#define STEP_WaitPowerup 4
#define STEP_StopPowerup 5
/*
********************************************************************************
* DEFINE TIMER PERIOD
********************************************************************************
*/
#define PERIOD_Restart MINUTE, 180
#define PERIOD_Restart_NoSIM MINUTE, 2
#define PERIOD_Restart_NoNetwork MINUTE, 5
#define PERIOD_QueryConfig SECOND, 15
#define PERIOD_QuerySignal SECOND, 10
#define PERIOD_QueryNetwork SECOND, 5
#define PERIOD_Prewait SECOND, 2
#define PERIOD_Powerdown SECOND, 4
#define PERIOD_WaitPowerdown SECOND, 3
#define PERIOD_Powerup SECOND, 2
#define PERIOD_WaitPowerup SECOND, 10
#define PERIOD_INITWAIT SECOND, 10
#define PERIOD_QuerySIM SECOND, 2
/*
********************************************************************************
* DEFINE MODULE VARIANT
********************************************************************************
*/
static INT16U status;
static INT8U networkregistration, signalintensity;
static INT8U ct_try, ct_smfailure;
static BOOLEAN SecondDetectSIM;
static BOOLEAN ch_recovery[MAX_CHA];
static INT8U ct_recovery[MAX_CHA];
static TMR_TSK *RestartTmr, *ResetTmr, *QuerySignalTmr, *QueryConfigTmr, *QuerySIMTmr, *QueryNetworkTmr, *InitWaitTmr;
static BOOLEAN unreadsm[MAX_UNREADSM];
static INT8U curindex;
static INT8U opstep, opdlci, tag_baud;
static INT8U sendbuf[MAX_CHA][SIZE_MEM];
static INT8U selectmode;
static INT8U needsatc, satcregstatut;
/*
********************************************************************************
* DEFINE GSM BAUD
********************************************************************************
*/
#if GSM_BENQ
static const INT32U GSMBAUD[] = {19200L, 19200L, 19200L, 19200L, 19200L, 19200L, 19200L};
#else
static const INT32U GSMBAUD[] = {9600L, 19200L, 38400L, 57600L, 115200L, 4800L, 2400L};
#endif
#if 0
static void Turninto_Test(void);
#endif
#if GSM_BENQ
static void Turninto_SetBaud(void);
static void Turninto_QueryAutoCompon(void);
static void Turninto_SetAutoCompon(void);
static void Turninto_SetSatc(void);
static void Turninto_SetCfun(void);
static void Turninto_SetCops(void);
static void Turninto_SetNoSleep(void);
static void Turninto_EnterMuxInit(void);
static void Turninto_SetCOLP(void);
#endif
static void Turninto_QuerySIM(void);
static void Turninto_EnterMux(void);
static void Turninto_EstablishDLC(void);
#if GSM_BENQ
#else
static void Turninto_EchoON(void);
#endif
static void Turninto_SetSMService(void);
static void Turninto_SetPDUMode(void);
static void Turninto_OpenSMIndication(void);
static void Turninto_OpenCLIP(void);
static void Turninto_ListSM(void);
static void Turninto_SetSMSAddr(void);
static void Turninto_SetCMEE(void);
static void InitProc(void);
static void InitInformer(INT8U reason, const ATCMDACK_STRUCT *atcmdack);
static void Informer_EstablishDLC(INT8U dlci, INT8U reason);
static void StopInitGsm(void);
static BOOLEAN NeedAutoCops(void)
{
if((0x0f & selectmode) == AUTO_MODE) return TRUE;
else return FALSE;
}
static void ConvertCopsMode(INT8U type)
{
if(AT_CONVERT == type){
if(AUTO_MODE == (selectmode & 0x0f)) selectmode |= MANUAL_MODE;
else selectmode &= ~MANUAL_MODE;
}else if(RESET_CONVERT == type){
if(0 != (selectmode & 0xf0)) selectmode &= 0x0f;
else selectmode |= RESET_MANUAL_MODE;
}
}
static void SetCopsModeByResetMode(void)
{
selectmode &= 0xf0;
selectmode = selectmode | (selectmode >> 4);
}
__inline void SetCopsMode(INT8U type)
{
selectmode = type;
}
BOOLEAN SetPDPContext2(char cid, char *APN, char *PDP_addr)
{
INT16U len;
if(!CanSendATCmd(DLC_GPRS)) return FALSE;
len = AT_CGDCONT(sendbuf[DLC_GPRS], cid, APN, PDP_addr);
SendATCmd(DLC_GPRS, &AT_CGDCONT_PARA, sendbuf[DLC_GPRS], len, 0);
return TRUE;
}
#if 0
/* send at command */
static void Turninto_Test(void)
{
opstep = STEP_Test;
}
#endif
static void InitProc_Test(void)
{
INT16U len;
if (!CanSendATCmd(DLC_CFG)) return;
len = AT_TEST(sendbuf[DLC_CFG]);
SendATCmd(DLC_CFG, &AT_TEST_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Informer_Test(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
reason = reason;
atcmdack = atcmdack;
Turninto_SetBaud();
}
/* set baud */
static void Turninto_SetBaud(void)
{
opstep = STEP_SetBaud;
}
static void InitProc_SetBaud(void)
{
INT16U len;
if (!CanSendATCmd(DLC_CFG)) return;
len = AT_IPR(sendbuf[DLC_CFG], DLC_BAUD);
SendATCmd(DLC_CFG, &AT_IPR_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Informer_SetBaud(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
reason = reason;
atcmdack = atcmdack;
InitDLCIO(); /* NOTE: InitDLCIO */
#if GSM_BENQ
//Turninto_SetNoSleep();
//if(!GsmAutoCompon.IsSend) Turninto_SetAutoCompon();
//else Turninto_SetSatc();
Turninto_QueryAutoCompon();
#else
Turninto_QuerySIM();
#endif
}
static void Turninto_QueryAutoCompon(void)
{
opstep = STEP_QueryAutocompon;
}
static void InitProc_QueryAutoCompon(void)
{
INT16U len;
if (!CanSendATCmd(DLC_CFG)) return;
len = AT_R_AUTOCAMPON(sendbuf[DLC_CFG]);
SendATCmd(DLC_CFG, &AT_R_AUTOCAMPON_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Inform_QueryAutoCompon(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
if(AT_SUCCESS == reason){
if(0 == atcmdack->ackbuf[0]){
if(NEED_SATC == needsatc){
Turninto_SetSatc();
needsatc = NEED_SATC_NO;
satcregstatut = NEED_SATC_CLEAR;
}else {
Turninto_SetCfun();
needsatc = NEED_SATC;
satcregstatut = NEED_SATC_CLEAR;
}
}else{
Turninto_SetAutoCompon();
}
}else{
Turninto_SetCops();
}
}
static void Turninto_SetAutoCompon(void)
{
opstep = STEP_SetAutoCompon;
}
static void InitProc_SetAutoCompon(void)
{
INT8U len;
if(!CanSendATCmd(DLC_CFG)) return ;
len = AT_AUTOCAMPON(sendbuf[DLC_CFG]);
SendATCmd(DLC_CFG, &AT_AUTOCAMPON_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Inform_SetAutoCompon(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
reason = reason;
atcmdack = atcmdack;
if(AT_SUCCESS == reason){
ResetGsm();
} else {
if(NEED_SATC == needsatc){
Turninto_SetSatc();
needsatc = NEED_SATC_NO;
satcregstatut = NEED_SATC_CLEAR;
}else {
Turninto_SetCfun();
needsatc = NEED_SATC;
satcregstatut = NEED_SATC_CLEAR;
}
}
}
static void Turninto_SetSatc(void)
{
opstep = STEP_SetSATC;
}
static void InitProc_SetSatc(void)
{
INT8U len;
if(!CanSendATCmd(DLC_CFG)) return ;
len = AT_SATC(sendbuf[DLC_CFG]);
SendATCmd(DLC_CFG, &AT_SATC_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Inform_SetSatc(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
reason = reason;
atcmdack = atcmdack;
//Turninto_SetNoSleep();
Turninto_SetCfun();
}
static void Turninto_SetCfun(void)
{
opstep = STEP_CFUN;
}
static void InitProc_SetCfun(void)
{
INT8U len;
if(!CanSendATCmd(DLC_CFG)) return ;
len = AT_CFUN(sendbuf[DLC_CFG]);
SendATCmd(DLC_CFG, &AT_CFUN_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Inform_SetCfun(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
reason = reason;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -