sms.c

来自「SIM300初始化源码,包括开机命令」· C语言 代码 · 共 2,008 行 · 第 1/5 页

C
2,008
字号
            {
            if(memcmp(&ReSmsBuf1[3], "86337898", 8)==0)
                     temp=1;        
        }

        if(temp==0)
        {//保存普通短信;
            SmsConTentdeal(ReSmsBuf1);
            for(i=0;i<BUFFMAX;i++)                    //wangyh080401 清除发送短信标志;
                MsmMsg_Send[i][0] = MSM_NULL;
            return;
        }
        
        Ascii_H = ReSmsBuf1[11];
        Ascii_L = ReSmsBuf1[12];
        TwoAscii_OneBcd();
        SeSmsTmp1 = Ascii_H;//消息类型
       
        temp = ReSmsBuf1[0] - 13;
        i=14;
        
        if(ReSmsBuf1[i]=='#')
        {
            return;
        }    
#if 0 //20080216 shinelee        
        if(SeSmsTmp1==1)//名单设置
        {  
            ReceiveSmsDeal(fWhiteRoll);
        }
        else if(SeSmsTmp1==2)//卡权限设置
        {
            ReceiveSmsDeal(fCardFeedom);
        }
        else if(SeSmsTmp1==3)//短信设置
        {
            ReceiveSmsDeal2(fSmsConTent);
        }
        else if(SeSmsTmp1==4)//预设号码
        {                    
            ReceiveSmsDeal(fPhoneNumber);
        }
        else if(SeSmsTmp1==5)//日期时间设置
        {
            UPdateTime();
        }
        else if(SeSmsTmp1==6)//网管设置
        {
            ReceiveSmsDeal(fServerNumber);
        }    
#endif        
    }
    //****************
    //-----------------------
    else
        DealComStep = 0;
}

#if 0  //air
////////////////////////////////////////////
void RegNewVer(void)
{
    uchar temp[3];

    ulMemAddr = fAppverput1;
    ucMemRWLen = 3;
    ucaMemBuf = temp;
    vI2cRead();

    if (temp[0] == '1')
    {
        ParaOneFill(fAppverput1, "0\r\n", 3);
        Lab300A_ErrCode = 0;
        Lab3008.Status = 2;

        FillREPORT_RESP();
        //开始发送
        SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
        //清相关标志
        SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
        CurSeSmsCase[0] = 0xff;
        CurSeSmsCase[1] = 0xff;
        SeSmsStep = 0;
    }
    else if (temp[0] == 'A')
    {
        Lab300A_ErrCode = 0x04;
        Lab3008.Status = 0x01;
        Lab3008.ErrCode = 0x1C;
        setREPORT_REQ(); //2号信息
    }

}
#endif

//////////////////////////////////
void vInitReSeSms(void)
{
    GprsPara.GprsUseFlg = GPRS_RESESMS;
    ucStatus = pRESESMS;
    ReSeSmsStep = 0;
    isHookOffSms = 0;
}

/////////////////////////////
void ReSeSmsPro(void) //收短信处理函数
{
            //**********************************************************
            //20070824heqbug 发送短信期间提机,提示等候
            if ((HookFlg == HOOKOFF)&&(isHookOffSms==0))
            {
                isHookOffSms=1;
                //vDispClear();
                //vDispStr(2, 3, "正退出通讯");
                //vDispStr(3, 3, "请 稍 等");
            //************* 20070913 shinelee
            //vDialInit(); //20071013heq
            return;
            //*************
            }
                //**********************************************************
            switch(ReSeSmsStep) //_@20080723,Zhangkai把if.else if.else 的改为switch.
            {
            case 0: //Step 0
                if (0==ChkReSeSmsTI)  ReSeSmsStep =3;
                break;

            case 3: //Step 3
                CheckATFree(1);        //20070901 shinelee
                ChkReSeSmsTI = 1800;    //20070824heq
                RecoAndSendSMS();        //短信底层收发
                ReSeSmsStep = 4;
                break;

            case 4: //Step 4
                if(pRESESMS == ucStatus)
                {
                    if(ON == TelorSmsChk)
                    {
                        ReSeSmsStep =0;
                        return;
                    }
                    else
                    {
                        vMainWaitInit();
                    }
                }
                StarReceiveCom(1);
                ReSeSmsStep =6;
                break;

            case 6:  //Step 6
                   ; //等调用它的程序来处理;
                break;

            default: //else Step
                ReSeSmsStep = 0;
            }
}

#if 0
//////////////////////////////////
void TerHaltPro(void)
{
    if (TerHaltStep == 0)
    {
        if (ChkReSeSmsTI == 0)
        {
            if (Upreportstep == 0)
            {
                vInitReSeSms();
                ChkReSeSmsTI = 2;
                if (GprsPara.GprsSta == INGPRS)
                {
                    SentComm(PRECOM, (uchar*)"+++", 3);

                }
                TerHaltStep = 2;
            }
        }
    }
    else if (TerHaltStep == 2)
    {
        if (ChkReSeSmsTI == 0)
            TerHaltStep = 3;
        else if (ChkReSeSmsTI > 3)
            TerHaltStep = 3;

    }
    else if (TerHaltStep == 3)
    {
        ChkReSeSmsTI = 5;
        RecoAndSendSMS(); //短信底层收发
        TerHaltStep = 4;
    }
    else if (TerHaltStep == 4)
    {
        //if (SMSTimeOut == 0)  //20070824heq
        {

            if (GprsPara.GprsSta == INGPRS)
            {
               // SentComm(WHOLECOM, (uchar*)"ATO", 3); //从AT到DATA模式

            }
            GprsPara.GprsUseFlg = GPRS_IDLE;
            ChkReSeSmsTI = 20;
            TerHaltStep = 0;
        }
    }
    else
    {
        TerHaltStep = 0;
    }
}
#endif
/*****************************************************************
函数:uchar GsmDecode7bit(uchar*pSrc, char*pDst, uchar nSrcLength)
功能:短信 7-bit解码
参数:pSrc: 源编码串指针
      pDst: 目标字符串指针
      nSrcLength: 源编码串长度
注意:
返回:目标字符串长度
设计:李雪辉
时间:20071203 shinelee
修改:
 ******************************************************************/
uchar GsmDecode7bit(uchar*pSrc, char*pDst, uchar nSrcLength)
{
    uchar nSrc;        // 源字符串的计数值
    uchar nDst;        // 目标解码串的计数值
    uchar nByte;       // 当前正在处理的组内字节的序号,范围是0-6
    unsigned char nLeft;    // 上一字节残余的数据
    
    // 计数值初始化
    nSrc = 0;
    nDst = 0;
    
    // 组内字节序号和残余数据初始化
    nByte = 0;
    nLeft = 0;
    
    // 将源数据每7个字节分为一组,解压缩成8个字节
    // 循环该处理过程,直至源数据被处理完
    // 如果分组不到7字节,也能正确处理
    while(nSrc<nSrcLength)
    {
        // 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节
        *pDst = ((*pSrc << nByte) | nLeft) & 0x7f;
        // 将该字节剩下的左边部分,作为残余数据保存起来
        nLeft = *pSrc >> (7-nByte);
    
        // 修改目标串的指针和计数值
        pDst++;
        nDst++;
    
        // 修改字节计数值
        nByte++;
    
        // 到了一组的最后一个字节
        if(nByte == 7)
        {
            // 额外得到一个目标解码字节
            *pDst = nLeft;
    
            // 修改目标串的指针和计数值
            pDst++;
            nDst++;
    
            // 组内字节序号和残余数据初始化
            nByte = 0;
            nLeft = 0;
        }
    
        // 修改源串的指针和计数值
        pSrc++;
        nSrc++;
    }
    
    *pDst = 0;
    
    // 返回目标串长度
    return nDst;
}


/*****************************************************************
函数:uchar gsmEncode7bit(uchar*pSrc, char*pDst, uchar nSrcLength)
功能:短信 7-bit编码
参数:
    pSrc: 源字符串指针
    pDst: 目标编码串指针
    nSrcLength: 源字符串长度
注意:
返回: 目标编码串长度
设计:李雪辉
时间:20071203 shinelee
修改:
 ******************************************************************/
uchar gsmEncode7bit( uchar* pSrc, uchar* pDst, uchar nSrcLength)
{
    uchar nSrc;        // 源字符串的计数值
    uchar nDst;        // 目标编码串的计数值
    uchar nChar;       // 当前正在处理的组内字符字节的序号,范围是0-7
    uchar nLeft;    // 上一字节残余的数据
    
    // 计数值初始化
    nSrc = 0;
    nDst = 0;
    
    // 将源串每8个字节分为一组,压缩成7个字节
    // 循环该处理过程,直至源串被处理完
    // 如果分组不到8字节,也能正确处理
    while(nSrc<nSrcLength)
    {
        // 取源字符串的计数值的最低3位
        nChar = nSrc & 7;
    
        // 处理源串的每个字节
        if(nChar == 0)
        {
            // 组内第一个字节,只是保存起来,待处理下一个字节时使用
            nLeft = *pSrc;
        }
        else
        {
            // 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节
            *pDst = (*pSrc << (8-nChar)) | nLeft;
    
            // 将该字节剩下的左边部分,作为残余数据保存起来
            nLeft = *pSrc >> nChar;
            // 修改目标串的指针和计数值
            pDst++;
            nDst++; 
        } 
        
        // 修改源串的指针和计数值
        pSrc++; nSrc++;
    }
    
    // 返回目标串长度
    return nDst; 
}

/*****************************************************************
函数:void SevenSmsHead(uchar* handnum)
功能:短信头
参数:七位编码短信
注意:
返回:
设计:李雪辉
时间:20071203 shinelee
修改:
 ******************************************************************/
void SevenSmsHead(uchar *number)
{
        TpduHeadLen = 0;
        memset(TpduHead, '\0', sizeof(TpduHead));
    //memcpy(TpduHead, "0891683108707505F0040D91",24);

        memcpy(TpduHead, (uchar*)cTelhead1, 6); //头6位
        TpduHeadLen = TpduHeadLen + 6;

        memcpy(TpduHead + TpduHeadLen, "0D", 2); //长度2位
        TpduHeadLen = TpduHeadLen + 2;

        memcpy(TpduHead + TpduHeadLen, "80", 2); //电话头部2位
        TpduHeadLen = TpduHeadLen + 2;

        memcpy(TpduHead + TpduHeadLen, number, 14); //电话
        TpduHeadLen = TpduHeadLen + 14;

        //memcpy(TpduHead + TpduHeadLen, cTelend, 6); //头6位 八位编码
        if(CodeType!=0)
            memcpy(TpduHead + TpduHeadLen, "000470", 6); //头6位  八位编码
        else
        memcpy(TpduHead + TpduHeadLen, "000070", 6); //头6位  七位编码
        TpduHeadLen = TpduHeadLen + 6;    
}

/*****************************************************************
函数:void HandSmsSend(uchar *content ,uchar *number)
功能:手机短信发送
参数:content内容  number目标号码
注意:
返回:
设计:李雪辉
时间:20071203 shinelee
修改:
 ******************************************************************/
void HandSmsSend(uchar *content ,uchar *number)
{
        uint len;
    uchar i,j;//,checks;
    uchar ebuf[140];
    
    memset(SeSmsBuf1, '\0', sizeof(SeSmsBuf1));
        SeSmsBuf1In = 0;
        SeSmsBuf1[SeSmsBuf1In++] = 0; //定位,后

⌨️ 快捷键说明

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