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

📄 at_core.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
📖 第 1 页 / 共 4 页
字号:
    atcmdack = atcmdack;
    Turninto_SetCops();
    //Turninto_SetNoSleep();
}

static void Turninto_SetCops(void)
{
    opstep = STEP_COPS;
}

static void InitProc_SetCops(void)
{
    INT8U len,type;

    if(!CanSendATCmd(DLC_CFG)) return ;
    if(NeedAutoCops()) type = AT_MODE_AUTO_COPS;
    else type = AT_MODE_MANUAL_COPS;
    len = AT_COPS(sendbuf[DLC_CFG], type);
    SendATCmd(DLC_CFG, &AT_COPS_PARA, sendbuf[DLC_CFG], len, InitInformer);
  
}
static void Inform_SetCops(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    
    if(AT_SUCCESS == reason){
        Turninto_SetNoSleep();
    }else{
        ConvertCopsMode(AT_CONVERT);    
    }
}

static void Turninto_SetNoSleep(void)
{
    opstep = STEP_NOSLEEP;
}
static void InitProc_SetNoSleep(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_CFG)) return;
    len = AT_NOSLEEP(sendbuf[DLC_CFG]);
    SendATCmd(DLC_CFG, &AT_NOSLEEP_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Informer_SetNoSleep(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    Turninto_SetCOLP();
}


/* detect SIM card */
static void Turninto_QuerySIM(void)
{
    StopTmr(QuerySIMTmr);
    opstep          = STEP_QuerySIM;
    SecondDetectSIM = FALSE;
}

static void InitProc_QuerySIM(void)
{
    INT16U len;

    if (GetTmrSwitch(QuerySIMTmr) == ON) return;
    if (!CanSendATCmd(DLC_CFG)) return;
    len = AT_R_SCKS(sendbuf[DLC_CFG]);
    SendATCmd(DLC_CFG, &AT_R_SCKS_PARA, sendbuf[DLC_CFG], len, InitInformer);
}

static void Informer_QuerySIM(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason = reason;
    if (atcmdack->ackbuf[1] == 1) {
        if (SecondDetectSIM) {
            if ((status & _DetectSIM) == 0) {
                status |= _DetectSIM;
                StartTmr(RestartTmr, PERIOD_Restart);
                OSQPost(GsmTaskMsgQue, MSG_ATCORE_DETECTSIM, 0, 0);
            }
            #if GSM_BENQ
            Turninto_EnterMuxInit();
            #else
            Turninto_EnterMux();
            #endif
        } else {
            SecondDetectSIM = TRUE;
        }
    } else {
        SecondDetectSIM = FALSE;
        if (status & _DetectSIM) {
            status &= ~_DetectSIM;
            StartTmr(RestartTmr, PERIOD_Restart_NoSIM);
            OSQPost(GsmTaskMsgQue, MSG_ATCORE_NOSIMCARD, 0, 0);
        }
        StartTmr(QuerySIMTmr, PERIOD_QuerySIM);
    }
}
static void Turninto_EnterMuxInit(void)
{
    opstep = STEP_EnterMuxInit;
}
static void InitProc_EnterMuxInit(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_CFG)) return;
    len = AT_MUXInit(sendbuf[DLC_CFG],0);
    SendATCmd(DLC_CFG, &AT_MUXINIT_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Informer_EnterMuxInit(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    Turninto_EnterMux();
}

/* enter multiplex mode */
static void Turninto_EnterMux(void)
{
    opstep = STEP_EnterMux;
}

static void InitProc_EnterMux(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_CFG)) return;
    len = AT_CMUX(sendbuf[DLC_CFG]);
    SendATCmd(DLC_CFG, &AT_CMUX_PARA, sendbuf[DLC_CFG], len, InitInformer);
}

static void Informer_EnterMux(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    Turninto_EstablishDLC();
}

