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

📄 do_handle.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 4 页
字号:
	unsigned char Length=0;
	unsigned char Command=0;
	unsigned char Data=0;
	Length=DataLength;
	Command=nCommand;
	Data=DataTemp;
	Send_COM3_Byte(0x24);Send_COM3_Byte(Length);
	Send_COM3_Byte(Command);
	if(Length==4)
	{
	}
	else if(Length==5)
	{
		Send_COM3_Byte(Data);
	}
	Send_COM3_Byte(0x0d);
	RX3_Ready();
}
/********************************************************\
*	函数名:Send_COM3_SubProgram
	作用域:本地文件调用
*	功能:
*	参数:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Send_COM3_Load(unsigned char DataLength,unsigned char nCommand,unsigned char DataTemp)
{
	unsigned char Length=0;
	unsigned char Command=0;
	unsigned char Data=0;
	Length=DataLength;
	Command=nCommand;
	Data=DataTemp;
	SRAM_Init();
	SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
	SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
	SRAM_Write(SHANDLE_DATA_VAILD+2,Length);
	SRAM_Write(SHANDLE_DATA_VAILD+3,Command);
	if(Length==4)
	{
		SRAM_Write(SHANDLE_DATA_VAILD+4,0x0d);
	}
	else if(Length==5)
	{
		SRAM_Write(SHANDLE_DATA_VAILD+4,Data);
		SRAM_Write(SHANDLE_DATA_VAILD+5,0x0d);
	}
}
/********************************************************\
*	函数名:Handle_Set_Par
	作用域:本地文件调用
*	功能:测试外部设备的功能
*	参数:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Handle_Set_Par(unsigned char nLength)
{
	unsigned int i=0;
	for(i=0;i<sizeof(gGeneral_Buffer);i++) 	 	gGeneral_Buffer[i]=0;
	for(i=0;i<nLength-3;i++)
	{
		gGeneral_Buffer[i+1+9]=gHandle_Buffer[i+3];
	}
	Do_Par();
	Waiting_Allow_Send();
	Send_COM3_SubProgram(5,HANDLE_SET_PAR_ECHO,COMMAND_OK);
	gTimer=0;
	while(gTimer<50){}
}

/********************************************************\
*	函数名:Handle_Set_TcpIp
	作用域:本地文件调用
*	功能:测试外部设备的功能
*	参数:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Handle_Set_TcpIp(void)
{
	unsigned int i,j,k;
	unsigned char APN_Length=0;
	unsigned char Check_Data=0;
	//在gHandle_Buffer[i]中表示IP地址的第一个数
	i=3;
	while(1)
	{
		if(gHandle_Buffer[i]==0x00) break;
		i++;
		if(i>16+3) return;
	}
	//一,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//1-1,存储IP的数据值到相应的BUFFER1中,存储IP地址的长度,不包括长度本身
	Check_Data=0;
	SRAM_Init();
	SRAM_Write(GPRS_IP_ADDRESS1_2+0,i-3);
	for(j=3;j<i;j++)
	{
		Check_Data += gHandle_Buffer[j];
		SRAM_Write(GPRS_IP_ADDRESS1_2+j-2,gHandle_Buffer[j]);
	}
	SRAM_Write(GPRS_IP_ADDRESS1_CHECK_2,Check_Data);

	//1-2,将IP地址的SOCKET数据存储在buffer1相应的缓冲区中,因为上面gHandle_Buffer[i]=0x00
	i++;
	gIP_Port_Num = gHandle_Buffer[i];
	gIP_Port_Num<<=8;
	gIP_Port_Num += gHandle_Buffer[i+1];
	gIP_Port_Num<<=8;
	gIP_Port_Num += gHandle_Buffer[i+2];
	gIP_Port_Num<<=8;
	gIP_Port_Num += gHandle_Buffer[i+3];
	SRAM_Init();
	Check_Data=ASCII(gIP_Port_Num/10000);
	SRAM_Write(GPRS_SOCKET1_2+0,ASCII(gIP_Port_Num/10000));
	Check_Data += ASCII((gIP_Port_Num%10000)/1000);
	SRAM_Write(GPRS_SOCKET1_2+1,ASCII((gIP_Port_Num%10000)/1000));
	Check_Data += ASCII((gIP_Port_Num%1000)/100);
	SRAM_Write(GPRS_SOCKET1_2+2,ASCII((gIP_Port_Num%1000)/100));
	Check_Data += ASCII((gIP_Port_Num%100)/10);
	SRAM_Write(GPRS_SOCKET1_2+3,ASCII((gIP_Port_Num%100)/10));
	Check_Data += ASCII(gIP_Port_Num%10);
	SRAM_Write(GPRS_SOCKET1_2+4,ASCII(gIP_Port_Num%10));
	SRAM_Write(GPRS_SOCKET1_2+5,Check_Data);
	OperateSPIEnd();
	//1-3,TCP开关量的判断处理
	gON_OFF_Temp0 &=~ TCP_LAND_ON_OFF_1;
	gStatus2_Flag |= TCP_ON_OFF_F_1;

	//1-4,APN方面的判断处理
	k=i+5;
	while(1)
	{
		if(gHandle_Buffer[k]==0x00) break;
		k++;
		if(k>gHandle_Buffer[1]) return;
	}
	APN_Length=k-i-5;
	if( (APN_Length>=4)&&(APN_Length<=25) )
	{
		SRAM_Init();
		SRAM_Write(GPRS_APN_ADDRESS2_2+0,APN_Length);
		Check_Data=0;
		for(j=i+5;j<k;j++)
		{
			SRAM_Write(GPRS_APN_ADDRESS2_2+(j-i-5)+1,APN_Length);
			Check_Data += gHandle_Buffer[j];
		}
		SRAM_Write(GPRS_APN_END_2,Check_Data);
	}
	else
	{
		SRAM_Write(GPRS_APN_ADDRESS2_2,sizeof(APN_DEFAULT));
		//5,存储APN的数据值到相应的BUFFER1中
		Check_Data=0;
		for(i=0;i<sizeof(APN_DEFAULT);i++)
		{
			SRAM_Write(GPRS_APN_ADDRESS2_2+i+1,APN_DEFAULT[i]);
			Check_Data += APN_DEFAULT[i];
		}
		SRAM_Write(GPRS_APN_END_2,Check_Data);
	}
	//将TCP的开关量的信息存储在相应的FLASH中
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
	WriteOneByteToBuffer2(ON_OFF_V1_2,gON_OFF_Temp0);OperateSPIEnd();
	RFlash_Sector(FLASH_INFO2_ONE_2);
	Re430_Flash(1);
	RX2_Ready();RX3_Ready();RX4_Ready();
	//二,++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//注意,这里在程序刚上电的最开始已经检查过了FLASH的第1,第2扇区的数据
	//在这里则不需要在继续检查
	//读第一个扇区的数据到buffer2中
	gTimer=0;
	while(gTimer<500){}
	Clear_Exter_WatchDog();
	//2-1,将IP地址数据已经写入相应的buffer2中
	i=3;
	while(1)
	{
		if(gHandle_Buffer[i]==0x00) break;
		i++;
		if(i>16+3) return;
	}
	//这个时候的i指向0x00
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);OperateSPIEnd();
	WriteOneByteToBuffer2(GPRS_IP_ADDRESS1_F_2,i-3);
	for(j=3;j<i;j++)
	{
		WriteNextByteToBuffer2(gHandle_Buffer[j]);
	}
	OperateSPIEnd();
	gGeneral_Flag|=TCP_IP_VALID_1;
	gStatus2_Flag|=IP_VAILD_F_1;
	//2-2,将SOCKET的数据写入相应的buffer2中
	OperateSPIEnd();
	WriteOneByteToBuffer2(GPRS_SOCKET1_F_2,ASCII(gIP_Port_Num/10000));
	WriteNextByteToBuffer2(ASCII((gIP_Port_Num%10000)/1000));
	WriteNextByteToBuffer2(ASCII((gIP_Port_Num%1000)/100));
	WriteNextByteToBuffer2(ASCII((gIP_Port_Num%100)/10));
	WriteNextByteToBuffer2(ASCII(gIP_Port_Num%10));
	OperateSPIEnd();
	//2-3,将APN的数据写入到相应的buffer2中
	//i指向APN的第一个字节
	k=i+6;
	while(1)
	{
		if(gHandle_Buffer[k]==0x00) break;
		k++;
		if(k>gHandle_Buffer[1]) return;
	}
	APN_Length=k-i-6;
	WriteOneByteToBuffer2(GPRS_APN_DATA_F_2,APN_Length);
	for(j=i+6;j<k;j++)
	{
		WriteNextByteToBuffer2(gHandle_Buffer[j]);
	}
	OperateSPIEnd();

	gTimer=0;
	while(gTimer<50){}
	Clear_Exter_WatchDog();
	RFlash_Sector(FLASH_INFO1_ONE_2);
	Re430_Flash(0);
	Waiting_Allow_Send();
	Send_COM3_SubProgram(5,HANDLE_SET_TCPIP_ECHO,COMMAND_OK);
	gCheck_Par_Timer=CHECK_SYS_PAR_TIME+1;
	Init_Buffer2();
	RX2_Ready();
	RX3_Ready();
	RX4_Ready();


}
/********************************************************\
*	函数名:Handle_Set_Time
	作用域:本地文件调用
*	功能:测试外部设备的功能
*	参数:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Handle_Set_Time(void)
{
	unsigned int i=0,j=0;
	gCycle_TCP = gHandle_Buffer[3];
	gCycle_TCP <<= 8;
	gCycle_TCP += gHandle_Buffer[4];
	gCycle_GSM = gHandle_Buffer[5];
	gCycle_GSM <<= 8;
	gCycle_GSM += gHandle_Buffer[6];

	if( (gCycle_TCP>0)&&(gCycle_TCP<5) )	gCycle_TCP=5;
	if( (gCycle_GSM>0)&&(gCycle_GSM<5) )	gCycle_GSM=5;
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
	WriteOneByteToBuffer2(TCP_TIMER_2,gHandle_Buffer[3]);
	WriteNextByteToBuffer2(gHandle_Buffer[4]);
	WriteNextByteToBuffer2(gHandle_Buffer[5]);
	WriteNextByteToBuffer2(gHandle_Buffer[6]);
	OperateSPIEnd();
	RFlash_Sector(FLASH_INFO2_ONE_2);
	Re430_Flash(1);
	//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;
		}
	}
	Waiting_Allow_Send();
	Send_COM3_SubProgram(5,HANDLE_SET_TIME_ECHO,COMMAND_OK);
	gTimer=0;
	while(gTimer<50){}
}

/********************************************************\
*	函数名:Handle_Ask_Par
	作用域:本地文件调用
*	功能:测试外部设备的功能
*	参数:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Handle_Ask_Par(void)
{
	unsigned int i=0;
	Ask_Par();
	SRAM_Init();
	SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
	SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
	SRAM_Write(SHANDLE_DATA_VAILD+2,gGeneral_Buffer[0]+1+3);
	SRAM_Write(SHANDLE_DATA_VAILD+3,HANDLE_ASK_PAR_ECHO);
	for(i=1;i<=gGeneral_Buffer[0];i++)
	{
		SRAM_Write(SHANDLE_DATA_VAILD+3+i,gGeneral_Buffer[i]);
	}
	SRAM_Write(SHANDLE_DATA_VAILD+4+gGeneral_Buffer[0],0x0d);
}

/********************************************************\
*	函数名:Handle_Set_SMS
	作用域:本地文件调用
*	功能:
*	参数:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Handle_Set_SMS(void)
{
	if(gDisp_Buffer_Point+gHandle_Buffer[1]-4+2+6<=sizeof(gDisp_Buffer))
	{
	    gDisp_Buffer[gDisp_Buffer_Point]=gHandle_Buffer[1]-4+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]=gHandle_Buffer[1]-4+2+4;
	    gDisp_Buffer_Point++;
	    gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_WORD_DOWN;
	    gDisp_Buffer_Point++;
	    //从0xFF开始存储数据(转移整个中心的数据包)
	    Copy_String(gHandle_Buffer+3,gDisp_Buffer+gDisp_Buffer_Point,gHandle_Buffer[1]-4);
	    gDisp_Buffer_Point=gDisp_Buffer_Point+gHandle_Buffer[1]-4;
	    gDisp_Buffer[gDisp_Buffer_Point]='$';
	    gDisp_Buffer_Point++;
	    gDisp_Buffer[gDisp_Buffer_Point]='&';
	    gDisp_Buffer_Point++;
		Waiting_Allow_Send();
		Send_COM3_SubProgram(5,HANDLE_SET_SMS_ECHO,COMMAND_OK);
	}
}
/********************************************************\
*	函数名:Handle_Set_Phone
	作用域:本地文件调用
*	功能:
*	参数:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Handle_Set_Phone(unsigned char nLength)
{
	unsigned int i=0;
	for(i=0;i<sizeof(gGeneral_Buffer);i++) 	 	gGeneral_Buffer[i]=0;
	for(i=0;i<nLength-3;i++)
	{
		gGeneral_Buffer[i+1+9]=gHandle_Buffer[i+3];
	}
	Do_Phone_Note();
	Waiting_Allow_Send();
	Send_COM3_SubProgram(5,HANDLE_SET_PHONE_NOTE_ECHO,COMMAND_OK);
}
/********************************************************\
*	函数名:Handle_Set_Dis
	作用域:本地文件调用
*	功能:
*	参数:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Handle_Set_Dis(void)
{
	gCycle_Distance = gHandle_Buffer[3];
	gCycle_Distance <<= 8;
	gCycle_Distance += gHandle_Buffer[4];

	if(gHandle_Buffer[5]==1)
	{
		gON_OFF_Temp1 &=~ DISTANCE_TCP_ON_1;
		gStatus3_Flag |= DISTANCE_ON_F_1;
	}
	else if(gGeneral_Buffer[5]==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;
	//根据状态的改变,则需要重新更新扇区0中的数据,并重新计算校验核,写入扇区
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
	WriteOneByteToBuffer2(ON_OFF_V2_2,gON_OFF_Temp1);
	OperateSPIEnd();
	WriteOneByteToBuffer2(TCP_TIMER_2,0);
	WriteNextByteToBuffer2(0);
	WriteNextByteToBuffer2(0);
	WriteNextByteToBuffer2(0);
	WriteNextByteToBuffer2(gHandle_Buffer[3]);
	WriteNextByteToBuffer2(gHandle_Buffer[4]);
	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;

	//返回设置成功
	Waiting_Allow_Send();
	Send_COM3_SubProgram(5,HANDLE_SET_DISTANCE_ECHO,COMMAND_OK);
}
/********************************************************\
*	函数名:Handle_Test_Sram
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/
void Handle_Test_Sram(void)
{
	unsigned int i=0,j=0,k=0;
	unsigned char Data_Temp=0;
	unsigned char Data_Read=0;
	//关闭中断1;停止中断对外部SRAM的操作
	IE2&=~URXIE1;            //USART1接收中断禁止
	j=0;
	for(k=0;k<=0x100;k++)
	{
		for(i=0;i<=0xFF;i++)
		{
			gGeneral_Buffer[i]=(char)(i+k);
		}
		Clear_Exter_WatchDog();
		SRAM_Init();
		for(i=0;i<=0xFF;i++)
		{
			SRAM_Write( (int)(k*0xFF+i),gGeneral_Buffer[i]);
		}
		SRAM_Init();
		for(i=0;i<=0xFF;i++)
		{
			Data_Temp=SRAM_Read((int)(k*0xFF+i));
			if(Data_Temp!=gGeneral_Buffer[i])
			{
				j=1;break;
			}
		}
		if(j==1)	break;
	}
	if(j==1)
	{
		Send_COM3_SubProgram(5,HANDLE_TEST_SRAM,COMMAND_ERROR);
	}
	else
	{
		Send_COM3_SubProgram(5,HANDLE_TEST_SRAM,COMMAND_OK);
	}
	IE2|=URXIE1;            //USART1接收中断允许
	RX2_Ready();
	RX3_Ready();
	RX4_Ready();
	gTimer=0;
	while(gTimer<50){}
}

⌨️ 快捷键说明

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