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

📄 sms.c

📁 SIM300初始化源码,包括开机命令
💻 C
📖 第 1 页 / 共 5 页
字号:
    //------------------------------
    else if (SeSmsStep == 1)
    {
        //判别是否适合发送
        SeSmsStep = 10;
    }
    //----------------------------
    else if (SeSmsStep == 10)
    {
        //开始填充数
        if (CurSeSmsCase[1] == REGISTER_REQ)
        {
            //0x01//    终端/底座注册请求
            //FillREGISTER_REQ(); //
            //开始发送
            //SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
            //清相关标志
            SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
            CurSeSmsCase[0] = 0xff;
            CurSeSmsCase[1] = 0xff;
            SeSmsStep = 0;
            //********************************
            //20070824heq
            if (ucStatus != pRESESMS) ChkReSeSmsTI=60; 
            return;
            //*********************************
        }
        else if (CurSeSmsCase[1] == REPORT_REQ)
        {
            //02信息上报, 此命令平台不用应答
            //FillREPORT_RESP();
            //开始发送
            //SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
            //清相关标志
            SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
            CurSeSmsCase[0] = 0xff;
            CurSeSmsCase[1] = 0xff;
            SeSmsStep = 0;
        }
        else if (CurSeSmsCase[1] == CONFIG_GET_REQ)
        {
            //  0x03//    终端/底座配置参数请求
            //FillCONFIG_GET_REQ();
            //开始发送
            //SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
            //清相关标志
            SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
            CurSeSmsCase[0] = 0xff;
            CurSeSmsCase[1] = 0xff;
            SeSmsStep = 0;
        }
        else if (CurSeSmsCase[1] == HEARTBEAT_REQ)
        {
            //        0x09//心跳包
            //FillHEARTBEAT_REQ();
            //开始发送
            //SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
            //清相关标志
            SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
            CurSeSmsCase[0] = 0xff;
            CurSeSmsCase[1] = 0xff;
            SeSmsStep = 0;
        }
        if (ucStatus != pRESESMS)
            ChkReSeSmsTI = 30; //20070824heq
        //若不在短信收发状态,30秒钟以后切换20070811heq    

    }
    //------------------
    else
        SeSmsStep = 0;
}

////////////////////////////////////////////
uchar GetSmsToReSmsBuf1(void)
{
    //将短信整合到ReSmsBuf1中;
    uchar i;//, j;
    //uchar ii[6]; //存流水号和总帧数和当前帧数
    //uchar Flg;
    SmsBuffi =0;
    memset(ReSmsBuf1, 0x0, cReSmsBufLen);
    for (i = 0; i < BUFFMAX; i++)
    {
       // Flg = 0;
//        memset(ReSmsBuf1, 0x0, cReSmsBufLen);
        ReSmsBuf1In = 0;
        ReSmsBuf1Out = 0;
        //******************* 20071203 shinelee 
        if(SmsCodeType[i]==0)
        {
           //SmsCodeType[i]=0xff;
           if(GsmDecode7bit(&MsmMsg_Reco[i][2], (char*)&ReSmsBuf1[1+i*140], MsmMsg_Reco[i][1]))
           {
                   ReSmsBuf1[i*140] = MsmMsg_Reco[i][1];
                   memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);               
            SmsBuffi = i+1;
            if((SmsCodeType[i+1]==0)||(SmsCodeType[i+1]==8)||(SmsCodeType[i+1]==4))
                continue;
            else
                return 2;    
               }   
        else
        {   
                   SmsCodeType[i]=0xff;
                   memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);               
               if((SmsCodeType[i+1]==0)||(SmsCodeType[i+1]==8)||(SmsCodeType[i+1]==4))
                continue;
            else
                       return 0;    
           }   
        }
    else if(SmsCodeType[i]==8)
    {
                //SmsCodeType[i]=0xff;
                memcpy(&ReSmsBuf1[1+i*140],&MsmMsg_Reco[i][2],MsmMsg_Reco[i][1]);
        ReSmsBuf1[i*140] = MsmMsg_Reco[i][1];
        UnicodeToGBK(&ReSmsBuf1[1+i*140],ReSmsBuf1[i*140]);
                memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);               
        SmsBuffi = i+1;
        if((SmsCodeType[i+1]==0)||(SmsCodeType[i+1]==8)||(SmsCodeType[i+1]==4))
            continue;
        else
            return 2;    
    }
//----------------------------- 20080221 shinelee
        else if(SmsCodeType[i]==4)
        {
                memcpy(&ReSmsBuf1[1+i*140],&MsmMsg_Reco[i][2],MsmMsg_Reco[i][1]);
        ReSmsBuf1[i*140] = MsmMsg_Reco[i][1];        
                memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);               
        SmsBuffi = i+1;
        if((SmsCodeType[i+1]==0)||(SmsCodeType[i+1]==8)||(SmsCodeType[i+1]==4))
            continue;
        else
            return 2;    
        }
