📄 cgtm900.cpp
字号:
if(!b_ackOK) check_OK();
if(b_ackOK) break;
//clr_at_rxbuf(); //清除接收at信息
}
}
//if(!b_ackOK) goto reStart;??????????????
///////////////////////////////////
for(i=0;i<3;i++)
{
write_at_cgd();
write_at_etcp();//初始化ETCP,正常返回OK, 防止网络意外关闭,所以多加了一次初始化
//SaveLocal_IP();
clr_at_rxbuf();
connect_IP();//连接服务器
//clr_at_rxbuf(); //清除接收at信息
for(j=0;j<60;j++)
{
if(rec_count>6) break;
wait_for_ack(25); //等待回复帧20-30秒可以返回
}
if(rec_count)
{
check_connect();
if(b_ackOK)
{
GOnNetFg=TRUE;
GOnHomeFg=FALSE;
break;
}
//clr_at_rxbuf(); //清除接收at信息
}
}
}
ack_msgOE();
SaveSemIP();
if(b_ackOK)
{
i=0;
do//
{
write_at_iomode();//设置用户数据接口,正常返回OK
if(rec_count==0)
return FALSE;
if(!b_ackOK) {i++;}
}//
while((!b_ackOK)&&i<5);//
}
return 0;
}*/
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: power_on(void) //开机
// 功能描述: 开机
// 输 入:
//
// 输 出:
//
// 全局变量: 无
// 调用模块:
// 调用类:
//注意事项:开机后延时时间要考虑一下,延时20秒
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void CGtm900::power_on(void) //开机
{ INT8U i;
// do
// {
// op_time=0x0;//清重复操作次数
//INT8U const at_cmd_mso[]={"AT%MSO"}; //关机,无返回
//INT8U *const tab_sp;
CGPIOOUT PWON(GPRS_GPON );
//tab_sp=at_cmd_mso;
//write_at_cmd(); //发送AT
//write_at_crlf(); //发送<CR><LF>
//wait_for_ack(25);
PWON.clr();
//GTime=0;
//while(GTime<100);
OSTimeDly(OS_TICKS_PER_SEC/4);
//WatchDog_Task();
OSTimeDly(OS_TICKS_PER_SEC/4);
PWON.set();
for(i=0;i<120;i++)
//wait_for_ack(5);
//{
// WatchDog_Task();
OSTimeDly(OS_TICKS_PER_SEC*30);
//}
}
void CGtm900::power_off(void)
{ INT8U i;
CGPIOOUT PWON(GPRS_GPON );
//tab_sp=at_cmd_mso;
//write_at_cmd(); //发送AT
//write_at_crlf(); //发送<CR><LF>
//wait_for_ack(25);
PWON.clr();
//GTime=0;
//for(i=0;i<12;i++)
//wait_for_ack(5);
//{
//WatchDog_Task();
OSTimeDly(OS_TICKS_PER_SEC*3);
//}
PWON.set();
OSTimeDly(OS_TICKS_PER_SEC/4);
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: INT8U QueSmCnt(void)
// 功能描述: 显示短信载体设置,查询有多少条短信没有读
// 输 入:
//
// 输 出:
//
// 全局变量: 无
// 调用模块:
// 调用类:
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900::QueSmCnt(void)
{
INT8U i=0;
while(!GNoteOkFalg&&i<3)
{
GNoteOkFalg=InitNote();
i++;
}
clr_at_rxbuf(); //清除接收at信息
tab_sp=at_cmd_cpms;
write_at_cmd(); //发送CNMI,新短信提示
write_at_crlf(); //发送<CR><LF>
for(i=0;i<5;i++)
{
if(rec_count>0) break;
wait_for_ack(10); //等待回复帧
}
i=0;
if(rec_count)
i=check_cpms();
return i;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: INT8U check_csq()
// 功能描述: 信号强度
// 输 入:
//
// 输 出: 信号强度
//
// 全局变量: 无
// 调用模块:
// 调用类:
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900::check_csq()
{
INT8U i;
INT8U temp=0,temp1=0;
b_ackOK=0;
get_fse(0x0a,1,0x0a,2);//从第1个换行符,到第2个换行符
i=0; //判断CTMI头
do
{
if(rs232_data[char_sta+i]!=at_ack_csq[i])
b_ackOK=1;
i+=1;
}while (at_ack_csq[i]!=0);
//while((rs232_data[char_sta+i]==at_ack_csq[i])&&at_ack_csq[i]!=0) i++;
if(!b_ackOK)
{
//b_ackOK=1;
temp=rs232_data[char_sta+i]-'0';
temp1=rs232_data[char_sta+i+1]-'0';
temp*=10;
temp+=temp1;
if(temp>31) temp=99;
return temp;
}
return 99;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: INT8U check_csq()
// 功能描述: 检查是否连接成功
// 输 入:
//
// 输 出: 信号强度
//
// 全局变量: 无
// 调用模块:
// 调用类:
//说 明:加了3个容错, 1:如果连接成功,其后紧跟的是关闭连接,则认为没有连接成功
// 2:提示错误,但后面紧跟连接成功,则为连接成功
// 3:重复打开连接,也认为成功。注意EROOR2和21的区别,华为模块真的不好
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void CGtm900::check_connect()
{
INT8U i,j;
j=0;
//b_ackOK=1;
//b_conOK=0;
b_ackOK=0;
if(rec_count)
{
b_ackOK=1;
get_fse(0x0a,1,0x0a,2);//从第1个换行符,到第2个换行符
i=0; //
do
{
if(rs232_data[char_sta+i]!=at_ack_connect[i])
{
b_ackOK=0;
//b_conOK=0;
break;
}
i+=1;
}while (at_ack_connect[i]!=0);
if(!b_ackOK)//用于检测EORRN:21和2的区别
{
b_ackOK=1;
i=0; //
do
{
if(rs232_data[char_sta+i]!=at_ack_conerrn[i])
{b_ackOK=0;break;}
i+=1;
}while (at_ack_conerrn[i]!=0);
if((char_sta+i)!=char_end) b_ackOK=0;
}
//if(rec_count>
get_fse(0x0a,2,0x0a,3);//用于模块的非正常返回
if(char_end>char_sta)
{
if(!b_ackOK)
{
b_ackOK=1;
i=0; //
do
{
if(rs232_data[char_sta+i]!=at_ack_connect[i])
{b_ackOK=0;break;}
i+=1;
}while (at_ack_connect[i]!=0);
}
else
//b_ackOK=1;
{
i=0; //
do
{
if(rs232_data[char_sta+i]!=at_ack_ipclose[i])
break;
j++;
i+=1;
}while (at_ack_ipclose[i]!=0);
if(j>7) b_ackOK=0x00;
}
}
}
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: INT8U check_cmgr()
// 功能描述: 检测短信内容
// 输 入:
//
// 输 出: 如果是IP地址,输出为FALSE。如果是命令,输出为命令长度
//
// 全局变量: 无
// 调用模块:
// 调用类:DealMsg();
//说 明:加了1个容错, 1:提示错误,但后面紧跟是短信内容。
// 2:华为模块经常有这样的事发生。
//
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//--------------------------------------
//返回是否是
//+CMGR: "REC UNREAD","8613510054427",,"05/07/26,09:29:26+00",145,4,0,0,"8613800755500",145,28
//IP:"218.17.105.150",6000
//--------------------------------------
/*INT8U CGtm900::check_cmgr()//在read_msg()中调用。返回是否是+CMGR: "REC UNREAD","8613049341259",,"05/07/22,10:55:38+00",145,4,0,0,"8613800755500",145,11
{
INT16U i;
INT8U data_len;
INT8U tempfg;
check_error();
tempfg=b_ackOK;
//INT8U tmeplen;
if(tempfg)
get_fse(0x0a,2,' ',1);//从第1个换行符,到第1个空格符
else
get_fse(0x0a,1,' ',1);//从第1个换行符,到第1个空格符
//b_ackCMGR=1;
i=0; //判断CMGR头
do
{
if(rs232_data[char_sta+i]!=at_ack_cmgr[i])
//b_ackCMGR=0;
return FALSE;
i+=1;
}while (at_ack_cmgr[i]!=0);
///////////////////////////////////////////////////
//if(b_ackCMGR) //是+CMGR
//{
get_fse('"',3,'"',4);//从第3个"符,到第4个"符
for(i=0;i<13;i++) //保存回复地址
{
ack_addr[i]=rs232_data[char_sta+i] ;
}
///////////////////////////////////////////////
//保存短信内容
if(tempfg)
get_fse(0x0a,3,0x0a,4);
else
get_fse(0x0a,2,0x0a,3);//从第2个换行符,到第3个换行符
///////////////////////////////////////////////
//信息保存在rs232_data[char_sta]-rs232_data[char_end-1]
//IP:"218.17.105.150",6000
//68999999999999680e019c1116
///////////////////////////////////////////////
if((rs232_data[char_sta]=='I')||rs232_data[char_sta]=='i') //IP:"218.17.105.150",6000
{
//b_msgIP=1;//短信内容是IP地址
ip_addr_count=0;//保存IP地址的字节数
for(i=char_sta+3;i<char_end;i++)
{
ip_addr[ip_addr_count]=rs232_data[i];
ip_addr_count+=1;
}
DealMsg();
return 0x00;
}
else
{
//b_msgIP=0x02;//短信内容非IP地址
while(rs232_data[char_sta]!='6'&&char_sta<char_end) char_sta++; //68999999999999680e019c1116
i=char_end-char_sta;
data_len=ascii_2_hex(&rs232_data[char_sta],&rs232_data[0], i);
return data_len;
}
return FALSE;
//}
}*/
INT8U CGtm900::check_cmgr_pdu()//在read_msg()中调用。返回是否是+CMGR: "REC UNREAD","8613049341259",,"05/07/22,10:55:38+00",145,4,0,0,"8613800755500",145,11
{
INT16U i;
INT8U data_len;
INT8U tempfg;
//INT8U temp;
check_error();
tempfg=b_ackOK;
//INT8U tmeplen;
if(tempfg)
get_fse(0x0a,2,' ',1);//从第1个换行符,到第1个空格符
else
get_fse(0x0a,1,' ',1);//从第1个换行符,到第1个空格符
//b_ackCMGR=1;
i=0; //判断CMGR头
do
{
if(rs232_data[char_sta+i]!=at_ack_cmgr[i])
//b_ackCMGR=0;
return FALSE;
i+=1;
}while (at_ack_cmgr[i]!=0);
//return TRUE;
///////////////////////////////////////////////////
get_fse(0x0a,2,0x0a,3);
if(char_end>char_sta)
i=char_end-char_sta;
else
i=0;
data_len=ascii_2_hex(&rs232_data[char_sta],rs232_data, i);
i=decode_pdu_frame(rs232_data,data_len,rs232_data);
//SendSmsNBytePdu(rs232_data,i,rs232_data);
return i;
//i=0;
//temp=rs232_data[0];
//if(temp>data_len)
// return FALSE;
//i+=temp+1;//跳过短信中心地址
//i++;//基本参数(TP-MTI/MMS/RP)
//return data_len;
//if(b_ackCMGR) //是+CMGR
//{
// get_fse('"',3,'"',4);//从第3个"符,到第4个"符
// data_len=ascii_2_hex(&rs232_data[char_sta],&rs232_data[0], i);
/*for(i=0;i<13;i++) //保存回复地址
{
ack_addr[i]=rs232_data[char_sta+i] ;
}
///////////////////////////////////////////////
//保存短信内容
if(tempfg)
get_fse(0x0a,3,0x0a,4);
else
get_fse(0x0a,2,0x0a,3);//从第2个换行符,到第3个换行符
///////////////////////////////////////////////
//信息保存在rs232_data[char_sta]-rs232_data[char_end-1]
//IP:"218.17.105.150",6000
//68999999999999680e019c1116
///////////////////////////////////////////////
if((rs232_data[char_sta]=='I')||rs232_data[char_sta]=='i') //IP:"218.17.105.150",6000
{
//b_msgIP=1;//短信内容是IP地址
ip_addr_count=0;//保存IP地址的字节数
for(i=char_sta+3;i<char_end;i++)
{
ip_addr[ip_addr_count]=rs232_data[i];
ip_addr_count+=1;
}
DealMsg();
return 0x00;
}
else
{
//b_msgIP=0x02;//短信内容非IP地址
while(rs232_data[char_sta]!='6'&&char_sta<char_end) char_sta++; //68999999999999680e019c1116
i=char_end-char_sta;
data_len=ascii_2_hex(&rs232_data[char_sta],&rs232_data[0], i);
return data_len;
}
return FALSE;
//}*/
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: INT8U read_msg(INT8U i)
// 功能描述: 读i条短信内容
// 输 入:
//
// 输 出: 如果是IP地址,输出为FALSE。如果是命令,输出为命令长度
//
// 全局变量: 无
// 调用模块: check_cmgr()
// 调用类:
//说 明:
//
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900::read_msg(INT8U i) //读取短信内容
{
//CUART0 uart0;
// //清除接收at信息
INT8U len;
INT8U j;
INT8U read_numh=0;
INT8U read_numl=0;
j=i-1;
while(j>=10)//j/10为什么有错误呢????
{
j-=10;
read_numh++;
}
read_numh+='0';
read_numl=j%10;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -