📄 testgprs.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 + -