//-----------------------------
        else //if(SmsCodeType[i]!=4)//非法短信
        {
                    SmsCodeType[i]=0xff;
                    memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);               
            SmsBuffi = i+1;
            if((i+1)<BUFFMAX)
                continue;
            else
                return 0;    
        }
        //******************* 
        #if 0
        if((MsmMsg_Reco[i][0] != MSM_NULL) && ((MsmMsg_Reco[i][2] ==0) || (MsmMsg_Reco[i][5] == 0)))
        {
            MsmMsg_Reco[i][0] = MSM_NULL;
        }

        if (MsmMsg_Reco[i][0] != MSM_NULL)
        //第一个字节是状态,
        {
            //本条有短信

            //判断消息是否有误
            if (MsmMsg_Reco[i][3] == 0)
            {
                //判断消息是否有误
                MsmMsg_Reco[i][0] = MSM_NULL; //改标志
                continue;
            }

            //有些消息没有总幀数和当前幀数
            if (GetNextDALocat(ReSmsBuf1, 0, 20) < 9)
            {
                //此消息没有总幀数和当前幀数
                memcpy(ReSmsBuf1, (uchar*) &MsmMsg_Reco[i][2], MsmMsg_Reco[i][1]); 
                    //烤内容
                ReSmsBuf1In = MsmMsg_Reco[i][1]; //长度
                MsmMsg_Reco[i][0] = MSM_NULL; //改标志
                //去掉消息头
                for (iSeSmsTmp1 = 8; iSeSmsTmp1 < cReSmsBufLen; iSeSmsTmp1++)
                    ReSmsBuf1[iSeSmsTmp1 - 8] = ReSmsBuf1[iSeSmsTmp1];
                memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);//20071101 shinelee               
                return 1; //短信包整合完成
            }

            //先查看总帧数和当前帧数
            if (MsmMsg_Reco[i][8] == '1')
            //总包数为1没有后继包了.
            {
                memcpy(ReSmsBuf1, (uchar*) &MsmMsg_Reco[i][2], MsmMsg_Reco[i][1]); 
                    //烤内容
                memcpy(smsnumber,ReSmsBuf1,4);//流水号 20071108 shinelee
                ReSmsBuf1In = MsmMsg_Reco[i][1]; //长度
                MsmMsg_Reco[i][0] = MSM_NULL; //改标志
                //去掉消息头
                for (iSeSmsTmp1 = 10; iSeSmsTmp1 < cReSmsBufLen; iSeSmsTmp1++)
                    ReSmsBuf1[iSeSmsTmp1 - 10] = ReSmsBuf1[iSeSmsTmp1];
                memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);//20071101 shinelee               
                return 1; //短信包整合完成
            }
            else
            {
                //本条有后继包,则先查出第一个包
                if (MsmMsg_Reco[i][9] == '1')
                {
                    //存第一个包的存流水号和总帧数
                    ii[0] = MsmMsg_Reco[i][2]; //存流水号
                    ii[1] = MsmMsg_Reco[i][3];
                    ii[2] = MsmMsg_Reco[i][4];
                    ii[3] = MsmMsg_Reco[i][5];
                    memcpy(smsnumber,ii,4);//流水号 20071108 shinelee

                    ii[4] = MsmMsg_Reco[i][8]; //总帧数
                    ii[5] = MsmMsg_Reco[i][9] + 1; //下一帧的包号
                    Flg = 1; //要查后继包

                    memcpy(ReSmsBuf1, (uchar*) &MsmMsg_Reco[i][2], MsmMsg_Reco[i][1]); 
                        //烤内容
                    ReSmsBuf1In = MsmMsg_Reco[i][1]; //长度
                    MsmMsg_Reco[i][0] = MSM_TIMESAVE; //改标志为暂存标志

                }
            }
        }

        if (Flg == 1)
        {
            //以指定的流水号查后继包

            for (j = 0; j < BUFFMAX; j++)
            {
                //查后继包

                if (MsmMsg_Reco[j][0] != MSM_NULL)
                //第一个字节是状态,
                {
                    //本条有短信
                    //先对比流水号
                    if (memcmp(ReSmsBuf1, (uchar*) &MsmMsg_Reco[j][2], 4) == 0)
                    //流水号一致
                    {
                        if (MsmMsg_Reco[j][9] == ii[5])
                        //是不是所要的包号
                        {
                            //是所要包号
                            ii[5] = MsmMsg_Reco[j][9] + 1; //下一帧的包号

                            //memcpy(ReSmsBuf1,(uchar *)&MsmMsg_Reco[j][2],MsmMsg_Reco[j][1]);  //内容
                            memcpy(ReSmsBuf1 + ReSmsBuf1In, (uchar*) &MsmMsg_Reco[j][12],
                                MsmMsg_Reco[j][1] - 10); //内容

                            ReSmsBuf1In += (MsmMsg_Reco[j][1] - 10); //长度

                            MsmMsg_Reco[j][0] = MSM_TIMESAVE; //改标志为暂存标志

                            /* if(MsmMsg_Reco[j][9]>ReSmsBuf1[7])
                            {   //已经接收完所有的包.
                            //将暂存标志改为空
                            for(j=0;j<BUFFMAX;j++)
                            {   
                            if(MsmMsg_Reco[j][0]==MSM_TIMESAVE)
                            MsmMsg_Reco[j][0]=MSM_NULL;
                            }
                            //去掉消息头
                            for(iSeSmsTmp1=10;iSeSmsTmp1<cReSmsBufLen;iSeSmsTmp1++)
                            ReSmsBuf1[iSeSmsTmp1-10]=ReSmsBuf1[iSeSmsTmp1];
                            return 1;//短信包整合完成
                            }*/

                            if (MsmMsg_Reco[j][9] >= MsmMsg_Reco[j][8])
                            {
                                //已经接收完所有的包.
                                //将暂存标志改为空
                                for (j = 0; j < BUFFMAX; j++)
                                {
                                    if (MsmMsg_Reco[j][0] == MSM_TIMESAVE)
                                    {//20071109 shinelee
                                        MsmMsg_Reco[j][0] = MSM_NULL;
                                         memset(MsmMsg_Reco[j], 0x0, MSGMAXLEN);//20071109 shinelee
                                    }//20071109 shinelee
                                }
                                //去掉消息头
                                for (iSeSmsTmp1 = 10; iSeSmsTmp1 < cReSmsBufLen;
                                    iSeSmsTmp1++)
                                    ReSmsBuf1[iSeSmsTmp1 - 10] = ReSmsBuf1[iSeSmsTmp1];
                                 //memset(MsmMsg_Reco[j], 0x0, MSGMAXLEN);//20071109 shinelee               
                               return 1; //短信包整合完成
                            }

                            //再从头开始查  下一包
                            j = 0;
                        }
                        //不是所要的包号则下一条。
                    }
                }
            } //流水号不一致,则下一条
        }
        #endif
    }
    return 0;
}

//////////////////////////////////////////
void ReSmsPro(void)
{
        uchar i,temp;//,checksum;//20071203 shinelee
       // uchar content[5];//20071203 shinelee    

        if(DealComStep == 0)//读缓冲区消息
        {
            temp = GetSmsToReSmsBuf1();
        if (temp == 1)
            {
                    //DealComStep = 10;
            }
        else if(temp==2)
        {
                    DealComStep = 11;
        }
        }
        //-----------------------------
        if (DealComStep == 10)
        {//处理消息
        Ascii_H = ReSmsBuf1[0];
        Ascii_L = ReSmsBuf1[1];
        TwoAscii_OneBcd();
        SeSmsTmp1 = Ascii_H;

        if (SeSmsTmp1 == REGISTER_RESP)
        {
            DealComStep = 0;
        }
        else if (SeSmsTmp1 == CONFIG_GET_RESP)
        {
            DealComStep = 0;
        }
        else if (SeSmsTmp1 == UPDATE_NOTIFY_REQ)
        {
            //#define UPDATE_NOTIFY_REQ    0x04//    监控平台下发下载/升级通知请求
            //#define UPDATE_NOTIFY_RESP    0x84//    终端对于下载/升级通知的应答
            sequence=1;//20071108 shinelee
            SeSmsTmp1 = GetUPDATE_NOTIFY_REQ();
            FillUPDATE_NOTIFY_RESP(SeSmsTmp1);
            sequence=0;//20071108 shinelee
            //SendPduSms1(SeSmsBuf1, SeSmsBuf1In); 20080319
            DealComStep = 0;

            if (UpDataNo == 0xFA)
            {//GPRS软件下载
                UpdateStandBy();
                SentComm(PRECOM, "+++", strlen("+++"));
                StarReceiveCom(2);
                CheckATFree(1);
                //=============================================
                //20080714xiehb
                #ifdef SIM300  //断开GPRS连接
                    GprsToAt(0);
                #else
                  SentComm(WHOLECOM, "ATH", strlen("ATH"));
                    StarReceiveCom(2);
                    CheckATFree(1);
                #endif
                //============================================
                UpdateStart = 1; ////1= 升级开始0=升级结束
                ulMemAddr = fUpdateStart;
                ucMemRWLen = 1;
                ucaMemBuf = (uchar*) &UpdateStart;
                vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen                        
            }
        }
        else if (SeSmsTmp1 == CONFIG_SET_REQ)
        {
            DealComStep = 0;
        }
        else if (SeSmsTmp1 == CONFIG_QUERY_REQ)
        {
                DealComStep = 0;
        }
        else if (SeSmsTmp1 == STATUS_QUERY_REQ)
        {
            DealComStep = 0;
        }
        else if (SeSmsTmp1 == REMOTE_CONTROL_REQ)
        {
            DealComStep = 0;
        }
        else if (SeSmsTmp1 == REPORT_Car_REQ)
        {
            DealComStep = 0;
        }
        else if (SeSmsTmp1 == CONFIG_NOTIFY_REQ)
        {
            DealComStep = 0;
        }

    }
    //------------------------
    //****************** 20071203 shinelee
    else if(DealComStep == 11)
    {
            DealComStep = 0;
            temp=0;
            if( ((ReSmsBuf1[1]=='T')||(ReSmsBuf1[1]=='t'))
              &&((ReSmsBuf1[2]=='P')||(ReSmsBuf1[2]=='p')))

⌨️ 快捷键说明

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