为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

GPRS发短信代码

2010-08-28 7页 pdf 89KB 27阅读

用户头像

is_659443

暂无简介

举报
GPRS发短信代码 GPRSGPRSGPRSGPRS 发短信代码发短信代码发短信代码发短信代码 http://blog.163.com/chire_luozhd/blog/static/632506120100272848993/ 短信技术 2010-01-27 14:08:48 阅读 27 评论 0 字号:大中中中中小 订阅 经过阅读资料--了解了不少用 GPRS 模块发短信的过程,但很多是理论,并没有实际性的代 码; 经过 2 天的努力,终于把 GPRS 发送中文短信成功!! 本人通过 s3c2410 开发板的串口...
GPRS发短信代码
GPRSGPRSGPRSGPRS 发短信代码发短信代码发短信代码发短信代码 http://blog.163.com/chire_luozhd/blog/static/632506120100272848993/ 短信技术 2010-01-27 14:08:48 阅读 27 评论 0 字号:大中中中中小 订阅 经过阅读资料--了解了不少用 GPRS 模块发短信的过程,但很多是理论,并没有实际性的代 码; 经过 2 天的努力,终于把 GPRS 发送中文短信成功!! 本人通过 s3c2410 开发板的串口 1 与 wavecom Q2406A 接通,s3c2410 串口 0 用于终端 调试; 首先要把串口 1 设置为不是用于终端模式;之后配置串口属性;最后发送短信。(具体看 代码吧)!!!!!! 但看代码前请看看我的前一遍 GPRS 知识,不然你就不明白代码了!(如有问题请留言--) #include #include #include #include #include #include #include #include #include int open_port(int fd,int comport); int set_opt (int fd, int nSpeed, int nBits, char nEvent, int nStop) ; int change_number(char * pSrc) ; int main(void) { int fd; int nwrite,nread,i ; char buff[]="AT\r" ; //AT 命令--具体看手册 char red[256] ; char send[200] ; char send2[100] ; char centeraddr[] = "8613800100500"; //北京--短信中心号码 char usraddr[] = "861510104175x"; //用户号码 char head[] = "0891"; char phone[] = "1100"; char pho[] = "0D91" ; char phoafter[] = "0008000" ; char firemsg[]="0A5bb691cc7740706bff01" ; //家里着火! char thiefmsg[]="0A5c0f50778fdb5c4bff01" ; //小偷进屋 if((fd=open_port(fd,2))<0) { perror("open_port error"); return -1; } if((i=set_opt(fd,115200,8,'N',1))<0) { perror("set_opt error"); return; } printf("fd=%d\n",fd); //send=head+phone+msg+\x1a change_number(centeraddr); printf("after change,the centeraddr is %s\n",centeraddr); strcpy(send,head); //head=0891 printf("%s\n",send); strcat(send,centeraddr); printf("the send is %s\n%d\n",send,strlen(send)); change_number(usraddr); printf("after change, the usraddr is %s\n",usraddr); strcat(phone,pho); printf("%s\n",phone); strcat(phone,usraddr); printf("%s\n",phone); strcat(phone,phoafter); printf("the phone is %20s\n",phone); strcat(send,phone); printf("%s\n",send); strcat(send,"\x1a"); printf("%20s\n%d\n",send,strlen(send)); write(fd,"AT\r",3); sleep(2); nread=read(fd,red,256);//读串口 if(strstr(red,"OK") == NULL) printf("the com1 is faule!!\n"); printf("nread=%d,%s\n",nread,red); write(fd,"AT+CMGF=0\r",10) ; sleep(2) ; nread=read(fd,red,256);//读串口 //if(strstr(red,"OK") == NULL) // printf("the select PDU is faule!!\n"); printf("nread=%d,%s\n",nread,red); write(fd,"AT+CMGS=27\r",11) ; sleep(1) ; nread=read(fd,red,256);//读串口 printf("%s %d PDU CMD\n",red,nread); while(!strstr(red,"\r\n>")) { read(fd,red,256) ; } write (fd, send, strlen(send)); read(fd,red,256); printf("%s\n",red); sleep(3); close(fd); return 0; } int open_port(int fd,int comport) { char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"}; long vdisable; //O_NOCTTY 标志用于通知 Linux 系统,这个程序不会成为对应这个端口的控制终端。 //O_NDELAY 标志通知 Linux 系统,这个程序不关心 DCD 信号线所处的状态(端口的另一 端是否激活或者停止)。 if(comport==1) { //串口 1 fd=open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd) { perror("Can't Open Serial Port"); return(-1); } } else if(comport==2) { //串口 2 fd=open("/dev/s3c2410_serial1",O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd) { perror("Can't Open Serial Port"); return(-1); } } else if(comport==3) { //串口 3 fd=open("/dev/ttyS2",O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd) { perror("Can't Open Serial Port"); return(-1); } } if(fcntl(fd,F_SETFL,0)<0) printf("fcntl failed!\n"); else printf("fcntl=%d\n",fcntl(fd,F_SETFL,0)); if(isatty(STDIN_FILENO)==0) printf("standard input is not a termina device\n"); else printf("isatty success!\n"); printf("fd=%d\n",fd); return fd; } int set_opt (int fd, int nSpeed, int nBits, char nEvent, int nStop) { struct termios newtio, oldtio; if (tcgetattr (fd, &oldtio) != 0) { perror ("SetupSerial 1"); return -1; } bzero (&newtio, sizeof (newtio));//对结构体 清零 newtio.c_cflag |= CLOCAL | CREAD; newtio.c_cflag &= ~CSIZE; switch (nBits) { case 7: newtio.c_cflag |= CS7; break; case 8: newtio.c_cflag |= CS8; break; } switch (nEvent) { case 'O': newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); break; case 'E': newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; break; case 'N': newtio.c_cflag &= ~PARENB; break; } switch (nSpeed) { case 2400: cfsetispeed (&newtio, B2400); cfsetospeed (&newtio, B2400); break; case 4800: cfsetispeed (&newtio, B4800); cfsetospeed (&newtio, B4800); break; case 9600: cfsetispeed (&newtio, B9600); cfsetospeed (&newtio, B9600); break; case 115200: cfsetispeed (&newtio, B115200); cfsetospeed (&newtio, B115200); break; case 460800: cfsetispeed (&newtio, B460800); cfsetospeed (&newtio, B460800); break; default: cfsetispeed (&newtio, B9600); cfsetospeed (&newtio, B9600); break; } if (nStop == 1) newtio.c_cflag &= ~CSTOPB; else if (nStop == 2) newtio.c_cflag |= CSTOPB; newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0; tcflush (fd, TCIFLUSH);//刷新收到的数据但不读 if ((tcsetattr (fd, TCSANOW, &newtio)) != 0) { //TCSANOW:改变的配置立即生效 perror ("com set error"); return -1; } printf ("set done!\n"); return 0; } int change_number(char * pSrc) { int i ; char c ; char F[] = "F" ; int length = strlen(pSrc); // 1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加 F if(length & 1) { strcat(pSrc,F) ; // 补'F' int length = strlen(pSrc); printf("%s\n",pSrc) ; } //2、将奇数位和偶数位交换。 for(i=0;i总结
:在本代码中,中文的 unicode 码,已经中文转换 unicode 工具转换出来,并没写出其 转换代码,所以本代码有点不完整;
/
本文档为【GPRS发短信代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索