/***************************************************************************************
*文件名 :GPRS.c
*描述 : GPRS模块(ME3620)应用函数
*硬件平台:CS202(ZTE ME3620)
*软件版本:1.0.0
*编写者:
*时间 : 2016/5/5
*****************************************************************************************/
#include"GPRS.h"
/*
* 函数名:GPRS_LED_CONTROL
* 描述:GPRS的状态指示灯
* 参数:NetState:网络状态,Signal:GPRS信号
* */
void GPRSLedControl(char NetState,char Signal,char SIM)
{
static char State = 0;
static char State1 = 0;
if(NetState == 55 && Signal == 55 && SIM == 55){
system("/opt/bin/gpio 2 14 0");
}
if(NetState == 1 && Signal > 3){
system("/opt/bin/gpio 2 14 1");
}else{
//无SIM卡快闪
if(SIM == 0){
if(State1 ++ <= 2){
system("/opt/bin/gpio 2 14 0");
}else if(State1 >= 2 && State1 <= 4){
system("/opt/bin/gpio 2 14 1");
if(State1 >= 4) {State1 = 0;}
}else {State1 = 0;}
//信号弱慢闪
}else if(Signal <= 3 && Signal != 55){
if(State ++ <= 30){
system("/opt/bin/gpio 2 14 0");
}else if(State >= 30 && State <= 60){
system("/opt/bin/gpio 2 14 1");
if(State >= 60){State = 0;}
}else{State = 0;}
}
}
}
/*
*函数名:GPRSShmDataSet
*描述:将GPRS的相关数据记录到共享内存中
*输入:GPRSdata:选择要记录的内容,value:记录值
*输出:无
*调用:外部调用
*/
void GPRSShmDataSet(enum GPRS GPRSdata, int value){
struct GpsAndPppdSturct writeappend,*readappend;
readappend = hns_read_shmappend();
memcpy(&writeappend,readappend,sizeof(struct GpsAndPppdSturct));
if(GPRSdata == 1)
writeappend.pppdflag = value;
else if(GPRSdata == 2)
writeappend.signal = value;
else if(GPRSdata == 3)
writeappend.SIMok = value;
else if(GPRSdata == 4)
writeappend.netconnection = value;
hns_write_shmappend(writeappend);
}
/*
*函数名:GPRSUartClose
*描述:关闭文件
*输入:fdcom:设备号
*输出:
*调用:外部调用
*/
int GPRSUartClose(int fdcom){
if(close(fdcom) ==-1){
printf("关闭串口失败\n");
}
return 1;
}
/*
*函数名:GPRSUartInit
*描述:串口初始化
*输入:相应的串口名称
*输出:文件描述符
*调用:外部调用
*/
int GPRSUartInit(void *p){
int fd;
fd = Initial_SerialPort(p); //AT指令设置口进行初始化
return fd;
}
/*
*函数名:GPRSPowrOFFON
*描述: 启动GPRS模块
*输入:无
*输出:
*调用:外部调用
*/
int GPRSPowrOFFON(void){
system("/opt/bin/gpio 3 15 0");
sleep(1);
system("/opt/bin/gpio 3 15 1");
sleep(1);
system("/opt/bin/gpio 3 15 0");
sleep(1);
return 1;
}
/*
*函数名:GPRSReset
*描述:复位GPRS模块
*输入:无
*输出:
*调用:外部调用
*/
int GPRSReset(void){
system("/opt/bin/gpio 3 7 0");
sleep(1);
system("/opt/bin/gpio 3 7 1");
sleep(1);
system("/opt/bin/gpio 3 7 0");
sleep(1);
return 1;
}
/*
*函数名:AT_SET_Function
*描述:GPRS模块AT指令的设置与返回查询
*输入:*AT_Comand:AT指令,a[]:输入数值
*输出:
*调用:外部调用
*/
static int AT_SET_Function(char *AT_Command,int fd,char a[]){
int Length=0,res=0;
tcflush(fd,TCIFLUSH); //情况串口缓存区
//写入数据
Length = strlen(AT_Command);
if((res = write(fd,AT_Command,Length)) != Length){
printf("set %s Error\n",AT_Command);
return 0;
}else
;//printf("set %s OK\n",AT_Command);
usleep(10000);
//读取串口返回的数据
memset(a, 0, sizeof(a));//清除接收缓存
Length = PortRecv(fd, a, 100, 115200); //读取串口信息
if (Length>0){
Length=0;
//printf("string = %s\n",a);
}else{
printf("无返回数据\n");
return 0;
}
return 1;
}
/*
*函数名:GPRSModuleCheckAndInitial
*描述: 检测GPRS模块是否识别到,并打开相应的串口
*输入:*p:GPRS的相关变量指针
*输出:
*调用:外部调用
*/
int GPRSModuleCheckAndInitial(struct GPRS_Para *p){
struct GPRS_Para *pp = p;
int i=0,m = 0;
//判断GPRS是否被系统识别到
while(access(SERIAL_DEV1,F_OK) != 0){
printf("GPRS模块启动中.....\n");
GPRSPowrOFFON();//模块上电
while(access(SERIAL_DEV1,F_OK) != 0){
sleep(1);
m++;
if(m >= 60){
printf("识别不到GPRS模块\n");
m = 0;
return 0;
}
}
if(i++ >= 5){
i = 0;
hns_add_log("dialctl",__FILE__,__LINE__,"打开GPRS模块串口失败\n");
}
}
sleep(1);
printf("识别到GPRS模块\n");
//打开GPRS模块串口
if((pp->ttyUSB1_fd = GPRSUartInit(SERIAL_DEV1)) == 0){
hns_add_log("dialctl",__FILE__,__LINE__,"打开GPRS模块串口失败\n");
return 0;
}
#if 0
if((pp->ttyUSB0_fd = GPRSUartInit(SERIAL_DEV0)) == 0){
hns_add_log("dialctl",__FILE__,__LINE__,"打开GPRS模块串口0失败\n");
return 0;
}
#endif
hns_add_log("dialctl",__FILE__,__LINE__,"打开GPRS模块串口成功\n");
return 1;
}
/*
*函数名:ChecknetWork
*描述:检测是否已经分配到相应的IP(能否上网)
*输入:无
*输出:
*调用:外部调用
*/
#if 0
static int ChecknetWork(void){
FILE *stream;
char buf[1024];
memset(buf, '\0',sizeof(buf));
stream = popen("ifconfig usb0","r");
fread(buf,sizeof(char),sizeof(buf),stream);
//printf("putstring = %s",buf);
if(strstr(buf,"inet addr")!=NULL){
//printf("**********************\n");
return 1;
}else{
//printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
return 0;
}
return 1;
}
#endif
/*
*函数名:GPRSStateSet
*描述:设置GPRS模块参数
*输入:*p:GPRS的相关变量指针
*输出:
*调用:外部调用
*/
int GPRSStateSet(struct GPRS_Para *p){
struct GPRS_Para *GPRS_1 = p;
char RecvBuf[1024] ={0};
/***********************读取GPRS配置文件**********************************************/
read_gprs_conf(GPRS_1);
sprintf(GPRS_1->GPRS_DialPara,"%s %s %s %s &",DIALCOMMAND,GPRSPara.GPRS_APN,GPRSPara.GPRS_UserName,GPRSPara.GPRS_UsernamePasswer);
printf("GPRSPara.GPRS_APN=%s\n",GPRS_1->GPRS_APN);
printf("GPRSPara.GPRS_UserName=%s\n",GPRS_1->GPRS_UserName);
printf("GPRSPara.GPRS_UsernamePasswer=%s\n",GPRS_1->GPRS_UsernamePasswer);
printf("GPRSPara.GPRS_PingIp1=%s\n",GPRS_1->GPRS_PingIp1);
printf("GPRSPara.GPRS_PingIp2=%s\n",GPRS_1->GPRS_PingIp2);
printf("GPRSPara.GPRS_DialPara=%s\n",GPRS_1->GPRS_DialPara);
/***********************读取GPRS配置文件**********************************************/
/***********************设置GPRS参数**************************************************/
AT_SET_Function("AT+QCFG=\"band\",0,0,2\r\n",GPRS_1->ttyUSB1_fd,RecvBuf);//关闭移动3g
system(GPRS_1->GPRS_DialPara);//NDIS
/***********************设置GPRS参数**************************************************/
sleep(15);
return 1;
}
/*
*函数名:GPRSStateCheck
*描述:GPRS模块状态的检测
*输入:*p:GPRS的相关变量指针
*输出:
*调用:外部调用
*/
int GPRSStateCheck(struct GPRS_Para *pp){
char *p;
int temp;
char buf[1024];
char RecvBuf[1024];
static char one=0, two=0,three=0,four=0,five=0,six=0;
char SIMCheckFlag = 0;
struct GPRS_Para *GPRS_1 = pp;
/***************查询GPRS模块的相应参数********
- 1
- 2
前往页