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

📄 sub_c.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 5 页
字号:
	Send_COM1_Byte(']');
	OperateSPIEnd();
	Send_COM1_Byte(0x0d);
	Send_COM1_Byte(0x0a);

	//================================================
	//将buffer1中其余的数据填为0
	gTimer=0;
	while(gTimer<10){}

	SRAM_Init();
	SRAM_Write(PHONE_AT_2+0,0);
	for(i=PHONE_AT_2+1;i<END_SRAM_2;i++)
	{
		SRAM_Write(i,0);
	}
}

/********************************************************\
*	函数名:Load_Info_Two()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
void Load_Info_Two(void)
{
    unsigned int i=0,j=0,k=0;
	unsigned char Buffer2_Temp;

	Check_Flash(FLASH_INFO2_ONE_2);

	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
	//处理开关量(出厂时候的默认值为屏蔽,相应的位置置1,则表示此开关量处于关闭状态)
	gON_OFF_Temp0=ReadByteFromBuffer2(ON_OFF_V1_2);
	gON_OFF_Temp1=ReadNextFromBuffer2();
	gON_OFF_Temp2=ReadNextFromBuffer2();
	//报警信息的处理(判断属于那一类型的报警,报警类型有1--126,gFlag的低7位作为报警类型,最高位在系统中作为GPS数据有效和无效的标志)
	gAlarm_Type=ReadNextFromBuffer2();
	if( gAlarm_Type ==(char)(~ReadNextFromBuffer2()))
	{
		gCycle_Send_Status=ALARM_DATA;
		gCycle_Alarm=ALARM_CIRCLE_TIME;
	}
	else
	{
		gAlarm_Type=0;
		gCycle_Alarm=0;
		gCycle_Send_Status=NOP_DATA;
	}
	gAlarm_Type=0;
	gCycle_Alarm=0;
	gCycle_Send_Status=NOP_DATA;
	//1,判断监控信息的处理
	ReadNextFromBuffer2();
	OperateSPIEnd();
	/*
	if( (gON_OFF_Temp0&PHONE_OUT_ON)==0 )		gStatus2_Flag|=HANDLE_PHONE_OUT_LIMIT;
	else										gStatus2_Flag&=~HANDLE_PHONE_OUT_LIMIT;

	if( (gON_OFF_Temp0&PHONE_IN_ON)==0 )		gStatus2_Flag|=HANDLE_PHONE_IN_LIMIT;
	else										gStatus2_Flag&=~HANDLE_PHONE_IN_LIMIT;

	if( (gON_OFF_Temp0&TCP_LAND_ON_OFF_1)==0 )	gStatus2_Flag|=TCP_ON_OFF_F_1;
	else										gStatus2_Flag&=~TCP_ON_OFF_F_1;
	*/
	//默认电话全开
	gStatus2_Flag&=~HANDLE_PHONE_OUT_LIMIT;
	gStatus2_Flag&=~HANDLE_PHONE_IN_LIMIT;
	gStatus2_Flag&=~TCP_ON_OFF_F_1;
	gON_OFF_Temp0|=PHONE_OUT_ON;
	gON_OFF_Temp0|=PHONE_IN_ON;
	gON_OFF_Temp0|=TCP_LAND_ON_OFF_1;

	if((gON_OFF_Temp1&DISTANCE_TCP_ON_1)==0)	gStatus3_Flag |= DISTANCE_ON_F_1;
	else										gStatus3_Flag &=~ DISTANCE_ON_F_1;

	//2,判断是否设防标志
	OperateSPIEnd();
	Buffer2_Temp=ReadByteFromBuffer2(DEFENCE_F_2);
	if(Buffer2_Temp==DEFENCE_YES)
	{
		gInternal_Flag|=VEHICLE_DEFENCE_F_1;
		gStatus1_Flag|=DEFENCE_STATUS_F_1;
	}
	else
	{
		gInternal_Flag&=~VEHICLE_DEFENCE_F_1;
		gStatus1_Flag&=~DEFENCE_STATUS_F_1;
	}

	//TCP工作方式下的行车诡计的时间间隔
	gCycle_TCP = ReadNextFromBuffer2();
	gCycle_TCP<<=8;
	gCycle_TCP += ReadNextFromBuffer2();
	//GSM工作方式下的行车轨迹的时间间隔
	gCycle_GSM = ReadNextFromBuffer2();
	gCycle_GSM<<=8;
	gCycle_GSM += ReadNextFromBuffer2();
	//间隔距离传输的距离值
	gCycle_Distance = ReadNextFromBuffer2();
	gCycle_Distance<<=8;
	gCycle_Distance += ReadNextFromBuffer2();

	if( gCycle_GSM>3600 )		gCycle_GSM=1800;
	if( gCycle_TCP>3600 )		gCycle_TCP=1800;

	if( (gCycle_TCP>0)&&(gCycle_TCP<5) )	gCycle_TCP=5;
	if( (gCycle_GSM>0)&&(gCycle_GSM<5) )	gCycle_GSM=5;
	//处理传输方式类型
	if(gCycle_TCP>5)
	{
		gCycle_Distance=0;
	}
	else if(gCycle_Distance==0xFFFF)
	{
		gCycle_Distance=0;
	}
	//历史轨迹存储的时间间隔
	ReadNextFromBuffer2();
	//行车最大速度
	gMAX_Speed=ReadNextFromBuffer2();

	//如果有线路报警时刻的最小限制距离
	gMax_Limit_Distance = ReadNextFromBuffer2();
	gMax_Limit_Distance<<=8;
	gMax_Limit_Distance += ReadNextFromBuffer2();
	if(  (gMax_Limit_Distance>20)&&(gMax_Limit_Distance<0x0FFF) )
	{
		gCommon_Flag|=ALLOW_LINE_DIS_F_1;
	}
	else
	{
		gCommon_Flag&=~ALLOW_LINE_DIS_F_1;
	}
	//显示出读出的数据
//	#ifdef Debug_GSM_COM1
	Send_COM1_String( (unsigned char *)ON_OFF0,sizeof(ON_OFF0) );
	Send_COM1_Byte(ASCII(gON_OFF_Temp0/0x10));
	Send_COM1_Byte(ASCII(gON_OFF_Temp0%0x10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)ON_OFF1,sizeof(ON_OFF1) );
	Send_COM1_Byte(ASCII(gON_OFF_Temp1/0x10));
	Send_COM1_Byte(ASCII(gON_OFF_Temp1%0x10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)ON_OFF2,sizeof(ON_OFF2) );
	Send_COM1_Byte(ASCII(gON_OFF_Temp2/0x10));
	Send_COM1_Byte(ASCII(gON_OFF_Temp2%0x10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)FLAG,sizeof(FLAG) );
	Send_COM1_Byte(ASCII(gAlarm_Type/0x10));
	Send_COM1_Byte(ASCII(gAlarm_Type%0x10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)TCP_TIME,sizeof(TCP_TIME) );
    Send_COM1_Byte(ASCII(gCycle_TCP/1000));
    Send_COM1_Byte(ASCII((gCycle_TCP%1000)/100));
    Send_COM1_Byte(ASCII(((gCycle_TCP%1000)%100)/10));
	Send_COM1_Byte(ASCII(gCycle_TCP%10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)GSM_TIME,sizeof(GSM_TIME) );
    Send_COM1_Byte(ASCII(gCycle_GSM/1000));
    Send_COM1_Byte(ASCII((gCycle_GSM%1000)/100));
    Send_COM1_Byte(ASCII(((gCycle_GSM%1000)%100)/10));
	Send_COM1_Byte(ASCII(gCycle_GSM%10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)DIS,sizeof(DIS) );
    Send_COM1_Byte(ASCII(gCycle_Distance/1000));
    Send_COM1_Byte(ASCII((gCycle_Distance%1000)/100));
    Send_COM1_Byte(ASCII(((gCycle_Distance%1000)%100)/10));
	Send_COM1_Byte(ASCII(gCycle_Distance%10));
	Send_COM1_Byte(':');

	Send_COM1_Byte(0x0d);
	Send_COM1_Byte(0x0a);

	Send_COM1_String( (unsigned char *)MAXSPEED,sizeof(MAXSPEED) );

    Send_COM1_Byte(ASCII(gMAX_Speed/100));
    Send_COM1_Byte(ASCII((gMAX_Speed%100)/10));
    Send_COM1_Byte(ASCII(gMAX_Speed%10));
    Send_COM1_Byte(':');
    Send_COM1_String( (unsigned char *)LIMIT_DIS,sizeof(LIMIT_DIS) );
    Send_COM1_Byte('=');
    Send_COM1_Byte(ASCII(gMax_Limit_Distance/0x1000));
    Send_COM1_Byte(ASCII((gMax_Limit_Distance%0x1000)/0x100));
    Send_COM1_Byte(ASCII(((gMax_Limit_Distance%0x1000)%0x100)/0x10));
	Send_COM1_Byte(ASCII(gMax_Limit_Distance%0x10));

	Send_COM1_Byte(0x0d);
	Send_COM1_Byte(0x0a);
