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

📄 check_gsm.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 5 页
字号:
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Set_Phone_Limit(void)
{
	unsigned char nACK=0;
	nACK=gGeneral_Buffer[5];
	//1,接收判断
	//判断电话呼入限制的功能
	if(gGeneral_Buffer[10]==0)
	{
		//电话呼入禁止
		gON_OFF_Temp0&=~PHONE_IN_ON;
		gStatus2_Flag|=HANDLE_PHONE_IN_LIMIT;
	}
	else if(gGeneral_Buffer[10]==0xFF)
	{
		//电话呼出允许
		gON_OFF_Temp0|=PHONE_IN_ON;
		gStatus2_Flag&=~HANDLE_PHONE_IN_LIMIT;
	}
	//判断电话呼出限制的功能
	if(gGeneral_Buffer[11]==0)
	{
		//电话呼出禁止
		gON_OFF_Temp0&=~PHONE_OUT_ON;
		gStatus2_Flag|=HANDLE_PHONE_OUT_LIMIT;
	}
	else if(gGeneral_Buffer[11]==0xFF)
	{
		//电话呼出允许
		gON_OFF_Temp0|=PHONE_OUT_ON;
		gStatus2_Flag&=~HANDLE_PHONE_OUT_LIMIT;
	}
	//2,处理后的状态存储
	//根据状态的改变,则需要重新更新扇区5中的数据,并重新计算校验核,写入扇区
//	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
	Deal_Sector(FLASH_INFO2_ONE_2);
	WriteOneByteToBuffer2(ON_OFF_V1_2,gON_OFF_Temp0);
	OperateSPIEnd();
	RFlash_Sector(FLASH_INFO2_ONE_2);
	Re430_Flash(1);
	//3,处理完后的响应
	//下面是处理需要发送接收到终端进入/退出联网状态的响应
	SRAM_Init();
	SRAM_Write(ECHO_SMS_2+0,VAILD_2);
	SRAM_Write(ECHO_SMS_2+1,SET_PHONE_LIMIT_ECHO_UP);
	SRAM_Write(ECHO_SMS_2+2,nACK);
	SRAM_Write(ECHO_SMS_2+3,2);
	SRAM_Write(ECHO_SMS_2+4,gGeneral_Buffer[10]);
	SRAM_Write(ECHO_SMS_2+5,gGeneral_Buffer[11]);
	gGeneral_Flag&=~LAND_TCP_ERROR_F_1;
	Judge_SMS_Way();
}
/********************************************************\
*	函数名:Set_Center_Num();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/

void Set_Center_Num(void)
{
	unsigned int i=0,j=0,k=0;
	unsigned char cNum1,cNum2,cNum3;
	//先读出Flash相应的第5个扇区的数据到buffer2中
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
	//1,处理接收中心服务号码
	//========================================
	i=1+9;
	while(1)
	{
		if(gGeneral_Buffer[i]==0x00)	break;
		i++;
		if(i>1+9+15) return;
		//这里的15表示目标号码1不会超过15个数
	}
	cNum1=i-(1+9);
	//如果中心服务号码的长度没有超过15,则目标号码有效
	if( (i<=1+9+15)&&(cNum1>0) )
	{
		//计算出此中心服务的号码长度并写入buffer2中相应的位置
		OperateSPIEnd();
		WriteOneByteToBuffer2(CENTER_NUM_F_2,cNum1);
		for(j=1+9;j<i;j++)
		{
			WriteNextByteToBuffer2(gGeneral_Buffer[j]);
		}
		OperateSPIEnd();
	}
	OperateSPIEnd();
	//2,处理接收报警电话号码
	//========================================
	j=i+1;
	while(1)
	{
		if(gGeneral_Buffer[j]==0x00)	break;
		j++;
		if(j>1+i+15)	return;
	}
	cNum2=j-i;
	if( (j<=1+i+15)&&(cNum2>0) )
	{
		//计算出此报警号码的号码长度并写入buffer2
		OperateSPIEnd();
		WriteOneByteToBuffer2(ARALM_NUM_2,cNum2);
		for(k=i+1;k<j;k++)
		{
			WriteNextByteToBuffer2(gGeneral_Buffer[k]);
		}
		OperateSPIEnd();
	}
	OperateSPIEnd();
	//3,处理接收监听电话号码
	//========================================
	k=j+1;
	while(1)
	{
		if(gGeneral_Buffer[k]==0x00)	break;
		k++;if(k>1+j+15)	return;
	}
	cNum3=k-j;
	if( (k<=j+1+15)&&(cNum3>0) )
	{
	}
	//4,预留电话号码
	//========================================
	//5,将更新的设置重新写入相应的Flash
	OperateSPIEnd();
	RFlash_Sector(FLASH_INFO2_ONE_2);
	Re430_Flash(1);
	//6,接收处理完毕,则发送设置响应
	//========================================
	SRAM_Init();
	SRAM_Write(ECHO_SMS_2+0,VAILD_2);
	SRAM_Write(ECHO_SMS_2+1,CENTER_NUMECHO_UP);
	SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
	SRAM_Write(ECHO_SMS_2+3,21);
	Write_PartData_Sram(ECHO_SMS_2+3);
	SRAM_Write(ECHO_SMS_2+3+18,0);
	SRAM_Write(ECHO_SMS_2+3+19,gStatus3_Flag);
	SRAM_Write(ECHO_SMS_2+3+20,gStatus2_Flag);
	SRAM_Write(ECHO_SMS_2+3+21,gStatus1_Flag);
	Judge_SMS_Way();
}

/********************************************************\
*	函数名:Set_Area_Limit();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*	修改历史:(每条详述)
	此程序的处理是将响应的区域参数存储在外部SRAM中,和buffer2中。并计算gArea_Par的值
\********************************************************/
void Set_Area_Limit(void)
{
	unsigned int  i=0;
	unsigned char Buffer2_Temp=0;
	gArea_Par=0;
	//1,存储外部的FLASH中。
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_AREA_ONE_2);OperateSPIEnd();
	WriteOneByteToBuffer2(FAREA1_LON_1_2,gGeneral_Buffer[1+9]);
	for(i=1;i<68;i++)
	{
		WriteNextByteToBuffer2(gGeneral_Buffer[1+9+i]);
	}
	OperateSPIEnd();
	RFlash_Sector(FLASH_AREA_ONE_2);
	//3,存储外部的SRAM中的相应位置
	SRAM_Init();
	SRAM_Write( SAREA_DATA_FS,0x55);						//存储区域的有效标志
	for(i=0;i<68;i++)
	{
		SRAM_Write( (SAREA1_LON_1_2+i),gGeneral_Buffer[1+9+i]);
	}
	SRAM_Write( SAREA_DATA_FE,0xAA);
	//4,显示当前区域的参数
	gArea_Par=0;
	SRAM_Init();
	Buffer2_Temp=SRAM_Read(SAREA1_PAR_2);
	if( Buffer2_Temp==0x55)		{gArea_Par|=AREA1_ON;}
	else if(Buffer2_Temp==0xAA)	{gArea_Par|=AREA1_ON;gArea_Par|=AREA1_DIR;}
	Buffer2_Temp=SRAM_Read(SAREA2_PAR_2);
	if( Buffer2_Temp==0x55)		{gArea_Par|=AREA2_ON;}
	else if(Buffer2_Temp==0xAA)	{gArea_Par|=AREA2_ON;gArea_Par|=AREA2_DIR;}
	Buffer2_Temp=SRAM_Read(SAREA3_PAR_2);
	if( Buffer2_Temp==0x55)		{gArea_Par|=AREA3_ON;}
	else if(Buffer2_Temp==0xAA)	{gArea_Par|=AREA3_ON;gArea_Par|=AREA3_DIR;}
	Buffer2_Temp=SRAM_Read(SAREA4_PAR_2);
	if( Buffer2_Temp==0x55)		{gArea_Par|=AREA4_ON;}
	else if(Buffer2_Temp==0xAA)	{gArea_Par|=AREA4_ON;gArea_Par|=AREA4_DIR;}
	//4,接收到区域参数的响应
	Load_Buffer1_Echo(ALLOW_AREA_ECHO_UP,gGeneral_Buffer[5]);
	if(gArea_Par!=0)	gStatus2_Flag|=AREA_VAILD_F_1;
	else				gStatus2_Flag&=~AREA_VAILD_F_1;
}

