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

📄 gprs.c

📁 minigui PDA系统 可实现手机功能
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

#include "tty.h"
#include "gprs.h"
#include "../common.h"
#include "../tel/tel.h"
#include "../tel/call_time.h"
#include "../telbook/telbook.h"

//==============================================================
static int GetComma(int num,char *str)
{
	int i,j=0;
	int len=strlen(str);//总串长度
	for(i=0;i<len;i++)
	{
		if(str[i]==',') j++;//逗号个数
		if(j==num)return i+1;//逗号后第一个字符下标	
	}
	return 0;	
}

//gprs初始化:设置音频通道、输出音频信号增益、话筒增益
void gprs_init()
{
	tty_writecmd("at", strlen("at"));
	
	//设置回显:ate1,回显
	tty_writecmd("ate1", strlen("ate1"));             
	
	//设置音频通道:1,副音频通道
	tty_writecmd("at+chfa=1", strlen("at+chfa=1"));
	
	//设置输出音频信号增益:100,最大音量
	tty_writecmd("at+clvl=100", strlen("at+clvl=100"));
	
	//设置通道1的话筒增益:10,最大增益
	tty_writecmd("at+cmic=1,10", strlen("at+cmic=1,10")); 
	
	//来电显示:1,显示
	tty_writecmd("at+clip=1", strlen("at+clip=1"));
	
	//初始化短信的格式为文本格式
	tty_writecmd("AT+CMGF=1", strlen("AT+CMGF=1"));
	
	//选择ADN 电话 本 (即SM 自动拨号电话本)
	tty_writecmd("at+cpbs=\"SM\" ",strlen("at+cpbs=\"SM\" "));
}

//==============================================================
//拨打电话
void gprs_call(char *number, int num)
{
	tty_writecmd("at", strlen("at"));
	
	//发送拨号命令ATD
	tty_write("atd", strlen("atd"));
	
	//发送电话号码
	tty_write(number, num);
	
	//发送分号和命令结束标志
	tty_write(";\r", strlen(";\r"));
	
	usleep(200000);
}

//==============================================================
//接听电话
void gprs_ans()
{
	tty_writecmd("at", strlen("at"));
	
	//发送接听命令ATA
	tty_writecmd("ata", strlen("ata"));
}

//==============================================================
//挂断电话
void gprs_hold()
{
	tty_writecmd("at", strlen("at"));
	
	//发送挂机命令ATH
	tty_writecmd("ath", strlen("ath"));
}
void * gprs_read ()
{
//-------------------------------------
//
//----------------------------------通讯
	//这几个变量是语音通讯用的
	static char c;	
	static char respond_cond[5];
	int i = 12;
	char index[3];
	int  SNM_Flag = 0;
    char cFlag;
	char buf[10];
    char ComingNum[20];
    char *PhoneNum;	 
    
    //这几个变量是SIM卡电话本用的
    char buffer[1024];
	int n=0,j=0,k=0;
	char ch;
	char name[50];
	char num[20];
	char size[5]="";
//	tty_writecmd("at", strlen("at"));
    while (STOPGPRS == FALSE) 
    {
    	 tty_read(&cFlag,1);
	 	 	  printf("%c",cFlag);
	 	 	  
	 	    if(cFlag == 'R')
	 	    {
	 	        tty_read(buf, 3);
            buf[3] = '\0';
       
	 	    	  if( strcmp(buf, "ING") == 0 && CALL_ANS == 0)//对方来电并且己方没有接听
	 	   		  {
	 	   		      SNM_Flag = 1;     //发送MSG_RING消息标志
            }
	 	    }
	 	    
	 	    if(cFlag == 'N')
	 	    {
	 	        tty_read(buf, 9);
	 	        buf[9] = '\0';
	 	        
	 	        if( strcmp(buf, "O CARRIER") == 0 )
	 	        {
	 	            if( CALL_NOCARRIER == 1 ) //我去电对方关闭
	 	            {
	 	            	  SendNotifyMessage (hAnswering,MSG_RING_HOLD1,0,0L);
	 	            	  CALL_NOCARRIER = 0;
	 	            }
	 	            else if( CALL_NOCARRIER == 2 )  //通话中对方关闭
	 	            {
	 	            	  SendNotifyMessage (hAnswering,MSG_RING_HOLD2,0,0L);
	 	            	  CALL_NOCARRIER = 0;
	 	            }
	 	            else                 //对方来电话对方关闭
	 	            {
	 	            	  SendNotifyMessage (hCallingWnd,MSG_RING_HOLD,0,0L);
	 	            }			    	
	 	        }
	 	    }

		if ( cFlag == '+' )	
		{		
			tty_read ( respond_cond, 4 );		
			respond_cond[4] = '\0';		
			printf ("%s", respond_cond);

			if( strcmp(respond_cond, "CLIP") == 0 && SNM_Flag == 1 )
			{    
				tty_read(ComingNum, 19);
				ComingNum[19] = '\0';
                               
				PhoneNum = (char *)strtok(ComingNum, "\"");
				PhoneNum = (char *)strtok(NULL, "\"");
				strcpy(tel_num,PhoneNum);
	               
				SendNotifyMessage (MainWindow,MSG_RING,0,0L);
				printf("%s\n",tel_num);
				SNM_Flag = 0;		
			}
			printf ("\n");
		
			
			//短信的
			if ( strcmp ( respond_cond, "CMTI" ) == 0 )		
			{
				while (c != ',')
				{
					tty_read( &c, 1 );
				}
			
				tty_read( &c, 1 );
				printf ("\n");
				printf ("**************************\n");
				tty_read( index, 2 );
				index[2] = '\0';
				printf ("%s\n",index);

				msg_read(index);
				msg_analysis ();
				msg_del(index);

				smsAlarm();
			
			}
			
			//SIM卡电话本的
			if(strcmp(respond_cond,"CPBR")==0)
				{
				tty_read(buffer,3);
				if(buffer[2]=='(')//sim卡存储大小
					{
					tty_read(buffer,10);
					n=0;
					while(buffer[n]!='-') n++;
					for(k=0,j=n+1;buffer[j]!=')';j++,k++)					
						size[k]=buffer[j];
					size[k]='\0';
					printf("size=%s\n",size);
					tty_write("at+cpbr=1,",strlen( "at+cpbr=1,"));
					tty_writecmd(size,strlen( size));
					}
				else//Sim电话本信息
					{
				tty_read(&ch,1);
				do{n=0;
				while(ch!='\n')//每次读+后一条信息
				{	buffer[n]=ch;
					tty_read(&ch,1);
					n++;
				}
				buffer[n]='\0';
				n=GetComma(1, buffer);//通过分割读取号码
				for(k=0,j=n+1;buffer[j]!='\"';j++,k++)
					num[k]=buffer[j];
				num[k]='\0';
				n=GetComma(3, buffer);//读出姓名
				for(k=0,j=n+1;buffer[j]!='\"';j++,k++)
					name[k]=buffer[j];
				name[k]='\0';
				printf("name=%s,num=%s\n",name,num);
				tty_read(&ch,1);//虑过'\r'
				tty_read(&ch,1);//下一个'+'
				strcat(name,"          ");
				strcat(name,num);
				SendDlgItemMessage (hWnd_Tel,IDM_LIST, LB_ADDSTRING, 0, (LPARAM)name); 
					}while(ch=='+');
				}
			}	
		}
    }
}


⌨️ 快捷键说明

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