//	#endif
}
/********************************************************\
*	函数名:Load_Info_Three()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Load_Info_Three(void)
{
	unsigned int i=0;
	unsigned char Area_In=0;
	unsigned char Area_Out=0;
	unsigned char Buffer2_Temp=0;
	Check_Flash(FLASH_AREA_ONE_2);
	OperateSPIEnd();
	Send_COM1_String( (unsigned char *)AREA_PAR,sizeof(AREA_PAR) );
	Send_COM1_Byte('[');
	Buffer2_Temp=ReadByteFromBuffer2(FAREA1_LON_1_2);
	SRAM_Init();
	SRAM_Write( SAREA_DATA_FS,0x55);
	SRAM_Write(SAREA1_LON_1_2,Buffer2_Temp);
	Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
	Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
	for(i=1;i<17*4;i++)
	{
		Buffer2_Temp=ReadNextFromBuffer2();
		SRAM_Write( (SAREA1_LON_1_2+i),Buffer2_Temp);
		Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
		Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
	}
	Send_COM1_Byte(']');
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	OperateSPIEnd();
	SRAM_Write( SAREA_DATA_FE,0xAA);

	gArea_Par=0;
	SRAM_Init();
	Buffer2_Temp=SRAM_Read(SAREA1_PAR_2);
	//0x55表示是禁出标志,0xAA则表示禁入标志
	if( Buffer2_Temp==0x55)		{gArea_Par|=AREA1_ON;Area_Out++;}
	else if(Buffer2_Temp==0xAA)	{gArea_Par|=AREA1_ON;gArea_Par|=AREA1_DIR;Area_In++;}
	Buffer2_Temp=SRAM_Read(SAREA2_PAR_2);
	if( Buffer2_Temp==0x55)		{gArea_Par|=AREA2_ON;Area_Out++;}
	else if(Buffer2_Temp==0xAA)	{gArea_Par|=AREA2_ON;gArea_Par|=AREA2_DIR;Area_In++;}
	Buffer2_Temp=SRAM_Read(SAREA3_PAR_2);
	if( Buffer2_Temp==0x55)		{gArea_Par|=AREA3_ON;Area_Out++;}
	else if(Buffer2_Temp==0xAA)	{gArea_Par|=AREA3_ON;gArea_Par|=AREA3_DIR;Area_In++;}
	Buffer2_Temp=SRAM_Read(SAREA4_PAR_2);
	if( Buffer2_Temp==0x55)		{gArea_Par|=AREA4_ON;Area_Out++;}
	else if(Buffer2_Temp==0xAA)	{gArea_Par|=AREA4_ON;gArea_Par|=AREA4_DIR;Area_In++;}
	SRAM_Init();
	SRAM_Write(SAREA_IN_NUM,Area_In);
	SRAM_Write(SAREA_OUT_NUM,Area_Out);
	if(gArea_Par!=0)	gStatus2_Flag|=AREA_VAILD_F_1;
	else				gStatus2_Flag&=~AREA_VAILD_F_1;
}
/********************************************************\
*	函数名:Load_Info_Four()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Load_Info_Four(void)
{
	unsigned int i=0;
	unsigned char Buffer2_Temp=0;
	unsigned char Buffer3_Temp=0;
	//检查第一个扇区的数据点
	Check_Flash(FLASH_LINEDATA1_ONE_2);
	OperateSPIEnd();
	//先判断此扇区数据点的个数
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
	Buffer2_Temp=ReadByteFromBuffer2(FLINE_NUM_1);
	Buffer3_Temp=ReadNextFromBuffer2();
	Buffer3_Temp=~Buffer3_Temp;
	OperateSPIEnd();
	if(   ( Buffer2_Temp==Buffer3_Temp)
		&&( Buffer2_Temp>0 )
		&&( Buffer2_Temp<31 )	)

	{
		gLine_Num=Buffer2_Temp;
		gCommon_Flag|=ALLOW_LINE_DATA_F_1;
	}
	else
	{
		gCommon_Flag&=~ALLOW_LINE_DATA_F_1;
		Send_COM1_String((unsigned char *)LOAD_ERROR,sizeof(LOAD_ERROR));
		return;
	}
	//如果扇区点在1-30之间,则认为有效,如果第一个扇区存满30个点,则判断第二个扇区的数据的内容
	if(gLine_Num==30)
	{
		Check_Flash(FLASH_LINEDATA2_ONE_2);
		OperateSPIEnd();
		OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
		Buffer2_Temp=ReadByteFromBuffer2(FLINE_NUM_1);
		Buffer3_Temp=ReadNextFromBuffer2();
		Buffer3_Temp=~Buffer3_Temp;
		OperateSPIEnd();
		if(   (Buffer2_Temp==Buffer3_Temp)
			&&( Buffer2_Temp>0 )
			&&(Buffer2_Temp<=30)	)
		{
			gLine_Num=gLine_Num+Buffer2_Temp;
		}
	}
	//如果最后的点数满足小于30,则只转移第一个扇区的数据到SRAM
	if(gLine_Num<=30)
	{
		SRAM_Init();
		SRAM_Write( SLINE_NUM_1,gLine_Num );
		SRAM_Write( SLINE_NUM_2,(~gLine_Num) );
		OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
		Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
		SRAM_Write( SLINE_DATA_1+0,Buffer2_Temp);
		Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
		Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
		for(i=1;i<8*gLine_Num;i++)
		{
			Buffer2_Temp=ReadNextFromBuffer2();
			SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
		}
		OperateSPIEnd();
	}
	else if( (gLine_Num>30)&&(gLine_Num<=60) )
	{
		SRAM_Init();
		SRAM_Write( SLINE_NUM_1,gLine_Num );
		SRAM_Write( SLINE_NUM_2,(~gLine_Num) );
		OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
		Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
		SRAM_Write( SLINE_DATA_1+0,Buffer2_Temp);
		for(i=1;i<240;i++)
		{
			Buffer2_Temp=ReadNextFromBuffer2();
			SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
		}
		OperateSPIEnd();
		OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
		Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
		SRAM_Init();
		SRAM_Write( (SLINE_DATA_1+240),Buffer2_Temp);
		for(i=241;i<8*gLine_Num;i++)
		{
			Buffer2_Temp=ReadNextFromBuffer2();
			SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
		}
		OperateSPIEnd();
	}
	Send_COM1_String( (unsigned char *)LINE_PAR,sizeof(LINE_PAR) );
	Send_COM1_Byte(ASCII(gLine_Num/10));
	Send_COM1_Byte(ASCII(gLine_Num%10));
	SRAM_Init();
	Send_COM1_Byte('[');
	for(i=0;i<8*gLine_Num;i++)
	{
		Buffer2_Temp=SRAM_Read(SLINE_DATA_1+i);
		Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
		Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
		Clear_Exter_WatchDog();
	}
	Send_COM1_Byte(']');
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
}

/********************************************************\
*	函数名:Check_Flash()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	可以用来检查目标号码,短消息中心号码,IP地址的有效性
	如果数据无效果,则需要将MSP430内部的信息存储区A的数据覆盖
\********************************************************/
void Check_Flash(unsigned int Add_Sector)
{
	unsigned int i=0,j=0,k=0;
	unsigned int iAddress=0;
	unsigned char Sec_Vaild=0;
	unsigned int  nTCP=0;
	unsigned char Secter_One=0,Secter_Two=0;
	Secter_One=0;
	Secter_Two=0;
	//Secter_One=0,说明第一个扇区数据校验核正确。为1,则表示校验核正确,但非正常数据,为2,则表示校验核实不正确
	//Secter_Two=0,说明第二个扇区数据校验核正确。为1,则表示校验核正确,但非正常数据,为2,则表示校验核实不正确
	OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector);OperateSPIEnd();
	j=ReadByteFromBuffer2(0);
	gGeneral_Buffer[0]=j;
	for(i=1;i<254;i++)
	{
		gGeneral_Buffer[i]=ReadNextFromBuffer2();
		j+=gGeneral_Buffer[i];
	}
	gGeneral_Buffer[254]=ReadNextFromBuffer2();
	gGeneral_Buffer[255]=ReadNextFromBuffer2();
	OperateSPIEnd();
	if( ((j/256)==gGeneral_Buffer[254]) && ((j%256)==gGeneral_Buffer[255]) )
	{
		if(Add_Sector==FLASH_INFO1_ONE_2)
		{
			if(   (gGeneral_Buffer[TARGET_NUMBER1_F_2]>16)
				||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>16)
				||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<7) )
			{
				Secter_One=1;
			}
			else if(gGeneral_Buffer[TARGET_NUMBER1_F_2]<=16)
			{
				k=0;
				for(i=0;i<gGeneral_Buffer[TARGET_NUMBER1_F_2];i++)
				{
					if(   (gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]>'9')
						||(gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]<'0')	)
					{
						k=1;break;
					}
				}

⌨️ 快捷键说明

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