/* establish DLCS */
static void Turninto_EstablishDLC(void)
{
    if (!ReleaseDLC(DLC_CFG, 0)) {
        ErrExit(ERR_ATCORE_ESTABLISHDLC);
    } else {
        CloseATTrans(DLC_CFG);
    }
    opstep = STEP_EstablishDLC;
    opdlci = DLC_CTL;
}

static void InitProc_EstablishDLC(void)
{
    switch(opdlci)
    {
        case DLC_CTL:
            if (DLCIsClose(DLC_CTL)) {
                if (!EstablishDLC(DLC_CTL, FALSE, Informer_EstablishDLC)) {
                    ErrExit(ERR_ATCORE_ESTABLISHDLC);
                }
            }
            break;
        case DLC_GPRS:
            if (DLCIsClose(DLC_GPRS)) {
                if (!EstablishDLC(DLC_GPRS, FALSE, Informer_EstablishDLC)) {
                    ErrExit(ERR_ATCORE_ESTABLISHDLC);
                }
            }
            break;
        case DLC_SM:
            if (DLCIsClose(DLC_SM)) {
                if (!EstablishDLC(DLC_SM, FALSE, Informer_EstablishDLC)) {
                    ErrExit(ERR_ATCORE_ESTABLISHDLC);
                }
            }
            break;
        case DLC_CFG:
            if (DLCIsClose(DLC_CFG)) {
                if (!EstablishDLC(DLC_CFG, FALSE, Informer_EstablishDLC)) {
                    ErrExit(ERR_ATCORE_ESTABLISHDLC);
                }
            }
            break;
        default:
            ErrExit(ERR_ATCORE_OPSTEP);
            break;
    }
}

static void Informer_EstablishDLC(INT8U dlci, INT8U reason)
{
    if (reason != _SUCCESS) {
        ErrExit(ERR_ATCORE_ESTABLISHDLC);
        return;
    }

    switch(dlci)
    {
        case DLC_CTL:
            opdlci = DLC_GPRS;
            break;
        case DLC_GPRS:
            OpenATTrans(DLC_GPRS);
            EchoOnATTrans(DLC_GPRS);
            opdlci = DLC_SM;
            break;
        case DLC_SM:
            OpenATTrans(DLC_SM);
            #if GSM_BENQ
            EchoOnATTrans(DLC_SM);
            #else
            EchoOffATTrans(DLC_CFG);
	           #endif
	    opdlci = DLC_CFG;

            break;
        case DLC_CFG:
            OpenATTrans(DLC_CFG);
            #if GSM_BENQ
            EchoOnATTrans(DLC_CFG);
            Turninto_SetCMEE();
            #else
            EchoOffATTrans(DLC_CFG);
            Turninto_EchoON();
            #endif
            break;
        default:
            ErrExit(ERR_ATCORE_OPSTEP);
            break;
    }
    OSQPost(GsmTaskMsgQue, MSG_ATCORE_INIT, 0, 0);
}

#if GSM_BENQ
#else
/* turn on echo */
static void Turninto_EchoON(void)
{
    opstep = STEP_EchoON;
    opdlci = DLC_SM;
}
#endif
static void InitProc_EchoON(void)
{
    INT16U len;

    if (opdlci == DLC_SM) {
        if (!CanSendATCmd(DLC_SM)) return;
        len = AT_ECHO(sendbuf[DLC_SM], TRUE);
        SendATCmd(DLC_SM, &AT_ECHO_PARA, sendbuf[DLC_SM], len, InitInformer);
    } else if (opdlci == DLC_CFG) {
        if (!CanSendATCmd(DLC_CFG)) return;
        len = AT_ECHO(sendbuf[DLC_CFG], TRUE);
        SendATCmd(DLC_CFG, &AT_ECHO_PARA, sendbuf[DLC_CFG], len, InitInformer);
    }
}

static void Informer_EchoON(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    if (opdlci == DLC_SM) {
        EchoOnATTrans(DLC_SM);
        opdlci = DLC_CFG;
    } else if (opdlci == DLC_CFG) {
        EchoOnATTrans(DLC_CFG);
        Turninto_SetCMEE();
    }
}

