0
点赞
收藏
分享

微信扫一扫

基本功练习_3_2_之(GPRS.c)

/*************************************************************************
  *程序功能:
  *        发送中英文短信,拨打报警电话
  *
  *参数:   主程序向GPRS.c中的gprs(int) 传入因为什么而报警(火警或陌生人闯入)
  *        以决定发送火灾报警短信还是陌生人闯入时的报警短信
  *
  * ***********************************************************************/ #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <signal.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <termio.h>
 #include <errno.h>
 #include "GPRS.h"#define THIEF_INTO 1    //小偷进入
 #define FIRE 2          //火灾发生
  /*
   *函数功能:设置串口属性
   *参数:   
         @fd:   串口文件描述符
   @nSpeed:   比特率
   @nBit:     有效位个数
   @nEvent:   有无校验位
   @nStop:    几位停止位
   返回值:设置成功与否:
         secuss:1
   error: 0
   * */
 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;
  default:
   cfsetispeed(&newtio,B115200);
   cfsetospeed(&newtio,B115200);
   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)
  {
      perror("com set error");
   return -1;
  }
  printf("set done\n");
  return 0;
 }/*
  * 函数功能:打开串口 
  * 参数:
  *      @comport:打开的串口的号码
  *      @fd:     打开的文件描述符
  * 返回值:打开成功与否
  *      secuess: 返回打开的串口的文件描述符
  *      error:   -1
  * 最后修改时间:2011.12.22
  * */
 int open_port(int fd,int comport)
 {
  long vdisable;
  if(0 == comport)
  {
      fd = open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY);
   if(-1 == fd)
   {
      perror("can not open the port");
      return -1;
   }
  }
  if(1 == comport)
  {
      fd = open("/dev/s3c2410_serial0",O_RDWR|O_NOCTTY|O_NDELAY);
   if(-1 == fd)
   {
      perror("can not open the port");
      return -1;
   }
  }
  if(2 == comport)
  {
      fd = open("/dev/s3c2410_serial1",O_RDWR|O_NOCTTY|O_NDELAY);
   if(-1 == fd)
   {
      perror("can not open the port");
      return -1;
   }
  }
  if(3 == comport)
  {
      fd = open("/dev/s3c2410_serial2",O_RDWR|O_NOCTTY|O_NDELAY);
   if(-1 == fd)
   {
      perror("can not open the port");
      return -1;
   }
  } if(fcntl(fd,F_SETFL,0) < 0)
   printf("fcntl error\n");
  else
   printf("fcntl=%d\n",fcntl(fd,F_SETFL,0));
  if(isatty(STDIN_FILENO) == 0)
   printf("standard input is not a terminal device\n");
  else
   printf("isatty sucess \n");
  printf("fd-open=%d\n",fd); return fd;
 }int gprs(int type)
 {
  int fd;
  int pid;
  char string[100];
  int n = 0;
  /*小偷进屋*/
  char send_thief[100] = "0891683110102105F011000D91685115607830F70008000A5C0F50778FDB5C4BFF01";
  /*家里着火*/
  char send_fire[100] = "0891683110102105F011000D91685115607830F70008000A5bb691cc7740706bff01";  /*打开串口,并设置属性(115200,8位有效数据位,无奇偶校验,1位)*/
  //extern pthread_mutex_t GPRS_lock;
   // pthread_mutex_lock(&GPRS_lock);
 // fd=open_port(fd,2);
  set_opt(fd,9600,8,'N',1);
  n = write(fd,"at\r",strlen("at\r"));
  printf("write=%d\n",n);
  printf(".................\n");
     /*发送AT,返回ok*/
  sleep(2);
  bzero(string,sizeof(string));
  n = read(fd,string,100);
  printf("read AT=%d\n",n);
  printf("read AT=%s\n",string);
  
    
     /*短信中心号码*/
  //write(fd,"AT+CSCA=\"+8613010112500\"\r",strlen("AT+CSCS=\"+8613010112500\"\r"));
  /*write(fd,"AT+CSCA=+8613010112500\r",strlen("AT+CSCS=+8613010112500\r"));
  sleep(2);
  bzero(string,sizeof(string));
  n = read(fd,string,100);
  printf("read AT+CSCA = %d\n",n);
  printf("read AT+CSCA =%s\n",string);
     */
     /*
  write(fd,"AT+CCID\r",strlen("AT+CCID\r"));
  sleep(2);
  bzero(string,sizeof(string));
  n = read(fd,string,100);
  printf("read AT+CCID %d\n",n);
  printf("read AT+CCID =%s\n",string);
  */
     /*发送目标号码*/
  //n = write(fd,"AT+CMGS=+8615510687037\r",strlen("AT+CMGS=+8615510687037\r"));
  
  /*发送设置的短信模式*/
  
  write(fd,"AT+CMGF=0\r",strlen("AT+CMGF=0\r"));
  sleep(2);
  bzero(string,sizeof(string));
  n = read(fd,string,100);
  printf("read AT+CMGF = %d\n",n);
  printf("read AT+CMGF =%s\n",string); 
 write(fd,"AT+CMGS=25\r",strlen("AT+CMGS=25\r"));
  sleep(2);
  bzero(string,sizeof(string));
  n = read(fd,string,50);
  printf("read AT+CMGS = %d\n",n);
  printf("read AT+CMGS =%s\n",string); 
  char cmd[100];
  bzero(cmd,100);
     
  
  /*火灾时发出的短信*/
     if(THIEF_INTO == type)
  {
   strcpy(cmd,send_thief);
  }
  
  /*盗贼进入时发出的短信*/
  
     if(FIRE == type)
  {
   strcpy(cmd,send_fire);
  }
   strcat(cmd,"\x1a");
     n = write(fd,cmd,strlen(cmd));
  sleep(2);
  /*查看网络注册*/
  printf("search the internet...............\n");
  write(fd,"AT+CREG=?\r",strlen("AT+CRGE=?\r"));
  sleep(2);
  bzero(string,sizeof(string));
  n = read(fd,string,50);
  printf("read AT+CRGE = %d\n",n);
  printf("read AT+CRGE =%s\n",string); /*拨号  ATD + 电话号码(别忘了加";")*/
  printf("call..................\n");
  write(fd,"ATD +8615510687037;\r",strlen("ATD +8615510687037;\r"));
  sleep(2);
  bzero(string,sizeof(string));
  n = read(fd,string,50);
  printf("read ATD = %d\n",n);
  printf("read ATD =%s\n",string);
 /* if(n < 0)
  {
   printf("send message error\n");
   return -1;
  }
  printf("write message = %d\n",n);
  printf("send end\n");
  sleep(1);
     close(fd);
 */    // pthread_mutex_unlock(&GPRS_lock);
  /*sleep(2);
  bzero(string,sizeof(string));
  n = read(fd,string,100);
  printf("read message %d\n",n);
  printf("read message =%s\n",string);
     */
  return 1;
 }
  FILE *fd;/* int main(void)
  {
   //FILE *fd;
   printf("11111111111\n");
      fd = open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY);
   printf("22222222222\n");
   set_opt(fd,9600,8,0,0);
   gprs(THIEF_INTO); 
   return 0;
  }
 *///测试代码

举报

相关推荐

0 条评论