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

📄 testgprs.c

📁 uccos2的的源码文件
💻 C
字号:
#include "test.h"
#include "control.h"

/*
$GPGGA,121252.000,3937.3032,N,11611.6046,E,1,05,2.0,45.9,M,-5.7,M,,0000*77
*/

char g_str[1024*8];
int WaitTimeout = 500;
char phone_number[20] = "10086";
char msg_content[200] = "短信内容:Test Message!";
char gi_gpsmode = 0;

#ifdef INCLUDE_UART1_INTTERUPT

#undef pISR_UART1
#define pISR_UART1  VICVectAddr[23]

volatile int gi_RecvdLen = 0;
volatile  unsigned int lastrecvdtime = 0;

void ISR_Uart1(void)
{
    ClearSubPending(0xff);
    ClearPending(BIT_UART1);
    if( (rUTRSTAT1 & 0x1) )
    {
        if( gi_RecvdLen < sizeof(g_str))
        {
            g_str[gi_RecvdLen] = rURXH1;
            gi_RecvdLen++;
            g_str[gi_RecvdLen] = 0;
            lastrecvdtime = RunTimeMs;
        }
    }
}

void Uart1Set(int v)
{
    if( v & 0x01)
    {
        pISR_UART1 = (unsigned int)ISR_Uart1;
        rINTMSK &= ~ BIT_UART1;
        rINTSUBMSK &= ~ BIT_SUB_RXD1;
    }
    else
    {
        pISR_UART1 = 0;
        rINTMSK |=  BIT_UART1;
        rINTSUBMSK |= ~ BIT_SUB_RXD1;
    }


    if (  v & 0x02 )
    {
        Uart1SetBaudrate(4800);
    }
    else
    {
        Uart1SetBaudrate(9600);
    }
}
#endif

void ShowPhoneMsg(void)
{
    ResetTextOut();
    TextOut(2,SH-90,phone_number);
    TextOut(2,SH-70,msg_content);
}
int test_gprscmd(int v)
{
    char* cmd = NULL;

    if( v != 202 )
        ShowPhoneMsg();
    ClearText();
    WaitTimeout = 600;
    themsgcount = 0;
    switch(v)
    {
        case 1: cmd = "AT+CMGL=4\r\n";
                WaitTimeout = 2000;
                break;
        case 100:
            GprsSendMessage(phone_number,msg_content);
            break;
        case 101:
            sprintf(g_str,"ATD%s;\r\n",phone_number);
            cmd = g_str;
            break;
        case 200: // 拨号
                InputStr("请输入电话号码:",phone_number);
                if( gi_InputLen > 0 )
                {
                    strcpy(phone_number,gstr_Input);
                    ClearInput();
                    ShowPhoneMsg();
                }
                return MENU_RETAIN;
            break;
        case 201:
            InputStr("请输入短信内容:",msg_content);
            if( gi_InputLen > 0 )
            {
                strcpy(msg_content,gstr_Input);
                ClearInput();
                ShowPhoneMsg();
            }
            return MENU_RETAIN;
            break;
        case 202:
            if( gi_gpsmode == 0 )
            {
                gi_gpsmode = 1;
                TextOut(0,0,"已进入GPS模式");
                Uart1Set(3);
            }
            else
            {
                gi_gpsmode = 0;
                TextOut(0,0,"已退出GPS模式");
                Uart1Set(1);
            }
            break;
        case -1:
             gi_gpsmode = 0;
#ifdef INCLUDE_UART1_INTTERUPT
            Uart1Set(0);
#endif
            return MENU_EXIT;
    }



    if( cmd )
    {
        SendGprsCmd(cmd,g_str,sizeof(g_str)-1,WaitTimeout);
        //debugstr(cmd,0);
    }
    SetMenuReShow(0);
    return MENU_RETAIN;
}

Menu gstr_GprsMenu[] =
{
{"读取短信",1,test_gprscmd},
{"发送短信",100,test_gprscmd},
{"拨打电话",101,test_gprscmd},
{"设置电话号码",200,test_gprscmd},
{"设置短信内容",201,test_gprscmd},
{"GPS模式",202,test_gprscmd},
{"Exit",-1,test_gprscmd},
{0,0,0}
};

void GPSCheck(void)
{
    int i,j;
    i = gi_RecvdLen;

    if( strstr(g_str,"\r") != 0 && i > 20 )
    {
        AppendText(g_str);
        j = GetGPSViewString(g_str,i);
        if( j > 0 )
        {
            TextOut(0,100,g_str);
        }
    }
    else if ( i < 200 )
    {
        return;
    }

    gi_RecvdLen = 0;
    memset(g_str,0,sizeof(g_str));
}

#ifdef INCLUDE_UART1_INTTERUPT
void RecvResponse(int timeout)
{
    int i,j;
    i = gi_RecvdLen;
    if (  (gi_RecvdLen > 0 && ( RunTimeMs-lastrecvdtime) > 800) )
    {
            if( strstr(g_str,"+CMGL:") == 0 )
            {
                AppendText(g_str);
            }
            else
            {
                ListMessage(g_str);
            }
            gi_RecvdLen = 0;
            memset(g_str,0,sizeof(g_str));
    }
    else if ( gi_RecvdLen > 0 )
    {
        sprintf((char*)buf,"received %d bytes",gi_RecvdLen);
        StatusMessage((char*)buf);
    }
}
#else
void RecvResponse(int timeout)
{
    int i;
    i = receivefromcom(0,g_str,sizeof(g_str)-1,timeout);
    if( i > 0 )
    {
        //debugstr(g_str,0);
        i = GetGPSViewString(g_str,i);
        if( i > 0 )
        {
            ClearText();
            AppendText(g_str);
        }
        else
        {
            if( ListMessage(g_str) <= 0 )
            {
                AppendText(g_str);
            }
        }
    }
}

#endif


#ifndef INCLUDE_UART1_INTTERUPT
int Lasttimeout = 100;
#endif
int test_gprs_idle(int v)
{
#ifndef INCLUDE_UART1_INTTERUPT
    Lasttimeout = 100;
#endif
    if( gi_gpsmode == 0)
        RecvResponse(100);
    else
        GPSCheck();
    SetScrollBox(2);
    ScrollShow(v);
    SetScrollBox(0);
    return 0;
}

int test_gprs(int v)
{
    return MENU_RETAIN;
}

⌨️ 快捷键说明

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