📄 gprs.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 + -