⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at_core.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
📖 第 1 页 / 共 4 页
字号:
/****************************************************************
**                                                              *
**  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 + -