/* Open mobile error report */
static void Turninto_SetCMEE(void)
{
    opstep = STEP_SetCMEE;
}

static void InitProc_SetCMEE(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_SM)) return;
    #if GSM_BENQ
    len = AT_CMEE(sendbuf[DLC_SM], '2');
    #else
    len = AT_CMEE(sendbuf[DLC_SM], '2');
    #endif
    SendATCmd(DLC_SM, &AT_CMEE_PARA, sendbuf[DLC_SM], len, InitInformer);
}

static void Informer_SetCMEE(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    Turninto_OpenCLIP();
    //Turninto_SetCOLP();
}


static void Turninto_SetCOLP(void)
{
    opstep = STEP_SetCOLP;
}
static void InitProc_SetCOLP(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_CFG)) return;
    len = AT_COLP(sendbuf[DLC_CFG],COLP_DISABLE);
    SendATCmd(DLC_CFG, &AT_COLP_PARA, sendbuf[DLC_CFG], len, InitInformer);
}
static void Informer_SetCOLP(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    //Turninto_OpenCLIP();
    Turninto_QuerySIM();
}


/* set SM service mode */
static void Turninto_SetSMService(void)
{
    opstep = STEP_SetSMService;
}

static void InitProc_SetSMService(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_SM)) return;
    len = AT_CSMS(sendbuf[DLC_SM], 0);
    SendATCmd(DLC_SM, &AT_CSMS_PARA, sendbuf[DLC_SM], len, InitInformer);
}

static void Informer_SetSMService(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    Turninto_OpenSMIndication();
}

/* set PDU mode */
static void Turninto_SetPDUMode(void)
{
    opstep = STEP_SetPDUMode;
}

static void InitProc_SetPDUMode(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_SM)) return;
    len = AT_CMGF(sendbuf[DLC_SM], MODE_PDU);
    SendATCmd(DLC_SM, &AT_CMGF_PARA, sendbuf[DLC_SM], len, InitInformer);
}

static void Informer_SetPDUMode(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    Turninto_SetSMService();
}

/* open SM indication */
static void Turninto_OpenSMIndication(void)
{
    opstep = STEP_OpenSMIndication;
}

static void InitProc_OpenSMIndication(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_SM)) return;
    len = AT_CNMI(sendbuf[DLC_SM]);
    SendATCmd(DLC_SM, &AT_CNMI_PARA, sendbuf[DLC_SM], len, InitInformer);
}

static void Informer_OpenSMIndication(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    Turninto_ListSM();
}

/* open CLIP */
static void Turninto_OpenCLIP(void)
{
    opstep  = STEP_OpenCLIP;
}

static void InitProc_OpenCLIP(void)
{
    INT16U len;

    if (!CanSendATCmd(DLC_CFG)) return;
    len = AT_CLIP(sendbuf[DLC_CFG], CLIP_ENABLE);
    SendATCmd(DLC_CFG, &AT_CLIP_PARA, sendbuf[DLC_CFG], len, InitInformer);
}

static void Informer_OpenCLIP(INT8U reason, const ATCMDACK_STRUCT *atcmdack)
{
    reason   = reason;
    atcmdack = atcmdack;
    Turninto_SetPDUMode();
    OSQPost(GsmTaskMsgQue, MSG_ATCORE_PHONEINIT, 0, 0);

   
}

static void Turninto_ListSM(void)
{
    opstep = STEP_ListSM;
}

static void InitProc_ListSM(void)
{
    INT8U len;

    if (!CanSendATCmd(DLC_SM)) return;
    len = AT_CMGL(sendbuf[DLC_SM]);
    SendATCmd(DLC_SM, &AT_CMGL_PARA, sendbuf[DLC_SM], len, InitInformer);
}

static void Informer_ListSM(INT8U reason, const ATCMDACK_STRUCT *atcmdack)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -