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

📄 sms.c

📁 SIM300初始化源码,包括开机命令
💻 C
📖 第 1 页 / 共 5 页
字号:
            if(NoLen<=18)
                memcpy(MoveNumber[j],&tempbuff[24],NoLen);
            else
                memcpy(MoveNumber[j],&tempbuff[24],18);            //wangyh080226只取前18位;
                    //*************

                    Ascii_H = 0x00;
                    Ascii_H = tempbuff[k];
                    Ascii_L = tempbuff[k + 1];
                    TwoAscii_OneBcd();
                    k = k + Ascii_H + 2+(Ascii_H % 2) + 4+16;

                    Ascii_H = 0x00;
                    Ascii_H = tempbuff[k];
                    Ascii_L = tempbuff[k + 1];
                    TwoAscii_OneBcd();
                    k = k + 2;

                    MsmMsg_Reco[j][0] = MSM_NEWMSG; //发PDU码
                    MsmMsg_Reco[j][1] = Ascii_H;

                    if (userdatahead == 0xFF)
                    {
                        Ascii_H = 0x00;
                        Ascii_H = tempbuff[k];
                        Ascii_L = tempbuff[k + 1];
                        TwoAscii_OneBcd();
                        userdatahead = Ascii_H + 1;
                        templen = userdatahead * 2;
                    }
                    else
                    {
                        userdatahead = 0;
                        templen = 0;
                    }

                    for (; templen <= (MsmMsg_Reco[j][1] *2); templen = templen + 2)
                    {
                        Ascii_H = 0x00;
                        Ascii_H = tempbuff[k + templen];
                        Ascii_L = tempbuff[k + templen + 1];
                        TwoAscii_OneBcd();
                        MsmMsg_Reco[j][2+sizelen] = Ascii_H;
                        sizelen++;
                    }

                    MsmMsg_Reco[j][1] = MsmMsg_Reco[j][1] - userdatahead;
                    sizelen = 0;

            //wangyh080326取时间出来;
            for(iTemp=0;iTemp<12;)
            {//把时间调换一下位置;
                aTemp =tempbuff[28+NoLen+iTemp+1];    
                tempbuff[iTemp] =aTemp;
                aTemp =tempbuff[28+NoLen+iTemp];
                tempbuff[iTemp+1] =aTemp;
                iTemp += 2;
            }
            vAsciiToBcdBuf((uchar *)&MsgSmsTime[j], tempbuff, 12);
                }
            }
        }
    }
    return ;
}

//*********************** 20070908 shinelee
void matterhead(uchar sum, uchar serial,uchar add)
{
    //内容部份的消息头

    //用户数据长度
    SeSmsBuf1In = 0;
    SeSmsBuf1[SeSmsBuf1In++] = 0; //定位,后面计算长度
    SeSmsBuf1[SeSmsBuf1In++] = 0;

    //流水号
    //*************//20071108 shinelee 
    if(sequence==1)
    {
        //SeSmsBuf1[SeSmsBuf1In++] = smsnumber[0];//20080319
        //SeSmsBuf1[SeSmsBuf1In++] = smsnumber[1];
        //SeSmsBuf1[SeSmsBuf1In++] = smsnumber[2];
        //SeSmsBuf1[SeSmsBuf1In++] = smsnumber[3];
    }
    else
    {
            //*************
        OneHL_TwoAscii(SeSmsSeq >> 8);
        SeSmsBuf1[SeSmsBuf1In++] = Ascii_H;
        SeSmsBuf1[SeSmsBuf1In++] = Ascii_L;
        OneHL_TwoAscii(SeSmsSeq);
        SeSmsBuf1[SeSmsBuf1In++] = Ascii_H;
        SeSmsBuf1[SeSmsBuf1In++] = Ascii_L;
        if(add==1)  SeSmsSeq++;
    }//20071108 shinelee

        //总帧数]
        SeSmsBuf1[SeSmsBuf1In++] = sum;

        //当前帧号
        SeSmsBuf1[SeSmsBuf1In++] = serial;
        SeSmsBuf1[SeSmsBuf1In++] = 0x0D;
        SeSmsBuf1[SeSmsBuf1In++] = 0x0A;
}

//*********************** 20070908 shinelee
#if 0//air
void SetRegisterState(uchar state)
{
    uchar aTmp[2];

    if(state)
    {
        //设置终端已经注册子
        ParaOneFill(fTerRegFlg1, "OK\r\n", 4);  //air
    }
    else
    {
        //设置终端没注册
        aTmp[0] = 0xff;
        aTmp[1] = 0xff;
        ulMemAddr = fTerRegFlg1;
        ucMemRWLen = 2;
        ucaMemBuf = aTmp;
        vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen
        SeSmsCaseBuf[REGISTER_REQ_0] = REGISTER_REQ_0; //没注册
        if (IfRegistFlg == HAVEREGIST)
        {
            bFlashTime = 1;
            IfRegistFlg = NOTREGIST;
        }
    }    
    //*************** 20070913 shinelee
    aTmp[0] = 'F';
    aTmp[1] = 'F';
    ulMemAddr = fRegistrCase1;
    ucMemRWLen = 2;
    ucaMemBuf = aTmp;
    vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen
    //*************** 
}
////////////////////////////
void ChkRegister(void)
{
    //检查是否已经与监控平台注册了
    uchar aTmp[4];
    ulMemAddr = fTerRegFlg1;
    ucMemRWLen = 4;
    ucaMemBuf = aTmp;
    vI2cRead(); //ulMemAddr, ucaMemBuf, ucMemRWLen

    if ((aTmp[0] != 'O') || (aTmp[1] != 'K'))
    {
        SeSmsCaseBuf[REGISTER_REQ_0] = REGISTER_REQ_0; //没注册
        if (IfRegistFlg == HAVEREGIST)
        {
            bFlashTime = 1;
            IfRegistFlg = NOTREGIST;
        }
    }
    else
    {
        if (IfRegistFlg != HAVEREGIST)
        {
            IfRegistFlg = HAVEREGIST;
            bFlashTime = 1;
        }
    }

    Regstertime = cRegstertime;
}
#endif

//*************************** 20070913 shinelee
//写入四个字符到SeSmsBuf1。
void Load_SeSmsBuf1_Four(uchar v1,  uchar v2)
{
    SeSmsBuf1[SeSmsBuf1In++] = v1;
    SeSmsBuf1[SeSmsBuf1In++] = v2;
    SeSmsBuf1[SeSmsBuf1In++] = 0x0D;
    SeSmsBuf1[SeSmsBuf1In++] = 0x0A;
}

//从flash中读出,写入SeSmsBuf1
void Flash_to_SeSmsBuf1(ulong add, uchar len)
{
    SeSmsTmp1 = FillOnePara((uchar*) &SeSmsBuf1[SeSmsBuf1In], add, len);
    if (SeSmsTmp1 != 0xFF)
        SeSmsBuf1In += SeSmsTmp1;

    SeSmsBuf1[SeSmsBuf1In++] = 0x0D;
    SeSmsBuf1[SeSmsBuf1In++] = 0x0A;
}

//从flash中读出,写入SeSmsBuf1
void Flash2_to_SeSmsBuf1(uchar *p, uchar plen, ulong add, uchar len)
{
        memcpy((uchar*) &SeSmsBuf1[SeSmsBuf1In], p, plen);
        SeSmsBuf1In += plen;
    Flash_to_SeSmsBuf1(add,len);
}

//往SeSmsBuf1填写内容
void Str_to_SeSmsBuf1(uchar *p, uchar len)
{
        memcpy((uchar*) &SeSmsBuf1[SeSmsBuf1In], p, len);
        SeSmsBuf1In += len;
        SeSmsBuf1[SeSmsBuf1In++] = 0x0D;
        SeSmsBuf1[SeSmsBuf1In++] = 0x0A;
}

//往SeSmsBuf1填写内容
void Str2_to_SeSmsBuf1(uchar *p1, uchar len1,uchar *p2, uchar len2)
{
        memcpy((uchar*) &SeSmsBuf1[SeSmsBuf1In], p1, len1);
        SeSmsBuf1In += len1;
    Str_to_SeSmsBuf1(p2,len2);
}
///////////////////////////////////
void setREPORT_REQ(void)
{   //暂时注消    20080116 shinelee
    //SeSmsCaseBuf[REPORT_REQ_0] = REPORT_REQ_0;
}

//////////////////////////////////////////////
void ResetSeSmsBuf(void)
{
        memset(SeSmsCaseBuf, NOSMSFORSE, cSeSmsBufLen);
}

//////////////////////////////////////////////
uchar IfNeedSeSms(void)
{
        uchar i;
        for (i = 0; i < cSeSmsBufLen; i++)
        {
            if (SeSmsCaseBuf[i] == i)
                    return SeSmsCaseBuf[i];
        }
        return NOSMSFORSE;
}

//20070816hequpdate  整个函数需要替换
//04号命令监控平台下发下载/升级通知请求,现从包中取相相应数
uchar GetUPDATE_NOTIFY_REQ(void)
{
    //对比序列号
    uint Locat;
    //uint Location; //暂时注释 20070826heq
    uint temp;
    uchar revalue, i;
    uchar appid[5], appid2[5];
    //********************************************************
    //********************************************************
    //取出各参数
    //取出APPID,
    Locat = GetNextDHLocat((uchar*) &ReSmsBuf1[0], 0, 50);
    Locat++; //越过逗号

    //**************************************************************
    //对比地区号   20070826heq
    if(memcmp((uchar *)&ReSmsBuf1[Locat+4], (uchar *)&SOFTVERSTR[3], 2)==1)
    {
            UpDataNo = 0x00;
        return 0x24;//地区号不对,数据无效。
    }
    //*************************************************************

    //取出APPVER
    //对比版本号
    //***********************************************************
    //20070826heq
    if(memcmp((uchar *)&ReSmsBuf1[Locat], (uchar *)&SOFTVERSTR[0], 3)==0 )
    //************************************************************    
    {
        UpDataNo = 0x00;
        return 0x22; //已经是最新版本了
    }

    appid[0] = ReSmsBuf1[Locat];
    appid[1] = ReSmsBuf1[Locat + 1];
    appid[2] = ReSmsBuf1[Locat + 2];
    appid[3] = '\r';
    appid[4] = '\n';

    temp = GetNextDHLocat((uchar*) &ReSmsBuf1[Locat], Locat, 50);
    Locat = temp + Locat;
    Locat++; //越过逗号

    //取出URL
    ulMemAddr = fUrl1; //fSysUPIp1;
    ucMemRWLen = 100;
    ucaMemBuf = (uchar*) &ReSmsBuf1[Locat];
    vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen

    revalue = Get_FLash_host();
    if (revalue)
    {
        for (i = 0; i < 32; i++)
        {
            if (IpAndPortBuf[i] == 0)
                break;
        }
        IpAndPortBuf[i++] = 0x0D;
        IpAndPortBuf[i++] = 0x0A;

        ulMemAddr = fSysUPIp1;
        ucMemRWLen = i;
        ucaMemBuf = IpAndPortBuf;
        vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen
    }
    else
    {
        return 0x24; //无效数据内容
    }

    FillOnePara(appid2, fAppIdver1, 5);
    if (memcmp((uchar*)appid, (uchar*)appid2, 3))
    //Flash的版本号不同
    {
        ClrFileDegred(); //初始化下载文件
    }
    ParaOneFill(fAppIdver1, appid, 5);

    UpDataNo = 0xFA;
    return 0x20; //操作成功
}

/////////////////////////////////////////////////
void FillUPDATE_NOTIFY_RESP(uchar Result)
{
        //终端对监控平台下发下载/升级通知请求的应答
        //BasMsmHead();  20080319
        memset(SeSmsBuf1, '\0', sizeof(SeSmsBuf1));

        // matterhead(); //20070908 shinelee
        matterhead('1','1',1);  //20070908 shinelee

        // 命令字节
        //*************************** 20070913 shinelee
        Load_SeSmsBuf1_Four('8','4');

        //****************************
        //响应结果码
        OneHL_TwoAscii(Result);
        //*************************** 20070913 shinelee
        Load_SeSmsBuf1_Four(Ascii_H,Ascii_L);

        //****************************
        //用户数据长度
        //OneHL_TwoAscii(SeSmsBuf1In-2+12 );
        OneHL_TwoAscii(SeSmsBuf1In - 2);
        SeSmsBuf1[0] = Ascii_H;
        SeSmsBuf1[1] = Ascii_L;
}

#if 0//air
///////////////////////////////////
uchar TerSeqCmp(uchar *p)
{
    //对比序列号
    uchar aTmp[16];

    ulMemAddr = fTerSeq1;
    ucMemRWLen = 16;
    ucaMemBuf = aTmp;
    vI2cRead(); //ulMemAddr, ucaMemBuf, ucMemRWLen

    if (memcmp(aTmp, p, 16) == 0)
        return 1;
    else
        return 0;

}
#endif

/////////////////////////////////////////////
void RecoAndSendSMS(void)
{
        RecSmsMsg(); //收短信并解码
    if(aFlagTemp != 0)
    {
            ReSmsPro(); //处理收到的短信    存储并清除SIM卡中相同内容短信
    }
}

/////////////////////////////////////////////////////////////////////
void SeSmsPro(void)//短信主动发送
{
    if (SeSmsStep == 0)
    {
        SeSmsTmp1 = IfNeedSeSms();
        if (SeSmsTmp1 != NOSMSFORSE)
        {
            CurSeSmsCase[0] = SeSmsTmp1;
            CurSeSmsCase[1] = cSmsComInBuf[SeSmsTmp1];
            CurSeSmsCase[2] = 3;
            CurSeSmsCase[3] = 0xff;
            SeSmsStep = 1;
        }
    }

⌨️ 快捷键说明

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