⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gprs.c

📁 基于嵌入式linux下
💻 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 + -