/********************************************************\
*	函数名:Send_RecordData();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*	修改历史:(每条详述)
	补充说明:将外部数据从新组包,发送给记录仪,然后等待回音
\********************************************************/
void Send_RecordData(void)
{
    unsigned int i=0;
	gSMS_ACK[RECORD_EQUIPMENT_ACK]=gGeneral_Buffer[5];
	for(i=11;i<=gGeneral_Buffer[0]-3;i++)
	{
		Send_COM1_Byte(gGeneral_Buffer[i]);
	}
	/*
	#ifdef Debug_GSM_COM1
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	for(i=11;i<=gGeneral_Buffer[0]-3;i++)
	{
		Send_COM1_Byte(ASCII(gGeneral_Buffer[i]/0x10));
		Send_COM1_Byte(ASCII(gGeneral_Buffer[i]%0x10));
	}
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	#endif
	*/

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

\********************************************************/
void Set_Distance_Par(void)
{
	gCycle_Distance = gGeneral_Buffer[1+9];
	gCycle_Distance <<= 8;
	gCycle_Distance += gGeneral_Buffer[1+10];

	if(gGeneral_Buffer[1+11]==1)
	{
		gON_OFF_Temp1 &=~ DISTANCE_TCP_ON_1;
		gStatus3_Flag |= DISTANCE_ON_F_1;
	}
	else if(gGeneral_Buffer[1+11]==0)
	{
		gON_OFF_Temp1 |= DISTANCE_TCP_ON_1;
		gStatus3_Flag &=~ DISTANCE_ON_F_1;
	}
	gCycle_TCP=0;
	gCycle_GSM=0;
	gCycle_Send_Status = NOP_DATA;
	Load_Buffer1_Echo(SET_DISTANCE_DATA_UP,gGeneral_Buffer[5]);
	//根据状态的改变,则需要重新更新扇区0中的数据,并重新计算校验核,写入扇区
	//OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
	Deal_Sector(FLASH_INFO2_ONE_2);
	WriteOneByteToBuffer2(ON_OFF_V2_2,gON_OFF_Temp1);
	OperateSPIEnd();
	WriteOneByteToBuffer2(TCP_TIMER_2,0);
	WriteNextByteToBuffer2(0);
	WriteNextByteToBuffer2(0);
	WriteNextByteToBuffer2(0);
	WriteNextByteToBuffer2(gGeneral_Buffer[1+9]);
	WriteNextByteToBuffer2(gGeneral_Buffer[1+10]);
	OperateSPIEnd();
	RFlash_Sector(FLASH_INFO2_ONE_2);
	Re430_Flash(1);
	gPublic_Flag &=~ SET_DISTANCE_OK_F_1;
	gSet_Distance_Info_Count=WAIT_DISPINFO_TIME-2;

}
/********************************************************\
*	函数名:Set_Phone_Num();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*	修改历史:(每条详述)
	电话号码本的存储,固定2个扇区,每个扇区存储10个电话本
	一个电话本固定23个字节的长度,8(姓名)+13(电话号码)
	扇区的0xFF处,存储当前页的号码个数,如果值为0,则需要另外存储一个扇区页
\********************************************************/
void Set_Phone_Num(void)
{
	Do_Phone_Note();
	//存储作为第2类信息发送的响应数据的存储
	//服务器端口设置成功后的响应
	SRAM_Init();
	SRAM_Write(ECHO_SMS_2+0,VAILD_2);
	SRAM_Write(ECHO_SMS_2+1,ASK_PHONE_NUMECHO_UP);
	SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
	SRAM_Write(ECHO_SMS_2+3,2);
	SRAM_Write(ECHO_SMS_2+4,gGeneral_Buffer[1+9]);
	SRAM_Write(ECHO_SMS_2+5,gGeneral_Buffer[1+10]);
	Judge_SMS_Way();
}
/********************************************************\
*	函数名:Watch_Way();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*	修改历史:(每条详述)

\********************************************************/
void Watch_Way(void)
{
	unsigned int i=0;
	gWatch_Circle = gGeneral_Buffer[1+9];
	gWatch_Circle <<= 8;
	gWatch_Circle += gGeneral_Buffer[1+10];

	gWatch_Time = gGeneral_Buffer[1+11];
	gWatch_Time <<= 8;
	gWatch_Time += gGeneral_Buffer[1+12];

	gWatch_Count = gGeneral_Buffer[1+13];
	gWatch_Count <<= 8;
	gWatch_Count += gGeneral_Buffer[1+14];

	if(gWatch_Circle==0)
	{
		if(gCycle_Send_Status==WATCH_DATA)	gCycle_Send_Status=NOP_DATA;
		gWatch_Count=0;gWatch_Time=0;
		gWatch_Type=WATCH_TYPE_NULL;
		Load_Buffer1_Echo(ASK_FREEWATCH_UP,gGeneral_Buffer[5]);
	}
	else
	{
		if(   (gCycle_Send_Status==TRACK_DATA_TIME)
			||(gCycle_Send_Status==TRACK_DATA_DISTANCE)
			||(gCycle_Send_Status==NOP_DATA)  )
		{
			gCycle_Send_Status=WATCH_DATA;
			gPublic_Flag&=~ACCOFF_OK_F_1;
			gPublic_Flag&=~ACC_OFF_UP_F_1;
			gPublic_Flag&=~ACCOFF_TRACK_F_1;
			ACC_OFF_Timer=0;
			if(gWatch_Time!=0)
			{
				gWatch_Count=0;
				gWatch_Type=WATCH_TYPE_TIME;
			}
			else
			{
				if(gWatch_Count!=0)	gWatch_Type=WATCH_TYPE_COUNT;
				else
				{
					Load_Buffer1_Echo(ASK_FREEWATCH_UP,gGeneral_Buffer[5]);
				}
			}
		}
	}
}

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

\********************************************************/
void Line_Data_Deal(void)
{
	unsigned int i=0,j=0;
	unsigned char nTemp=0;
	unsigned char Line_Num=0;
	nTemp=gGeneral_Buffer[1+10];	//帧数(范围值1,2)
	Line_Num=gGeneral_Buffer[1+11];	//当前线路点的个数(1--30)
	SRAM_Init();
	SRAM_Write(ECHO_SMS_2+0,VAILD_2);
	SRAM_Write(ECHO_SMS_2+1,LINE_DATA_ECHO_UP);
	SRAM_Write(ECHO_SMS_2+2,gGeneral_Buffer[5]);
	SRAM_Write(ECHO_SMS_2+3,2);
	SRAM_Write(ECHO_SMS_2+4,gGeneral_Buffer[1+9]);
	SRAM_Write(ECHO_SMS_2+5,gGeneral_Bu

⌨️ 快捷键说明

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