📄 cgtm900.cpp
字号:
{
INT8U i=0;
i=QueSmCnt();
if(i)
{
do{
clr_msg(i);
i--;
}
while(i);
}//删除短信
}
void CGtm900:: delay(INT8U x)
{
INT8U i,j;
for(i=0;i<x;i++)
{
for(j=0;j<120;j++);
}
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DecodeQueryAdd(void)
// 功能描述: 返回解码数组的地址
// 输 入:
//
// 输 出: 解码地址
//
// 全局变量: 无
// 调用模块:
// 调用类:
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900::binbcd8_to_ascii(INT8U bcdbin,INT8U *buffer)
{
INT8U const ascTable[17] = {"0123456789"};
INT8U *tmp_p = buffer;
INT8U temp;
INT8U i, pos;
pos=0;
temp=bcdbin;
i=temp/100;
if(i)
{
temp=temp%100;
tmp_p[pos++]=ascTable[i];
}
i=temp/10;
if(i)
{
temp=temp%10;
tmp_p[pos++]=ascTable[i];
}
else if(pos!=0)
{
tmp_p[pos++]=ascTable[0];
}
tmp_p[pos++]=ascTable[temp];
return pos;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DecodeQueryAdd(void)
// 功能描述: 返回解码数组的地址
// 输 入:
//
// 输 出: 解码地址
//
// 全局变量: 无
// 调用模块:
// 调用类:
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900::ascii_to_binbcd8(INT8U len,INT8U *buffer)
{
INT8U *tmp_p = buffer;
INT8U temp,binbcd=0;
INT8U templen;
INT8U i=0;
templen=len;
if(templen>3)
{
templen=3;
templen-=1;
binbcd=tmp_p[i++]-'0';
binbcd*=100;
}
if(templen==2)
{
templen-=1;
temp=tmp_p[i++]-'0';
temp=temp*10;
binbcd+=temp;
}
binbcd+=tmp_p[i++]-'0';
return binbcd;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DecodeQueryAdd(void)
// 功能描述: 返回解码数组的地址
// 输 入:
//
// 输 出: 解码地址
//
// 全局变量: 无
// 调用模块:
// 调用类:
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT16U CGtm900::ascii_to_binbcd16(INT8U len,INT8U *buffer)
{
INT8U *tmp_p = buffer;
INT16U temp,binbcd=0;
INT8U templen;
INT8U i=0;
templen=len;
if(templen>5)
{
templen=5;
templen-=1;
binbcd=tmp_p[i++]-'0';
binbcd*=10000;
}
if(templen==4)
{
templen-=1;
temp=tmp_p[i++]-'0';
temp=temp*1000;
binbcd+=temp;
}
if(templen==3)
{
templen-=1;
temp=tmp_p[i++]-'0';
temp=temp*100;
binbcd+=temp;
}
if(templen==2)
{
templen-=1;
temp=tmp_p[i++]-'0';
temp=temp*10;
binbcd+=temp;
}
binbcd+=tmp_p[i++]-'0';
return binbcd;
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// 函数名称: DecodeQueryAdd(void)
// 功能描述: 返回解码数组的地址
// 输 入:
//
// 输 出: 解码地址
//
// 全局变量: 无
// 调用模块:
// 调用类:
//创 建 人: 杨虎岳
//日 期: 2006年6月7日
//-------------------------------------------------------------------------------------------------------
// 修改人:
// 日 期:
// 内 容:
//------------------------------------------------------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INT8U CGtm900::binbcd16_to_ascii(INT16U bcdbin,INT8U *buffer)
{
INT8U const ascTable[17] = {"0123456789"};
INT8U *tmp_p = buffer;
INT16U temp;
INT8U i, pos;
pos=0;
temp=bcdbin;
i=temp/10000;
if(i)
{
temp=temp%10000;
tmp_p[pos++]=ascTable[i];
}
i=temp/1000;
if(i)
{
temp=temp%1000;
tmp_p[pos++]=ascTable[i];
}
else if(pos!=0)
{
tmp_p[pos++]=ascTable[0];
}
i=temp/100;
if(i)
{
temp=temp%100;
tmp_p[pos++]=ascTable[i];
}
else if(pos!=0)
{
tmp_p[pos++]=ascTable[0];
}
i=temp/10 ;
if(i)
{
temp=temp%10;
tmp_p[pos++]=ascTable[i];
}
else if(pos!=0)
{
tmp_p[pos++]=ascTable[0];
}
tmp_p[pos++]=ascTable[temp];
return pos;
}
//--------------------------------------
//收到什么,显示什么
//--------------------------------------
/*void CGtm900::view_rec(void)//收到什么,显示什么
{
CUART1 uart1;
INT8U i ,j;
if(rec_count>0)
{
for(i=0;i<rec_count;i++)
{
uart1.SendByte(rs232_data[i]);
//while(!TI);
//TI=0;
}
write_at_crlf();
for(j=0;j<50;j++)
{
wait_for_ack(5); //等待回复帧
if(rec_count>0) break;
}
}
}*/
//--------------------------------------
//收到IP地址后,确认IP
//--------------------------------------
/*void CGtm900::ack_msgIP()//收到IP地址后,确认IP
{
INT8U i,j;
clr_at_rxbuf(); //清除接收at信息
write_msg_addr();
write_at_crlf();
for(i=0;i<100;i++)
{
wait_for_ack(10);
if(rec_count) break;
}
for(i=0;i<ip_addr_count;i++)
{
uart.SendByte(ip_addr[i]);
}
uart.SendByte(0x1a);
write_at_crlf();
i=0;
do
{
clr_at_rxbuf(); //清除接收at信息
for(j=0;j<5;j++)
{
wait_for_ack(100); //等待回复帧
if(rec_count>0) break;
}
check_OK(); //是否是OK,产生b_ackOK
i+=1;
if(i>10) break;
}while(!b_ackOK);
}
*/
//--------------------------------------
//返回是否是+CMGS: 86
//--------------------------------------
void CGtm900::check_cmgs() //返回是否是+CMGS: 86
{
INT8U i;
get_fse(0x0a,1,' ',1);//从第1个换行符,到第1个空格符
b_ackOK=1;
i=0; //判断CTMI头
do
{
if(rs232_data[char_sta+i]!=at_ack_cmgs[i])
b_ackOK=0;
i+=1;
}while (at_ack_cmgs[i]!=0);
}
INT8U CGtm900:: decode_pdu_frame(unsigned char *rcvd_message,INT8U len, unsigned char *user_data)
{
unsigned char user_data_len = 0;
int i = 0;
INT8U templen;
//INT8U temp;
INT8U tempbuf[255];
templen=len;
if(templen<2)
return FALSE;
/* 用户地址长度 */
user_data_stru.addr_len = rcvd_message[0];
user_data_len += 1;
/* 用户地址类型 */
user_data_stru.addr_type = rcvd_message[1];
user_data_len += 1;
if(user_data_len +user_data_stru.addr_len-1>templen)
return FALSE;
/* 将bcd码字节内前后两部分翻转 */
for(i = 0; i < user_data_stru.addr_len - 1; ++i) {
user_data_stru.short_msg_centre_num[i] = ((rcvd_message[i + user_data_len] << 4) | (rcvd_message[i + user_data_len] >> 4));
}
user_data_len += user_data_stru.addr_len - 1;
if(user_data_len +3>templen)
return FALSE;
/* tp中的各相参数 */
user_data_stru.tp_msg = rcvd_message[user_data_len];
user_data_len += 1;
/* 对方地址长度 */
user_data_stru.dest_msg_len = rcvd_message[user_data_len];
user_data_len += 1;
/* 对方地址类型 */
user_data_stru.dest_msg_type = rcvd_message[user_data_len];
user_data_len += 1;
if(user_data_len +user_data_stru.dest_msg_len+1>templen)
return FALSE;
/* 将bcd码字节内前后两部分翻转 */
//for(i = 0; i < (int)((user_data_stru.dest_msg_len + 1) / 2); ++i)
//{
//user_data_stru.dest_msg_centre_num[i] = ((rcvd_message[i + user_data_len] << 4) | (rcvd_message[i + user_data_len] >> 4));
//}
for(i = 0; i < (int)((user_data_stru.dest_msg_len + 1) / 2); ++i)
user_data_stru.dest_msg_centre_num[i] =rcvd_message[i + user_data_len];
user_data_len += (int)((user_data_stru.dest_msg_len + 1) / 2);
if(user_data_len +10>templen)
return FALSE;
/* 协议标识符 */
user_data_stru.tp_protc_ident = rcvd_message[user_data_len];
user_data_len += 1;
/* 编码方式 */
user_data_stru.tp_data_coding_sche = rcvd_message[user_data_len];
user_data_len += 1;
/* 时间戳 */
for(i = 0; i < 7; ++i) {
user_data_stru.timeid[i] = ((rcvd_message[i + user_data_len] << 4) | (rcvd_message[i + user_data_len] >> 4));
}
user_data_len += 7;
/* 用户数据长度 */
user_data_stru.tp_usr_data_len = rcvd_message[user_data_len];
user_data_len += 1;
/*switch(user_data_stru.tp_data_coding_sche)
{
case 0x00:
if(user_data_len +(user_data_stru.tp_usr_data_len*7/8)>templen)//有一个的误差,可能溢出
return FALSE;
temp=gsmDecode7bit(&rcvd_message[user_data_len],templen-user_data_len,tempbuf);
if(temp>user_data_stru.tp_usr_data_len)
temp=user_data_stru.tp_usr_data_len;
if((tempbuf[2]==0x68)||(tempbuf[3]==0xFE))
{
temp-=2;
user_data_stru.smsseq[0]=tempbuf[0];
user_data_stru.smsseq[1]=tempbuf[1];
BufToBuf(user_data,&tempbuf[2],temp);
user_data_stru.tp_usr_data_len=temp;
}
else
{
user_data_stru.tp_usr_data_len=ascii_2_hex(tempbuf,tempbuf, temp);
temp=user_data_stru.tp_usr_data_len-2;
user_data_stru.smsseq[0]=tempbuf[0];
user_data_stru.smsseq[1]=tempbuf[1];
BufToBuf(user_data,&tempbuf[2],temp);
user_data_stru.tp_usr_data_len=temp;
}
//BufToBuf(user_data,tempbuf,temp);
break;
case 0x04:
if((user_data_len+user_data_stru.tp_usr_data_len-1)>templen)
return FALSE;
if((rcvd_message[user_data_len+2]=='6')&&(rcvd_message[user_data_len+3]=='8'))
{temp=user_data_stru.tp_usr_data_len;
user_data_stru.tp_usr_data_len=ascii_2_hex(rcvd_message + user_data_len,tempbuf, temp);
temp-=2;
user_data_stru.smsseq[0]=tempbuf[0];
user_data_stru.smsseq[1]=tempbuf[1];
BufToBuf(user_data,&tempbuf[2],temp);
user_data_stru.tp_usr_data_len=temp;
}
else
{
user_data_stru.smsseq[0]=rcvd_message[ user_data_len];
user_data_stru.smsseq[1]=rcvd_message[ user_data_len+1];
BufToBuf(user_data, rcvd_message + user_data_len+2, user_data_stru.tp_usr_data_len-2);
user_data_stru.tp_usr_data_len-=2;
}
break;
case 0x08:
if((user_data_len +user_data_stru.tp_usr_data_len)>templen)
return FALSE;
for(i=0;i<user_data_stru.tp_usr_data_len/2;i++)
user_data[i]=rcvd_message[ user_data_len+2*i+1];
user_data_stru.tp_usr_data_len/=2;
if((user_data[0]!=0x68)&&(user_data[0]!=0xFE))
{ temp=user_data_stru.tp_usr_data_len;
user_data_stru.tp_usr_data_len=ascii_2_hex(user_data,user_data, temp);
}
break;
default: break;
}
*/
// if(user_data_stru.tp_data_coding_sche==0x04)
// {
BufToBuf(tempbuf, rcvd_message + user_data_len+2, user_data_stru.tp_usr_data_len-2);
user_data_stru.tp_usr_data_len-=2;
user_data_stru.smsseq[0]=rcvd_message[user_data_len];
user_data_stru.smsseq[1]=rcvd_message[user_data_len+1];
if(tempbuf[0]!=0x68)
{for(i=user_data_len;i<templen;i++)
if(rcvd_message[i]==0x68) break;
BufToBuf(tempbuf, rcvd_message +i, templen-i);
user_data_stru.tp_usr_data_len=templen-i;
user_data_stru.smsseq[0]=rcvd_message[i-2];
user_data_stru.smsseq[1]=rcvd_message[i-1];
}
BufToBuf(user_data,tempbuf,user_data_stru.tp_usr_data_len);
// }
// else
// return FALSE;
/* 用户数据内容 */
//user_data_len += user_data_stru.tp_usr_data_len;
/* 编码方式 */
/* 传出用户数据 */
//BufToBuf(user_data, user_data_stru.usr_data, user_data_stru.tp_usr_data_len);
/* 返回用户数据长度 */
if(user_data_stru.tp_usr_data_len>255)
return FALSE;
return (user_data_stru.tp_usr_data_len);
}
/*INT8U CGtm900:: encode_pdu_frame(unsigned char *source_data,
unsigned char source_len,
unsigned char *dest_data)
{
unsigned char dest_data_len = 0;
unsigned char dest_temp[256];
unsigned char temp_len = 0;
//CParameterTianJin pa;
INT8U smscenter[8];
INT8U i;
INT8U temp;
INT8U temp1;
memset(dest_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -