GPRS发短信代码
GPRSGPRSGPRSGPRS 发短信代码发短信代码发短信代码发短信代码
http://blog.163.com/chire_luozhd/blog/static/632506120100272848993/
短信技术 2010-01-27 14:08:48 阅读 27 评论 0 字号:大中中中中小 订阅
经过阅读资料--了解了不少用 GPRS 模块发短信的过程,但很多是理论,并没有实际性的代
码;
经过 2 天的努力,终于把 GPRS 发送中文短信成功!!
本人通过 s3c2410 开发板的串口...
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
本文档为【GPRS发短信代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。