免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5230 | 回复: 5

[应用] TD-SCDMA模块的发短信问题 [复制链接]

论坛徽章:
0
发表于 2009-08-23 12:45 |显示全部楼层
各位好,我现在用TD的LC6311模块做东西。
我按照手册上所说的做完开机过程后,然后下发短信,当等写入的AT命令返回>时,写入短信内容并以ctrl+z(ASCII码值为26)结束,但现在去读串口,模块依然返回>符号,要求继续输入。
发短信用到的AT指令,这个事是和手册一样的:
AT+CMMS=1\r
AT+CMGF=1\r
AT+CSMP=145,71,32,0
AT+CSCS="GSM"\r
AT+CMGS="10086"\r
HELLO ,YOU ARE WELCOME. CTRL+Z结束。

请用过LC6311及其他TD模块的朋友指导一下。谢谢


PS:我EVDO和WCDMA的以前都用过,短信内容后以ctrlz结束不存在问题的。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2009-08-23 13:48 |显示全部楼层

  1. int sms_send (unsigned char *sms_des,unsigned char *sms_content)
  2. {
  3.         int ret=0;
  4.         int i;
  5.         char send_buf[BUFFER_SIZE],recv_buf[BUFFER_SIZE],content_buf[BUFFER_SIZE];
  6.         char *des_head="AT+CMGS=";
  7.         char *des_tail="\r\0";
  8.         char content_tail[2]={0x1a,0x0};

  9.         memcpy (send_buf, des_head, strlen(des_head));
  10.         memcpy (send_buf+strlen(des_head), sms_des, strlen(sms_des));
  11.         memcpy (send_buf+strlen(des_head)+strlen(sms_des),des_tail,strlen(des_tail)+1);

  12.         memcpy (content_buf,sms_content,strlen(sms_content));
  13.         memcpy (content_buf+strlen(sms_content),content_tail,strlen(content_tail)+1);

  14.         for (i=0;i<RETRY;i++)
  15.         {
  16.                 usleep(5000);
  17.                 while (serial_busy) usleep(1);
  18.                 serial_busy=1;
  19.                 ret=serial_send_recv(send_buf,strlen(send_buf),content_buf,strlen(content_buf),recv_buf,20,0,5,0);
  20.                 serial_busy=0;
  21.                 if (ret<0)
  22.                 {
  23.                         printf("AT+CMGS:SERIAL SEND AND RECEIVE ERROR!\n");
  24.                         return SMSSEND_ERR;
  25.                 }
  26.                 else
  27.                 {
  28.                         if (check_OK(recv_buf,ret)==0)
  29.                                 return 0;
  30.                 }
  31.         }
  32.         return SMSSEND_ERR;
  33. }

  34. int serial_send_recv(char *send_buf,int send_len,char *send_content,int content_len,char *recv_buf,int timeout_s,int timeout_us,int wait_s,int wait_us)
  35. {
  36.         int fd;
  37.         int nread=0;
  38.         int nwrite=0;
  39.         char buff[BUFSIZE];
  40.         struct termios oldtio,newtio;
  41.            struct timeval tv;
  42.         char *dev ="/dev/tts/0";
  43.         fd_set rfds;

  44.         if ( (fd = open(dev,O_RDWR | O_NOCTTY ))<0)
  45.         {
  46.                 printf("Can't Open Serial Port!\n");
  47.                 return -1;
  48.         }
  49.         tcgetattr(fd,&oldtio);
  50.         setTermios(&newtio,B115200);         tcflush(fd, TCIFLUSH);
  51.         tcsetattr(fd,TCSANOW,&newtio);

  52.         tv.tv_sec=timeout_s;
  53.         tv.tv_usec=timeout_us;
  54.         nwrite=write(fd, send_buf, send_len);
  55.         if(nwrite<send_len)
  56.         {
  57.                 printf("Serial Write error!\n");
  58.                 return -1;
  59.         }
  60.         FD_ZERO(&rfds);
  61.         FD_SET(fd,&rfds);
  62.         if (select(1+fd,&rfds,NULL,NULL,&tv)>0)
  63.         {
  64.                 if(FD_ISSET(fd,&rfds))
  65.                 {       
  66.                         sleep(1);
  67.                         usleep(wait_us);
  68.                         nread=read(fd, buff, BUFSIZE);
  69.                         if(nread<0)
  70.                         {       
  71.                                 printf("serial read error!\n");
  72.                                 return -1;
  73.                         }
  74.                         memcpy(recv_buf,buff,nread);
  75.                 }
  76.         }
  77. #ifdef DEBUG
  78.         buff[nread]='\0';
  79.         printf("RECEIVED::%s\n",buff);
  80. #endif
  81.         sleep(1);
  82.         tv.tv_sec=timeout_s;
  83.         tv.tv_usec=timeout_us;
  84.         nwrite=write(fd, send_content, content_len);
  85.         if(nwrite<content_len)
  86.         {
  87.                 printf("Serial Write error!\n");
  88.                 return -1;
  89.         }
  90.         FD_ZERO(&rfds);
  91.         FD_SET(fd,&rfds);
  92.         if (select(1+fd,&rfds,NULL,NULL,&tv)>0)
  93.         {
  94.                 if(FD_ISSET(fd,&rfds))
  95.                 {       
  96.                         sleep(wait_s);
  97.                         usleep(wait_us);
  98.                         nread=read(fd, buff, BUFSIZE);
  99.                         if(nread<0)
  100.                         {       
  101.                                 printf("serial read error!\n");
  102.                                 return -1;
  103.                         }
  104.                         memcpy(recv_buf,buff,nread);
  105.                 }
  106.         }
  107. #ifdef DEBUG
  108.         buff[nread]='\0';
  109.         printf("RECEIVED::%s\n",buff);
  110. #endif
  111.         tcsetattr(fd,TCSANOW,&oldtio);
  112.         close(fd);
  113.         return nread;
  114. }



复制代码


这个是我们以前做的时候用的
估计你的也是Wavecom的

论坛徽章:
0
发表于 2009-08-23 19:48 |显示全部楼层
原帖由 T-bagwell 于 2009-8-23 13:48 发表

int sms_send (unsigned char *sms_des,unsigned char *sms_content)
{
        int ret=0;
        int i;
        char send_buf,recv_buf,content_buf;
        char *des_head="AT+CMGS=";
        char *des_tail="\r\0";
        char cont ...

我的程序和你差不多。。。
但是这样是不行的。
用的模块是联芯科技的LC6311.

论坛徽章:
0
发表于 2009-08-24 23:20 |显示全部楼层
我的程序不行是因为返回:
cms error:50这个错误。
查了3GPP的文档,得知这是因为卡的原因。

谢谢版主!

论坛徽章:
0
发表于 2010-11-22 20:56 |显示全部楼层
回复 5# lpzgbd

楼主我也用的是lc6311模块发短信但返回的是
    +CMS ERROR: 69
请问怎么样解决?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP