求助,为什么3g模块能发短信却收不到短信
大家好,小弟是个菜鸟,最近买了个3g模块(中兴AD3812),在开发板上做收发短信的实验,用AT指令可以发送pdu格式短信,也可以向外发送振铃,但是却收不到短信,用手机给开发板上的手机卡打电话,手机中一直彩铃,知道无人接听。请教各位前辈,我这个问题原因可能出在哪里?自己写了一个简单的程序(linux3.0.1),主要部分如下
int main(void)
{
char at[]="AT\r\n";//是否支持AT指令?;
char ate[]="ATE1\r\n";//回显模式;
char supportmode[]="AT+CNMI=?\r\n";
char pdu[]="AT+CMGF=0\r\n";//pdu模式;
char mode1[]="AT+CNMI=2,2,0,0,0\r\n";
char whichmode[]="AT+CNMI?\r\n";
char buf[160]=" ";
char msg[512]=" ";
fd = open( "/dev/ttyUSB3",O_RDWR|O_NOCTTY|O_NONBLOCK);//打开设备
if(fd<0)
{
perror("/dev/ttyUSB3");
exit(1);
}
int setbaudrate=set_opt(fd,115200,8,'N',1);//设置波特率;
if(setbaudrate==0)
{printf("set baudrate success!");}
write(fd,at,sizeof(at));//支持at?;
usleep(500);
read(fd,buf,sizeof(buf));
printf("support for at cmd?%s",buf);
memset(buf,0,160);
write(fd,supportmode,sizeof(supportmode));//at+cnmi支持的模式有哪些;
usleep(500);
read(fd,buf,sizeof(buf));
printf("support mode of at+cnmi=%s",buf);
memset(buf,0,160);
write(fd,ate,sizeof(ate));//设置回显;
usleep(500);
read(fd,buf,sizeof(buf));
printf("set echo?%s",buf);
memset(buf,0,160);
write(fd,pdu,sizeof(pdu));//设置为PDU模式;
usleep(500);
read(fd,buf,sizeof(buf));
printf("set PDU mode?%s",buf);
memset(buf,0,160);
write(fd,mode1,sizeof(mode1));//即时发送的TE模式;
usleep(500);
read(fd,buf,sizeof(buf));
printf("readmode success?%s",buf);
memset(buf,0,160);
write(fd,whichmode,sizeof(whichmode));
usleep(500);
read(fd,buf,sizeof(buf));
printf("which mode of at+cnmi now =%s",buf);
memset(buf,0,160);
while(1)
{
int n=read(fd,msg,512);//如果收到短信,打印在屏幕上;
if(n>1)
{
printf("read msg=: %s\n",msg);
}
usleep(1);
}
以上是主要代码。
但是超级终端上面运行起来后
set baudrate success!support for at cmd? support mode of at+cnmi=AT
OK
AT+CNMI=?
set echo?
+CNMI: (0,1,2),(0,1,2,3),(0,2),(0,1,2),(0,1)
OK
ATE1
OK
set PDU mode?AT+CMGF=0
OK
readmode success?AT+CNMI=2,2,0,0,0
OK
AT+CNMI?
+CNMI: 2,2,0,0,0
OK
之后就一直在等待短信,可是我对模块的sim卡发送短信,终端上面木有任何反应(AT手册上面说应该可以返回收到短信的通知和pdu格式的代码)。请问我这个问题可能出在哪里,小弟冥思苦想也没有头绪,请各位不吝赐教,不胜感激。
补充:移动开发 , 移动开发其他问题