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

📄 gprs.c

📁 一个gprs通讯的数个 at命令封装
💻 C
字号:
#include <termios.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#include     "serial.h"
#include     "gprs.h"

#define FALSE  0#define TRUE   1volatile int fd; //串口设备文件描述
////////////////////////////////////////////////////////////////////////// Test main()//
#if 1   #define ENDMINITERM 27 /* ESC to quit miniterm */volatile int STOP=FALSE;void child_handler(int s);void* keyboard(void * data);void* receive(void * data);void* send(void * data);int main(int argc,char** argv){		struct sigaction sa;	int ok; 	pthread_t th_a, th_b, th_c; 	void * retval;		char number[12]={'1','3','5','8','9','0','4','3','0','4','4','\0'};  	  	GPRS_Init();  	sa.sa_handler = child_handler;  	sa.sa_flags = 0;  	sigaction(SIGCHLD,&sa,NULL); /* handle dying child */	usleep(200000);//	GPRS_MGS(number,"Hello! SDU !");//发短信//	GPRS_CALL("13589043044");      //拨号//	GPRS_HOLD();	             //挂机  	pthread_create(&th_a, NULL, keyboard, 0);  	pthread_create(&th_b, NULL, receive, 0);  	pthread_create(&th_c, NULL, send, 0);// 测试连续发"at\n"明令  	pthread_join(th_a, &retval);  	pthread_join(th_b, &retval);  	pthread_join(th_c, &retval);  	  	close(fd);  	exit(0); }void child_handler(int s){  printf("stop!!!\n");   STOP=TRUE;}void* keyboard(void * data){    int c;    c=getchar();    STOP=TRUE;    return NULL;}void* receive(void * data){	int c;  	  	while (STOP==FALSE)   	{           printf("%c",c);  /* 向标准输出打印字符 */    	   read(fd,&c,1);  /* com port */        }  	  	return NULL; }void* send(void * data){	usleep(200000);  	while (STOP==FALSE) /* modem input handler */  	{    	  sleep(1);	    	  GPRS_Cmd("at\n");    	  	}  	return NULL; }#endif//// Test main()////////////////////////////////////////////////////////////////////////
void GPRS_Init()
{  fd = OpenDev(COM1);    set_speed(fd,115200);	//设置开发平台的串口2波特率  if (set_Parity(fd,8,1,'N') == FALSE)  {		printf("Set Parity Error\n");		exit (0);  }   usleep(200000);  
  GPRS_Cmd("AT\n");   

//下面选择通道1,使用带麦克的耳机
  GPRS_Cmd("AT+CHFA=1\n"); //设置通话通道为1
  usleep(200000);
  GPRS_Cmd("AT+CLVL=100\n");//设置受话器音量最大
  usleep(200000);
  GPRS_Cmd("AT+CMIC=1,10\n");//设置通道1的话筒增益
  usleep(200000);

//下面选择通道0,使用普通电话话柄
/*
  GPRS_Cmd("AT+CHFA=0\n"); //设置通话通道为0
  usleep(200000);
  GPRS_Cmd("AT+CLVL=100\n");//设置受话器音量最大
  usleep(200000);
  GPRS_Cmd("AT+CMIC=0,10\n");//设置通道0的话筒增益
  usleep(200000);
*/

}

void GPRS_HOLD()
{ GPRS_Cmd("AT\n");
 usleep(200000);
 GPRS_Cmd("ATH\n");//发送挂机命令ATH
}

void GPRS_ANSWER()
{ GPRS_Cmd("AT\n");
  usleep(200000);
  GPRS_Cmd("ATA\n");//发送接听命令ATA
}

void GPRS_CALL(char *number)
{ 
  GPRS_Cmd("AT\n");
  usleep(200000);
  GPRS_Cmd("ATD"); //发送拨打命令ATD
  GPRS_Cmd(number);
  GPRS_Cmd(";\n");
}


void GPRS_MGS(char *number,char *text) //发送短信
{  char chOverflag[1];
 GPRS_Cmd("AT+CMGF=1\n"); //发送修改字符集命令
 sleep(1);
 GPRS_Cmd("AT+CMGS="); //发送发短信命令,具体格式见手册
 GPRS_Cmd(number);
 GPRS_Cmd("\n");
 usleep(100000);
 GPRS_Cmd(text); chOverflag[0]=26;	  //“CTRL+Z"的ASCII码 write(fd,&(chOverflag[0]),1); 
}

void GPRS_Cmd(char *pt)//串口发送命令字符串
{ int i=0;
 char ch[1];
 while(1){         
	 if(pt[i]=='\0')break;
	 if(pt[i]=='\n'){
		 ch[0]='\r';
		 write(fd,ch,1);//如果遇到"\n",额外发送"\r"
	 }
     write(fd,&(pt[i]),1);     
     
     //if (ch[0]=='\r')LCD_printf("\n");     //液晶屏直接输出,直接转换'\r'为'\n'
     //else  LCD_printf("%c",ch[0]);      //液晶屏输出
     i++;
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -