/*短信发送*/
void Location::GO_slot()
{
int t=0;
int nread;
memset(CMGR,0,sizeof(CMGR));//clear CMGR
while(write(fdgsm,AT,2)!=-1){break;}
while(write(fdgsm,&cr,1)!=-1){break;}
sleep(1);
while(1)
{
sleep(1);
nread=read(fdgsm,CMGR,sizeof(CMGR));
printf("nread:%d\n",nread);
for(i=0;i<nread;i++){printf("ATCMGS:%c\n",CMGR[i]);}
if(CMGR[0]=='O'&&CMGR[1]=='K')
{
memset(CMGR,0,sizeof(CMGR));
break;
}
else
{
write(fdgsm,AT,2);
write(fdgsm,&cr,1);
}
}
printf("writer AT finish!\r\n");
while(write(fdgsm,ATCSCA,22)!=-1){break;}
while(write(fdgsm,&cr,1)!=-1){break;}
sleep(1);
while(1)
{
sleep(1);
nread=read(fdgsm,CMGR,sizeof(CMGR));
printf("nread:%d\n",nread);
for(i=0;i<nread;i++){printf("ATCMGS:%c\n",CMGR[i]);}
if(CMGR[0]=='O'&&CMGR[1]=='K')
{
memset(CMGR,0,sizeof(CMGR));
break;
}
else
{
write(fdgsm,ATCSCA,22);
write(fdgsm,&cr,1);
}
}
printf("writer ATCSCA finish!\r\n");
while(write(fdgsm,ATCMGS,8)!=-1){break;}
while(write(fdgsm,telephonenum,11)!=-1){break;}
while(write(fdgsm,&cr,1)!=-1){break;}
usleep(1000);
usleep(8000);
usleep(8000);
usleep(8000);
printf("writer ATCMGS finish!\r\n");
while(write(fdgsm,BUF,2)!=-1){break;}
printf("writer BUF finish!\r\n");
while(write(fdgsm,&ctrlz,1)!=-1){break;}
while(write(fdgsm,&cr,1)!=-1){break;}
sleep(1);
printf("send finish!\r\n");
while(1)
{
if(nread=read(fdgsm,CMGR,80)>0){printf("rcv data\n");}
usleep(5000);
if(CMGR[0]=='+'&&CMGR[1]=='C'&&CMGR[2]=='M'&&CMGR[3]=='G'&&CMGR[4]=='S')
{
t=0;
while(write(fdgsm,ATCMGD,9)!=-1){break;}
while(write(fdgsm,&cr,1)!=-1){break;}
ioctl(fdfmq,1,1);
ioctl(fdfmq,0,1);
memset(CMGR,0,sizeof(CMGR));
jingduLineEdit->setText(tr("send ok!"));
weiduLineEdit->setText(tr("send ok!"));
while(1)
{
read(fdgsm,CMGR,80);
sleep(1);
if(CMGR[8]=='S'&&CMGR[9]=='M'&&CMGR[12]=='1')
{
ioctl(fdfmq,1,1);
ioctl(fdfmq,0,1);
memset(CMGR,0,sizeof(CMGR));
jingduLineEdit->setText(tr("read now!"));
weiduLineEdit->setText(tr("read now!"));
break;
}
else
{
printf("wait new msg......\n");
jingduLineEdit->setText(tr("wait new msg......"));
weiduLineEdit->setText(tr("wait new msg......"));
memset(CMGR,0,sizeof(CMGR));
t++;
if(t==60)//out recv timer !!
{
printf("wait time out !\n");
t=0;
jingduLineEdit->setText(tr("no rcv msg !"));
weiduLineEdit->setText(tr("no rcv msg !"));
break;
}
}
}
break;
}
else
{
printf("sending......\n");
jingduLineEdit->setText(tr("sending......"));
weiduLineEdit->setText(tr("sending......"));
memset(CMGR,0,sizeof(CMGR));
t++;
if(t==640)//out send timer !!
{
printf("send time out !\n");
t=0;
jingduLineEdit->setText(tr("send fail !"));
weiduLineEdit->setText(tr("send fail !"));
break;
}
}
}
}
/*短信解析*/
void Location::read_slot()
{
int n;
QString strlength;
QString weistrlength;
QString jingstrlength;
bzero(CMGR,sizeof(CMGR));//clear CMGR
bzero(data,sizeof(data));
while(1)
{
write(fdgsm,ATCMGR,9);
write(fdgsm,&cr,1);
sleep(1);
n=read(fdgsm,CMGR,80);
printf("rcvnum:%d\n",n);
for(i=0;i<n;i++){printf("CMGR:%c\n",CMGR[i]);}
if((CMGR[10]=='N'&&CMGR[23]=='E')||(CMGR[10]=='S'&&CMGR[23]=='W'))
{
for(i=0;i<24;i++){data[i]=CMGR[i];}
ioctl(fdfmq,1,1);
ioctl(fdfmq,0,1);
bzero(CMGR,sizeof(CMGR));//clear CMGR
break;
}
else if(CMGR[1]=='C'&&CMGR[2]=='M'&&CMGR[3]=='G'&&CMGR[4]=='R'&&CMGR[7]=='0'&&CMGR[10]=='0')
{
jingduLineEdit->setText(tr("no data!"));
weiduLineEdit->setText(tr("no data!"));
bzero(CMGR,sizeof(CMGR));//clear CMGR
bzero(data,sizeof(data));
break;
}
else
bzero(CMGR,sizeof(CMGR));//clear CMGR
}
bzero(CMGR,sizeof(CMGR));//clear CMGR
weistrlength=QString(data).mid(0,11);
weiduLineEdit->setText(weistrlength);
weiduLineEdit->show();
jingstrlength=QString(data).mid(12,12);
jingduLineEdit->setText(jingstrlength);
jingduLineEdit->show();
bzero(CMGR,sizeof(CMGR));//clear CMGR
while(write(fdgsm,ATCMGD,9)!=-1){break;}
while(write(fdgsm,&cr,1)!=-1){break;}
} |