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

📄 check_gsm.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 5 页
字号:

	//1,IP地址有效果,并且2,TCP的开关量是否开启
	if( (gGeneral_Flag&TCP_IP_VALID_1)&&((gON_OFF_Temp0&TCP_LAND_ON_OFF_1)==0) )
	{
		if( (gCycle_TCP>0)&&(gCycle_Send_Status!=ALARM_DATA)&&(gCycle_Send_Status!=PASS_DATA) )
		{
			gCycle_Send_Status=TRACK_DATA_TIME;
		}
		else if( (gCycle_TCP==0)&&(gCycle_Send_Status==TRACK_DATA_TIME))
		{
			gCycle_Send_Status=NOP_DATA;
		}
	}
	//1,IP地址无效,或者TCP的开关量关闭
	else
	{
		if( (gCycle_GSM>0)&&(gCycle_Send_Status!=ALARM_DATA)&&(gCycle_Send_Status!=PASS_DATA) )
		{
			gCycle_Send_Status=TRACK_DATA_TIME;
		}
		else if( (gCycle_GSM==0)&&(gCycle_Send_Status==TRACK_DATA_TIME))
		{
			gCycle_Send_Status=NOP_DATA;
		}
	}
}
/********************************************************\
*	函数名:Pass_Data_Echo()
	作用域:本地文件调用
*	功能:	接收到下行的查询历史轨迹的命令
			将需要查询的历史轨迹的起始时间附给变量Check_Track_Time_Start
			将需要查询的历史轨迹的结束时间附给变量Check_Track_Time_end
			然后设置有需要进行历史轨迹操作的标志位 gInternal_Flag|=PASS_DATA_F_1

*	参数:  无
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:这个时候需要处理的gGeneral_Buffer[]缓冲中的数据
				SMS_ACK[TRACK_ASKECHO_ACK]=gGeneral_Buffer[5]   存储ACK


\********************************************************/
void Pass_Data_Echo(void)
{
	
	unsigned int i=0;
	//存储发送历史轨迹的开始的ACK
	gSMS_ACK[TRACK_ASKECHO_ACK]=gGeneral_Buffer[5];
	//存储计算历史轨迹的开始时间
	gCheck_Track_Time_Start=0;
	gCheck_Track_Time_Start= ( (gGeneral_Buffer[10]%100)/10*16+ (gGeneral_Buffer[10]%10)  );
	gCheck_Track_Time_Start <<= 8;
	gCheck_Track_Time_Start += ( (gGeneral_Buffer[11]%100)/10*16+ (gGeneral_Buffer[11]%10) );
	gCheck_Track_Time_Start <<= 8;
	gCheck_Track_Time_Start += ( (gGeneral_Buffer[12]%100)/10*16+ (gGeneral_Buffer[12]%10) );
	gCheck_Track_Time_Start <<= 8;
	gCheck_Track_Time_Start += ( (gGeneral_Buffer[13]%100)/10*16+ (gGeneral_Buffer[13]%10) );

    //存储计算历史轨迹的结束时间
    gCheck_Track_Time_end=0;
	gCheck_Track_Time_end= ( (gGeneral_Buffer[15]%100)/10*16+ (gGeneral_Buffer[15]%10) );
	gCheck_Track_Time_end <<= 8;
	gCheck_Track_Time_end += ( (gGeneral_Buffer[16]%100)/10*16+ (gGeneral_Buffer[16]%10) );
	gCheck_Track_Time_end <<= 8;
	gCheck_Track_Time_end += ( (gGeneral_Buffer[17]%100)/10*16+ (gGeneral_Buffer[17]%10) );
	gCheck_Track_Time_end <<= 8;
	gCheck_Track_Time_end+= ( (gGeneral_Buffer[18]%100)/10*16+ (gGeneral_Buffer[18]%10) );;


	//如果接收到的历史轨迹开始查询时间和结束时间相同,则表示接收到的是结束历史轨迹查询的命令
	if(gCheck_Track_Time_Start==gCheck_Track_Time_end)
	{
		gCycle_Send_Status=NOP_DATA;
		gCircle_Buffer_Point=0;
		for(i=0;i<sizeof(gCircle_Buffer);i++)	gCircle_Buffer[i]=0;
		gOther_Flag&=~FIND_PASSPAGE_F_1;gOther_Flag&=~FIRST_PASSPAGE_F_1;gOther_Flag&=~SEND_PASSPAGE_F_1;
		gOther_Flag&=~PASS_DATA_LASE_F_1;
		gOther_Flag&=~SEND_PASSPAGE_F_1;
		//设置发送历史轨迹结束的标志
		Load_Buffer1_Echo(TRACK_ENDECHO_UP,gGeneral_Buffer[5]);
		Send_COM1_String( (unsigned char *)PASS_END,sizeof(PASS_END) );
		return;
	}
	if (gCycle_Send_Status!=ALARM_DATA )
	{

		gCycle_Send_Status=PASS_DATA;gOther_Flag|=FIND_PASSPAGE_F_1;
		gOther_Flag&=~FIRST_PASSPAGE_F_1;gOther_Flag&=~SEND_PASSPAGE_F_1;
		if(gPassTrack_Store_Sector==FLASH_PASTDATA_E_2-1)
		{
			gPassPage_First=FLASH_PASTDATA_S_2;
			gPassPage_End=FLASH_PASTDATA_E_2-1;
		}
		else if(gPassTrack_Store_Sector>=FLASH_PASTDATA_E_2)
		{
			gPassPage_First=FLASH_PASTDATA_S_2+1;
			gPassPage_End=FLASH_PASTDATA_E_2;
		}
		else
		{
			gPassPage_First=gPassTrack_Store_Sector+2;
			gPassPage_End=FLASH_PASTDATA_E_2;
		}
	}
	#ifdef Debug_GSM_COM1
	Send_COM1_String( (unsigned char *)TIME_START,sizeof(TIME_START) );
	Send_COM1_Byte('[');
   	Send_COM1_Byte(ASCII(gCheck_Track_Time_Start/0x10000000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x10000000)/0x1000000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x1000000)/0x100000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x100000)/0x10000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x10000)/0x1000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x1000)/0x100));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_Start%0x100)/0x10));
	Send_COM1_Byte(ASCII(gCheck_Track_Time_Start%0x10));
	Send_COM1_Byte(']');
	Send_COM1_String( (unsigned char *)TIME_END,sizeof(TIME_END) );
	Send_COM1_Byte('[');
   	Send_COM1_Byte(ASCII(gCheck_Track_Time_end/0x10000000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x10000000)/0x1000000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x1000000)/0x100000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x100000)/0x10000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x10000)/0x1000));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x1000)/0x100));
    Send_COM1_Byte(ASCII((gCheck_Track_Time_end%0x100)/0x10));
	Send_COM1_Byte(ASCII(gCheck_Track_Time_end%0x10));
	Send_COM1_Byte(']');
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);

	Send_COM1_String( (unsigned char *)PAGE_S,sizeof(PAGE_S) );
	Send_COM1_Byte('[');
    Send_COM1_Byte(ASCII(gPassPage_First/1000));
    Send_COM1_Byte(ASCII((gPassPage_First%1000)/100));
    Send_COM1_Byte(ASCII(((gPassPage_First%1000)%100)/10));
	Send_COM1_Byte(ASCII(gPassPage_First%10));
	Send_COM1_Byte(']');
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	Send_COM1_String( (unsigned char *)PAGE_E,sizeof(PAGE_E) );
	Send_COM1_Byte('[');
    Send_COM1_Byte(ASCII(gPassPage_End/1000));
    Send_COM1_Byte(ASCII((gPassPage_End%1000)/100));
    Send_COM1_Byte(ASCII(((gPassPage_End%1000)%100)/10));
	Send_COM1_Byte(ASCII(gPassPage_End%10));
	Send_COM1_Byte(']');
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	#endif
	Judge_SMS_Way();
	
}

/********************************************************\
*	函数名:Disp_Dispaly_Info();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Disp_Dispaly_Info(void)
{
    unsigned int i=0;

	if(gDisp_Buffer_Point+gGeneral_Buffer[0]+2+6<=sizeof(gDisp_Buffer))
	{
	    gDisp_Buffer[gDisp_Buffer_Point]=gGeneral_Buffer[0]+2+6;
	    gDisp_Buffer_Point++;
	    gDisp_Buffer[gDisp_Buffer_Point]=0;
	    gDisp_Buffer_Point++;
	    gDisp_Buffer[gDisp_Buffer_Point]='@';
	    gDisp_Buffer_Point++;
	    gDisp_Buffer[gDisp_Buffer_Point]='%';
	    gDisp_Buffer_Point++;
	    gDisp_Buffer[gDisp_Buffer_Point]=gGeneral_Buffer[0]+2+4;
	    gDisp_Buffer_Point++;
	    gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_WORD_DOWN;
	    gDisp_Buffer_Point++;
	    //从0xFF开始存储数据(转移整个中心的数据包)
	    Copy_String(gGeneral_Buffer+1,gDisp_Buffer+gDisp_Buffer_Point,gGeneral_Buffer[0]);
	    gDisp_Buffer_Point=gDisp_Buffer_Point+gGeneral_Buffer[0];
	    gDisp_Buffer[gDisp_Buffer_Point]='$';
	    gDisp_Buffer_Point++;
	    gDisp_Buffer[gDisp_Buffer_Point]='&';
	    gDisp_Buffer_Point++;
	}
	//下面是显示调试信息
	/*
	#ifdef Debug_GSM_COM1
	Send_COM1_Byte(ASCII(gDisp_Buffer[0]/16));
	Send_COM1_Byte(ASCII(gDisp_Buffer[0]%16));
	Send_COM1_Byte('=');
	Send_COM1_Byte(ASCII(gDisp_Buffer_Point/16));
	Send_COM1_Byte(ASCII(gDisp_Buffer_Point%16));
	Send_COM1_Byte('{');
	for(i=0;i<gDisp_Buffer[0];i++)
	{
		Send_COM1_Byte(ASCII(gDisp_Buffer[i]/16));
		Send_COM1_Byte(ASCII(gDisp_Buffer[i]%16));
	}
	Send_COM1_Byte('}');
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	#endif
	*/
}
/********************************************************\
*	函数名:Set_TCP_OnOrOff();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:接收到下行的是设置进入/退出联网状态的命令,
				需要进行如下几个操作,存储需要响应的ACK
				1,改变进入TCP的开关量,并存储扇区0
				2,写入B类数据区此命令的回应上行命令
\********************************************************/
void Set_TCP_OnOrOff(void)
{
	unsigned int i=0,j=0;
	SRAM_Init();
	SRAM_Write(ECHO_SMS_2+0,VAILD_2);
	SRAM_Write(ECHO_SMS_2+1,SET_TCP_ONOROFF_ECHO_UP);
	SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
	SRAM_Write(ECHO_SMS_2+3,1);
	SRAM_Write(ECHO_SMS_2+4,gGeneral_Buffer[10]);
	Judge_SMS_Way();
}
/********************************************************\
*	函数名:Query_SYS_Ver();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Query_SYS_Ver(void)
{
	unsigned int i=0;

	SRAM_Init();
	SRAM_Write(ECHO_SMS_2+0,VAILD_2);
	SRAM_Write(ECHO_SMS_2+1,QUERY_VERSION_ECHO_UP);
	SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
	SRAM_Write(ECHO_SMS_2+3,14);
	SRAM_Write(ECHO_SMS_2+4,SYS_EDITION[0]);
	SRAM_Write(ECHO_SMS_2+5,SYS_EDITION[1]);
	for(i=0;i<6;i++)
	{
		SRAM_Write(ECHO_SMS_2+6+i,SYS_TIME[i]);
	}
	for(i=0;i<6;i++)
	{
		SRAM_Write(ECHO_SMS_2+12+i,SYS_UPDATATIME[i]);
	}
	Judge_SMS_Way();
}

/********************************************************\
*	函数名:Deal_Alarm_Echo();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Deal_Alarm_Echo(void)
{
	unsigned int i=0,j=0;
	gSMS_ACK[ALARM_ACK]=gGeneral_Buffer[5];
	gCycle_Alarm = gGeneral_Buffer[10];
	gCycle_Alarm <<= 8;
	gCycle_Alarm += gGeneral_Buffer[11];
	if( gCycle_Alarm == 0)
	{
		gAlarm_Type=NOP_ALARM;
		gCycle_Send_Status=NOP_DATA;
		gAlarm_Count=0;
		gStatus2_Flag&=~ROB_ALARM_F_1;
		Load_Buffer1_Echo(ALARM_END_UP,gGeneral_Buffer[5]);
	}
	else if( gCycle_Alarm <= 5 )	gCycle_Alarm=5;
}

/********************************************************\
*	函数名:Deal_Vehicle_Monitor();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Deal_Vehicle_Monitor(void)
{
	unsigned int i=0,j=0;
	i=10;j=0;
	while(gGeneral_Buffer[i]!=0x00)
	{
		i++;j++;if(j>16) {j=0;break;}
	}
	//接收到下行的监听信令。
	if(j>4)
	{
		SRAM_Init();
		SRAM_Write(PHONE_AT_2+0,VAILD_2);
		SRAM_Write(PHONE_AT_2+1,M_DIAL);
		SRAM_Write(PHONE_AT_2+2,j);
		for(i=0;i<j;i++)
		{
			SRAM_Write(PHONE_AT_2+3+i,gGeneral_Buffer[i+10]);
		}
	}
}


/********************************************************\
*	函数名:Defence_Password_Ask_Echo();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/

void Defence_Password_Ask_Echo(void)
{
	unsigned int i=0;
	unsigned char OldPassWord_Length=0;

	//读取FLASH相应存储密码区域的密码信息,将密码暂时存储在gGeneral_Buffer[]中
	OperateSPIEnd();
	ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
	OperateSPIEnd();
	gGeneral_Buffer[0]=ReadByteFromBuffer2(PASSWORD1_F_2);
	for(i=1;i<6;i++)
	{
		gGeneral_Buffer[i]=ReadNextFromBuffer2();
	}
	OperateSPIEnd();

	//调试显示出读出的密码是否正确
	#ifdef Debug_GSM_COM1
	Send_COM1_Byte('P');Send_COM1_Byte('[');
	for(i=0;i<6;i++)	Send_COM1_Byte(gGeneral_Buffer[i]);
	Send_COM1_Byte(']');Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	#endif

	//读出的密码存储在gGeneral_Buffer[0]---gGeneral_Buffer[5]
	for(i=0;i<6;i++)
	{
		if( (gGeneral_Buffer[i]<'0')||(gGeneral_Buffer[i]>'9') )	break;
	}
	//知道密码的长度
	OldPassWord_Length=i;

	//调试显示密码的数据
	#ifdef Debug_GSM_COM1
	Send_COM1_Byte(ASCII(OldPassWord_Length/10));
	Send_COM1_Byte(ASCII(OldPassWord_Length%10));
	Send_COM1_Byte('[');
	for(i=0;i<OldPassWord_Length;i++)	Send_COM1_Byte(gGeneral_Buffer[i]);
	Send_COM1_Byte(']');Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	#endif
	SRAM_Init();
	SRAM_Write(OTHER_SMS_2+0,VAILD_2);
	SRAM_Write(OTHER_SMS_2+1,PASSWORD_ASKECHO_UP);
	SRAM_Write(OTHER_SMS_2+2,gGeneral_Buffer[5]);
	SRAM_Write(OTHER_SMS_2+3,OldPassWord_Length+1);
	for(i=0;i<OldPassWord_Length;i++)
	{
		SRAM_Write(OTHER_SMS_2+4+i,gGeneral_Buffer[i]);
	}
	SRAM_Write(OTHER_SMS_2+4+OldPassWord_Length,0x00);
	Judge_SMS_Way();
}


/********************************************************\
*	函数名:Set_Phone_Limit();
	作用域:本地文件调用
*	功能:
*	参数:  无

⌨️ 快捷键说明

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