#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"
//#include <afx.h>
#define ZIGBEE 3 //zigbee
/*
*函数功能:设置串口属性
*参数:
@fd: 串口文件描述符
@nSpeed: 比特率
@nBit: 有效位个数
@nEvent: 有无校验位
@nStop: 几位停止位
返回值:设置成功与否:
secuss:1
error: 0
* */
/*
unsigned long *f(char* str)
{
unsigned long *var;
unsigned long t;
int len = strlen(str);
if (*var > 8) //最长8位
return 1;
//strupr(str);//统一大写
toupper(str);
for (; *str; str++)
{
if (*str>='A' && *str <='F')
t = *str-55;//a-f之间的ascii与对应数值相差55如'A'为65,65-55即为A
else
t = *str-48;
*var<<=4;
*var|=t;
}
return var;
}
*/
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 38400:
printf("38400\n");
cfsetispeed(&newtio,B38400);
cfsetospeed(&newtio,B38400);
break;//之前漏写了这个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(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(8 == comport)
{
fd=open("/dev/ttyUSB0",O_RDWR|O_NOCTTY|O_NDELAY);
//fd=open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY);
//fd=open("/dev/tty",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("is a tty success \n");
printf("fd-open=%d\n",fd);
return (fd);
}
/*
int Ascii2Hex(const char *hex,char * ascii) //16进制转ASCII
{
int len = strlen(hex), tlen, i, cnt;
for (i = 0, cnt = 0, tlen = 0; i<len; i++)
{
char c = toupper(hex[i]);
if ((c>='0'&& c<='9') || (c>='A'&& c<='F'))
{
BYTE t = (c >= 'A') ? c - 'A' + 10 : c - '0';
if (cnt)
ascii[tlen++] += t, cnt = 0;
else
ascii[tlen] = t << 4, cnt = 1;
}
}
return tlen;
}*/
int gprs(int type)
{
int fd;
int pid;
char string[100];
int n = 0;
/*小偷进屋*/
char send_thief[100] = "0891683110102105F011000D91685115607830F70008000A5C0F50778FDB5C4BFF01";
/*家里着火*/
char send_fire[100] = "0891683110102105F011000D91685115607830F70008000A5bb691cc7740706bff01";
/*zigbee*/
unsigned char send_zigbee[] = {0x02,0x08,0xCB,0x01,0x00,0xD3,0x42,0x00,0x01,0x00,0x09};
// char send_zigbee[100]="";
// char send_zigbee[100]= "02 20 08 20 CB 20 01 20 00 20 D3 20 42 20 00 20 01 20 00 20 50";
// unsigned char send_zigbee[12]={(char)0X02,(char)0X08,(char)0XCB,(char)0X01,(char)0X00,(char)0XD3,(char)0X42,(char)0X00,(char)0X01,(char)0X00,(char)0X50,(char)0};
// char send_zigbee[100]= "50 00 01 00 42 D3 00 01 CB 08 02";
// unsigned char send_zigbee[1024]= {0X30,0X02,0X08,0XCB,0X01,0X00,0XD3,0X42,0X00,0X01,0X00,0X50};
// unsigned char send_zigbee[100]= {0X30,0X50,0X00,0X01,0X00,0X42,0XD3,0X00,0X01,0XCB,0X08,0X02};
// unsigned send_zigbee[100]= {0X30,0X02,0X08,0XCB,0X01,0X00,0XD3,0X42,0X00,0X01,0X00,0X50};
// (char)0x20 ASCII 码值 0x20H 就是 空格
// char send_zigbee[100]= {(char)0X50,(char)0X20,(char)0X00,(char)0X20,(char)0X01,(char)0X20,(char)0X00,(char)0X20,(char)0X42,(char)0X20,(char)0XD3,(char)0X20,(char)0X00,(char)0X20,(char)0X01,(char)0X20,(char)0XCB,(char)0X20,(char)0X08,(char)0X20,(char)0X02};
/*打开串口,并设置属性(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);*/
fd=open_port(fd,8);
set_opt(fd,38400,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);
// sleep(1);
// printf("read TYYS1=%d\n",n);
//printf("read AT=%s\n",string);
// printf("read zigbee=%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);
*/
// write(fd,send_zigbee,11);
// printf("ok\n");
unsigned char cmd[11];
// bzero(cmd,100);
/*火灾时发出的短信*/
if(THIEF_INTO == type)
{
strcpy(cmd,send_thief);
}
/*盗贼进入时发出的短信*/
if(FIRE == type)
{
strcpy(cmd,send_fire);
}
/*zigbee*/
if(ZIGBEE== type)
{
write(fd,send_zigbee,11);
strcpy(cmd,send_zigbee);//强大功能
//printf("ok\n");
}
/*
n = write(fd,0x02,1);
n = write(fd,0x08,1);
n = write(fd,0xCB,1);
n = write(fd,0x01,1);
n = write(fd,0x02,1);
n = write(fd,0xD3,1);
n = write(fd,0x42,1);
n = write(fd,0x00,1);
n = write(fd,0x01,1);
n = write(fd,0x00,1);
n = write(fd,0x09,1);*/
// }
//02 08 CB 01 00 D3 42 00 01 00 09
/*
char* out2=new char[strlen("0208CB0100D34200010009")/2];
int count=0;
for(char *s="0208CB0100D34200010009";strlen(s)>0;s+=2)
{
if(*s>='0' && *s<='9')
out2[count]=*s-'0';
else if(*s>='A'&& *s<='F')
out2[count]=*s-'A'+10;
if(strlen(s)>1)
{
out2[count]*=16;
if(*(s+1)>='0' && *(s+1)<='9') out2[count++]+=(*(s+1)-'0');
if(*(s+1)>='A'&& *(s+1)<='F') out2[count++]+=(*(s+1)-'A'+10);
write(fd,out2,13);
}
}
delete[] out2;
*/
// strcat(cmd,"\x1a");
// write(fd,cmd,11);
// write(fd,f("02 08 CB 01 00 D3 42 00 01 00 09"),12);
/*
printf(".................\n");
printf("发送cmd=%x\n",f(cmd));
// n = write(fd,&cmd[1],1);
printf("发送cmd=%x\n",f(cmd));
// n = write(fd,&cmd[2],1);
printf("发送cmd=%x\n",f(cmd));
// n = write(fd,&cmd[3],1);
printf("发送cmd=%x\n",f(cmd));
// n = write(fd,&cmd[4],1);
printf("发送cmd=%x\n",f(cmd));
// n = write(fd,&cmd[5],1);
printf("发送cmd=%x\n",f(cmd));
// n = write(fd,&cmd[6],1);
printf("发送cmd=%X\n",f(&cmd[6]));
// n = write(fd,&cmd[7],1);
printf("发送cmd=%X\n",f(&cmd[7]));
// n = write(fd,&cmd[8],1);
printf("发送cmd=%X\n",f(&cmd[8]));
// n = write(fd,&cmd[9],1);
printf("发送cmd=%X\n",f(&cmd[9]));
// n = write(fd,&cmd[10],1);
printf("发送cmd=%X\n",f(&cmd[10]));
// n = write(fd,&cmd[11],1);
printf("发送cmd=%X\n",f(&cmd[11]));*/
// n = write(fd,cmd[12],strlen(cmd[12]));
// printf("发送cmd=%X\n",cmd[12]);
// n = write(fd,cmd,strlen(cmd));
// printf(".................\n");
/*
printf(".................begin\n");
/*
unsigned char a=0x02;
n = write(fd,a,1);
unsigned char b=0x08;
n = write(fd,b,1);
unsigned char c=0xCB;
n = write(fd,c,1);
unsigned char d=0x01;
n = write(fd,d,1);
unsigned char e=0x00;
n = write(fd,e,1);
unsigned char f=0xD3;
n = write(fd,f,1);
unsigned char g=0x42;
n = write(fd,g,1);
unsigned char h=0x00;
n = write(fd,h,1);
unsigned char i=0x01;
n = write(fd,i,1);
unsigned char j=0x00;
n = write(fd,j,1);
unsigned char k=0x09;*/
/*
unsigned char a=f("02");
int j;
j=write(fd,&a,2);
printf("%X\n", f("02"));
unsigned char b=f("08");
write(fd,&b,2);
printf("%X\n", f("08"));
unsigned char c=f("CB");
write(fd,&c,2);
printf("%X\n", f("CB"));
unsigned char d=f("01");
write(fd,&d,2);
printf("%X\n", f("01"));
unsigned char e=f("00");
write(fd,&e,2);
printf("%X\n", f("00"));
unsigned char l=f("D3");
write(fd,&l,2);
printf("%X\n", f("D3"));
unsigned char g=f("42");
write(fd,&g,2);
printf("%X\n", f("42"));
unsigned char h=f("00");
write(fd,&h,2);
printf("%X\n", f("00"));
unsigned char i=f("01");
write(fd,&i,2);
printf("%X\n", f("01"));
unsigned char m=f("00");
write(fd,&m,2);
printf("%X\n", f("00"));
unsigned char k=f("09");
write(fd,&k,2);
printf("%X\n", f("09"));
write(fd,"ok",2);*/
/* int x;
x=write(fd,"hello world!\r",12);
printf(".................end\n");
/*
unsigned char *i=0x02;;
//*i=0x02;
strcat(cmd,&i);
n = write(fd,cmd,1);
printf("发送cmd=%x\n",cmd[0]);
*i=0x08;
strcat(cmd,&i);
n = write(fd,cmd,1);
printf("发送cmd=%x\n",cmd[1]);
*i=0xcb;
strcat(cmd,&i);
n = write(fd,cmd,1);
printf("发送cmd=%x\n",cmd[2]);
*i=0x01;
strcat(cmd,&i);
n = write(fd,cmd,strlen(cmd));
printf("发送cmd=%x\n",cmd[3]);
*i=0x00;
strcat(cmd,&i);
n = write(fd,cmd,strlen(cmd));
printf("发送cmd=%x\n",cmd[4]);
*i=0xd3;
strcat(cmd,&i);
n = write(fd,cmd,strlen(cmd));
printf("发送cmd=%x\n",cmd[5]);
*i=0x42;
strcat(cmd,&i);
n = write(fd,cmd,strlen(cmd));
printf("发送cmd=%x\n",cmd[6]);
*i=0x00;
strcat(cmd,&i);
n = write(fd,cmd,strlen(cmd));
printf("发送cmd=%x\n",cmd[7]);
*i=0x01;
strcat(cmd,&i);
n = write(fd,cmd,strlen(cmd));
printf("发送cmd=%x\n",cmd[8]);
*i=0x00;
strcat(cmd,&i);
n = write(fd,cmd,strlen(cmd));
printf("发送cmd=%x\n",cmd[9]);
*i=0x09;
strcat(cmd,&i);
n = write(fd,cmd,strlen(cmd));*/
/* int j=0;
for(j=0;j<11;j++)
{
printf("发送cmd=%x\n",(cmd[j]));
write(fd,cmd[j],strlen(cmd[j]));
}
*/
//printf("发送cmd=%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n",cmd[0],cmd[1],cmd[2],cmd[3],cmd[4],cmd[5],cmd[6],cmd[7],cmd[8],cmd[9],cmd[10]);
/*
printf("发送cmd=%x\n",cmd[0]);
printf("发送cmd=%x\n",cmd[1]);
printf("发送cmd=%x\n",cmd[2]);
printf("发送cmd=%x\n",cmd[3]);
printf("发送cmd=%x\n",cmd[4]);
printf("发送cmd=%x\n",cmd[5]);
printf("发送cmd=%x\n",cmd[6]);
printf("发送cmd=%x\n",cmd[7]);
printf("发送cmd=%x\n",cmd[8]);
printf("发送cmd=%x\n",cmd[9]);
printf("发送cmd=%x\n",cmd[10]);*/
// n = write(fd,send_zigbee,strlen(send_zigbee));
/*int CSerialPortTestDlg::Str2Hex(CString str, char* data)
{
int t, t1;//int hexData, lowhexData;
int rlen=0, len=str.GetLength();
//data.SetSize(len/2);
for(int i=0; i<len; )//注意循环条件
{
char lstr, hstr = str[i];//获得地址的高8位和低8位
if(hstr ==' ')
{
++i;
continue;
}
i++;
if(i>=len)
break;
lstr= str[i];
t = HexChar(hstr);
t1= HexChar(lstr);
if((t==16)|| (t1==16))
break;
else
t= t*16+t1;
++i;
data[rlen]= (char)t;
++rlen;
}*/
// CString zigbee;
// zigbee("02 08 CB 01 00 D3 42 00 01 00 09");
// int len = Str2Hex(str_Message, data);
// n = write(fd,zigbee,strlen(zigbee));
// printf("发送send_zigbee=%x\n",send_zigbee);
// n = write(fd,send_zigbee,strlen(send_zigbee));
// unsigned char Buffer[1024];
// unsigned char *src_buf;
// src_buf = Buffer;
// Buffer[0]=0x02;
// Buffer[1]=0x20;
// Buffer[1]=0x08;
// Buffer[3]=0x20;
// Buffer[2]=0xCB;
// Buffer[5]=0x20;
// Buffer[3]=0x01;
// Buffer[7]=0x20;
// Buffer[4]=0x00;
// Buffer[9]=0x20;
// Buffer[5]=0xD3;
// Buffer[11]=0x20;
// Buffer[6]=0x42;
// Buffer[13]=0x20;
// Buffer[7]=0x00;
// Buffer[15]=0x20;
// Buffer[8]=0x01;
// Buffer[17]=0x20;
// Buffer[9]=0x00;
// Buffer[19]=0x20;
// Buffer[10]=0x50;
// Buffer[21]=0x00;
// j=write(fd,Buffer,11);
// printf("发送Buffer=%x\n",Buffer);
// printf("---------------------------\n");
/* if (x == -1)
{
printf("write operation is error!\n");
}
*/
/*
strcat(cmd1,(char)0X02);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0X08);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0XCB);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0X01);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0X00);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0XD3);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0X42);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0X00);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0X01);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0X00);strcat(cmd1,(char)0X20);
strcat(cmd1,(char)0X50);*/
// write(fd,cmd1,strlen(cmd1));
// printf("发送cmd=%s,datalength=%d\n",cmd1,strlen(cmd1));
/*
write(fd,0x02,strlen(0X02));
write(fd,0x08,strlen(0X08));
write(fd,0xCB,strlen(0XCB));
write(fd,0x01,strlen(0X01));
write(fd,0X00,strlen(0X00));
write(fd,0XD3,strlen(0XD3));
write(fd,0X42,strlen(0X42));
write(fd,0X00,strlen(0X00));
write(fd,0X01,strlen(0X01));
write(fd,0X00,strlen(0X00));
write(fd,0X50,strlen(0X50));*/
// 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);
*/
close(fd);
return 0;
}
int main(void)
{
//gprs(FIRE);
gprs(ZIGBEE);
//gprs(THIEF_INTO);
return 0;
}