📄 gprs.c
字号:
#include "inc.h"
#define _GPRS_BAUDRATE B9600
char *COM[] = {"/dev/tty2550S0","/dev/tty2550S0",
"/dev/tty2550S0","/dev/tty2550S0"}; //USE index get the serial's file
/**********************************************************************************************
This function is called before recall ppp dial,the function will put the TermID string
into the buffer pointed by TermID.
***********************************************************************************************
***/
void GPRS_Com_Init(int GPSfd)
{
struct termios GPStio;
if (GPSfd < 0)
{
perror("Cann't open KeyB Com!");
exit(-1);
}
bzero(&GPStio, sizeof(GPStio));
GPStio.c_cflag = _GPRS_BAUDRATE | CS8 | CLOCAL | CREAD;
GPStio.c_iflag = IGNPAR ;// | IGNCR ;//| INLCR;
GPStio.c_oflag = 0;
GPStio.c_lflag = ICANON;
tcflush(GPSfd, TCIOFLUSH);
fcntl(GPSfd,F_SETFL,0);
tcsetattr(GPSfd,TCSANOW,&GPStio);
}
void GPRS_ShutDown(void)
{
int fd;
int ComIndex;
ComIndex = atol(IniLoad("GPRS","ComIndex","0"));
fd = open(COM[ComIndex],O_RDWR | O_NOCTTY | O_NDELAY );
GPRS_Com_Init(fd);
write(fd,"AT+CFUN=0\r\n",11);
sleep(1);
close(fd);
}
int GPRS_Reset(void)
{
int fd;
int ComIndex;
int ComStatus;
int retr,ncount;
fd_set readfds,writefds,exceptfds;
struct timeval tvptr;
char buf[1024];
char *substring;
ComIndex = atol(IniLoad("GPRS","ComIndex","0"));
fd = open(COM[ComIndex],O_RDWR | O_NOCTTY | O_NDELAY );
GPRS_Com_Init(fd);
ioctl(fd,TIOCMGET,&ComStatus);
// printf("Set up DTR!\r\n");
ComStatus = ComStatus + (TIOCM_DTR^(TIOCM_DTR&ComStatus));
ioctl(fd,TIOCMSET,&ComStatus);
sleep(2);
// printf("Set Down DTR!\r\n");
ComStatus &= ~TIOCM_DTR;
ioctl(fd,TIOCMSET,&ComStatus);
sleep(2);
GPRS_Com_Init(fd);
// printf("Set up DTR!\r\n");
ComStatus = ComStatus + (TIOCM_DTR^(TIOCM_DTR&ComStatus));
ioctl(fd,TIOCMSET,&ComStatus);
tvptr.tv_sec = 5;
tvptr.tv_usec = 0;
FD_ZERO(&readfds);
FD_ZERO(&exceptfds);
FD_SET(fd,&readfds);
FD_SET(fd,&exceptfds);
FD_ZERO(&writefds);
while(1)
{
write(fd,"AT\r\n",4);
MB_DEB(" write com AT ");
retr = select(fd+1,&readfds,&writefds,&exceptfds,&tvptr);
memset(buf,0,sizeof(buf));
if(retr==-1)
{
printf("GPRS Com error!\r\n");
if (errno==EINTR) //select is interrupted by signal
{
return -1;
}
else
{
perror("cann't select GPRS Com!");
}
return -1;
}
else if(retr==0)
{//select over time,no more gprs data in
printf("GPRS Com reset Over time error!\r\n");
return -1 ;
}
else
{
if (FD_ISSET(fd,&readfds))
{
read(fd,buf,sizeof(buf));
MB_DEB("fd rcv %s!",buf);
if((substring = strstr(buf,"OK"))!=NULL) //find "OK"
{
return 0;
}
else if((substring = strstr(buf,"ERROR"))!=NULL) //find "ERROR"
{
break;
}
}
if (FD_ISSET(fd,&exceptfds))
{
break;
}
}
}
close(fd);
printf("Before return!");
return -1;
}
void GPRS_GetTermID(char *TermID)
{
int fd;
int ComIndex;
int retr,ncount;
fd_set readfds,writefds,exceptfds;
struct timeval tvptr;
char buf[1024];
char *substring;
ComIndex = atol(IniLoad("GPRS","ComIndex","0"));
fd = open(COM[ComIndex],O_RDWR | O_NOCTTY | O_NDELAY );
GPRS_Com_Init(fd);
tvptr.tv_sec = 5;
tvptr.tv_usec = 0;
FD_ZERO(&readfds);
FD_ZERO(&exceptfds);
FD_SET(fd,&readfds);
FD_SET(fd,&exceptfds);
FD_ZERO(&writefds);
while(1)
{
write(fd,"AT+CIMI\r\n",9);
retr = select(fd+1,&readfds,&writefds,&exceptfds,&tvptr);
memset(buf,0,sizeof(buf));
if(retr==-1)
{
printf("GPRS Com error!\r\n");
if (errno==EINTR) //select is interrupted by signal
{
return;
}
else
{
perror("cann't select GPRS Com!");
}
return ;
}
else if(retr==0)
{//select over time,no more gprs data in
printf("GPRS Com GetID Over time error!\r\n");
return ;
}
else
{
if (FD_ISSET(fd,&readfds))
{
read(fd,buf,sizeof(buf));
if((substring = strstr(buf,"OK"))!=NULL) //find "OK"
{
continue;
}
else if((substring = strstr(buf,"460"))!=NULL) //find "460"
{
strcpy(TermID,substring+3);
break;
}
else if((substring = strstr(buf,"ERROR"))!=NULL) //find "ERROR"
{
break;
}
}
if (FD_ISSET(fd,&exceptfds))
{
break;
}
}
}
close(fd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -