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

📄 sub_c.c

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

	//2,TCP服务器地址的处理
	gGeneral_Buffer[GPRS_IP_ADDRESS1_2]=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2);
	if(	(gGeneral_Buffer[GPRS_IP_ADDRESS1_2]>6)&&(gGeneral_Buffer[GPRS_IP_ADDRESS1_2]<16) )
	{
		gGeneral_Flag|=TCP_IP_VALID_1;
		gStatus2_Flag|=IP_VAILD_F_1;
		Check_Data=0;
		for(i=1;i<=gGeneral_Buffer[GPRS_IP_ADDRESS1_2];i++)
		{
			gGeneral_Buffer[GPRS_IP_ADDRESS1_2+i]=ReadNextFromBuffer2();
			Check_Data += gGeneral_Buffer[GPRS_IP_ADDRESS1_2+i];
		}
		gGeneral_Buffer[GPRS_IP_ADDRESS1_CHECK_2]=Check_Data;
	}
	else
	{
		gGeneral_Flag&=~TCP_IP_VALID_1;
		gStatus2_Flag&=~IP_VAILD_F_1;
	}
	OperateSPIEnd();
	Send_COM1_Byte('I');Send_COM1_Byte('P');Send_COM1_Byte(':');
	if(gGeneral_Flag&TCP_IP_VALID_1)
	{
		Send_COM1_Byte('O');Send_COM1_Byte('k');
	}
	else
	{
		Send_COM1_Byte('E');Send_COM1_Byte('r');Send_COM1_Byte('r');Send_COM1_Byte('o');Send_COM1_Byte('r');
	}
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);

	//3,TCP服务器的登陆端口的处理
	OperateSPIEnd();
	Check_Data=0;
	gGeneral_Buffer[GPRS_SOCKET1_2]=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
	Check_Data = gGeneral_Buffer[GPRS_SOCKET1_2];
	for(i=1;i<5;i++)
	{
		gGeneral_Buffer[GPRS_SOCKET1_2+i]=ReadNextFromBuffer2();
		Check_Data += gGeneral_Buffer[GPRS_SOCKET1_2+i];
	}
	gGeneral_Buffer[GPRS_SOCKET1_END_2]=Check_Data;
	OperateSPIEnd();

	//4,TCP登陆的APN的处理
	OperateSPIEnd();
	Check_Data=0;
	gGeneral_Buffer[GPRS_APN_ADDRESS2_2]=ReadByteFromBuffer2(GPRS_APN_DATA_F_2);
	if(  (gGeneral_Buffer[GPRS_APN_ADDRESS2_2]>5)&&(gGeneral_Buffer[GPRS_APN_ADDRESS2_2]<25 ) )
	{
		for(i=1;i<=gGeneral_Buffer[GPRS_APN_ADDRESS2_2];i++)
		{
			gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i]=ReadNextFromBuffer2();
			Check_Data += gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i];
		}
		gGeneral_Buffer[GPRS_APN_END_2]=Check_Data;
	}
	//----如果写入的APN不正确,则采取默认的APN格式
	else
	{
		Check_Data=0;
		gGeneral_Buffer[GPRS_APN_ADDRESS2_2]=sizeof(APN_DEFAULT);
		for(i=0;i<sizeof(APN_DEFAULT);i++)
		{
			gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i+1]=APN_DEFAULT[i];
			Check_Data += gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i+1];
		}
		gGeneral_Buffer[GPRS_APN_END_2]=Check_Data;
	}
	//5,将上面的处理的相关数据存储在buffer1的相关区域中
	SRAM_Init();
	SRAM_Write(TARGET_NUMBER1_2+0,gGeneral_Buffer[TARGET_NUMBER1_2]);
	for(i=TARGET_NUMBER1_2+1;i<PHONE_AT_2;i++)
	{
		SRAM_Write(i,gGeneral_Buffer[i]);
	}
}

/********************************************************\
*	函数名:Load_Flash_Par_Buffer1()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Load_Buffer1_Echo(unsigned char nCommand,unsigned char nACK)
{
	SRAM_Init();
	SRAM_Write(ECHO_SMS_2+0,VAILD_2);
	SRAM_Write(ECHO_SMS_2+1,nCommand);
	SRAM_Write(ECHO_SMS_2+2,nACK);
	SRAM_Write(ECHO_SMS_2+3,0);
	Judge_SMS_Way();
}
/********************************************************\
*	函数名:Send_Type1_GSM_Data_One
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
unsigned int Check_Allow_Phone(unsigned char nPhone_Length)
{
	unsigned int i=0,j=0,k=0;
	unsigned char Check_Temp=0;

	//1,读电话号码本的第一个扇区到buffer2中(比较第一个扇区的第一个帧5个电话号码)
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
	//2,比较gHandle_Buffer[]中的号码是否与前5个电话号码是否匹配中
	//	gGeneral_Buffer[0]---gGeneral_Buffer[nPhone_Length]中存储的是需要检验的电话号码
	for(k=0;k<5;k++)
	{
		j=0;
		OperateSPIEnd();
		Check_Temp=ReadByteFromBuffer2( (ONE_1_FRAME_2+8)+21*k );
		if( gGeneral_Buffer[0] != Check_Temp )
		{
			j=1;
		}
		for(i=1;i<nPhone_Length;i++)
		{
			if( gGeneral_Buffer[i] != ReadNextFromBuffer2() )
			{
				j=1;break;
			}
		}
		OperateSPIEnd();
		//如果返回0,则说明当前号码与比较号码相匹配
		if(j==0)
		{
			return(0);
		}
	}
	//如果返回1,则说明5个号码与比较号码没一个匹配
	return(1);
}
/********************************************************\
*	函数名:Send_Handle_Signal()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Send_Handle_Signal(unsigned char nSignal)
{
	SRAM_Init();
	SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
	SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
	SRAM_Write(SHANDLE_DATA_VAILD+2,0x09);
	SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_STATUS);
	SRAM_Write(SHANDLE_DATA_VAILD+4,nSignal);
	SRAM_Write(SHANDLE_DATA_VAILD+5,gVolume);
	if(gInternal_Flag&VEHICLE_DEFENCE_F_1)	SRAM_Write(SHANDLE_DATA_VAILD+6,1);
	else									SRAM_Write(SHANDLE_DATA_VAILD+6,0);
	//是否GPS处于有效还是无效状态
	if(gGeneral_Flag&GPS_VALID_F_1)			SRAM_Write(SHANDLE_DATA_VAILD+7,2);
	else									SRAM_Write(SHANDLE_DATA_VAILD+7,1);
	SRAM_Write(SHANDLE_DATA_VAILD+8,1);
	SRAM_Write(SHANDLE_DATA_VAILD+9,0x0d);
}
/********************************************************\
*	函数名:ReloadData_FlashToSram
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
/*
void LoadData_FlashToSram(unsigned int Flash_Srctor,unsigned int Flash_Adds,unsigned int Sram_Adds,unsigned int nLength)
{
	unsigned int i;
	unsigned char Temp;
	OperateSPIEnd();ReadOnePageToBuffer2(Flash_Srctor);OperateSPIEnd();
	Temp=ReadByteFromBuffer2(Flash_Adds);
	SRAM_Init();
	SRAM_Write( Sram_Adds,Temp);
	for(i=1;i<nLength;i++)
	{
		Temp=ReadNextFromBuffer2();
		SRAM_Write( (Sram_Adds+i),Temp);
	}
	OperateSPIEnd();
}
*/
/********************************************************\
*	函数名:Load_SMS_CenterNum()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void  Load_SMS_CenterNum(unsigned int nLength)
{
	unsigned int i=0;
	unsigned char Check_Data=0;
	SRAM_Init();
	//在buffer1的相应区域写入短消息中心号码的长度(不包括长度本身的这个字节)
	Check_Data=0;
	SRAM_Write(CENTER_NUM_2+0,(nLength-8));
	for(i=8;i<nLength;i++)
	{
		//依次写入短消息中心号码
		Check_Data += gGeneral_Buffer[i];
		SRAM_Write(CENTER_NUM_2+i-8+1,gGeneral_Buffer[i]);
	}
	//即使短消息中心号码前带有+号,则一样写入到buffer1中
	//写入buffer1相应的中心号码校验字的位置
	SRAM_Write(CENTER_NUM_CHECK_2,Check_Data);
}
/********************************************************\
*	函数名:Check_TargetNum_Vaild()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
unsigned int Check_Vaild(unsigned int Address_S,unsigned int Address_E)
{
	unsigned int i=0;
	unsigned char nLength;
	unsigned char Result=0;
	unsigned char Check_Data=0;
	//检查目标号码的有效性
	SRAM_Init();
	Check_Data=0;
	nLength = SRAM_Read(Address_S);
	for(i=0;i<nLength;i++)
	{
		Check_Data += SRAM_Read(Address_S+1+i);
	}
	Result=SRAM_Read(Address_E);
	if(Check_Data==Result)		return(0);
	else						return(1);
}
/********************************************************\
*	函数名:Check_Port()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
unsigned int Check_Port(void)
{
	unsigned int i=0;
	unsigned char Check_Data=0;
	unsigned char Result=0;
	SRAM_Init();
	Check_Data = SRAM_Read(GPRS_SOCKET1_2);
	for(i=1;i<5;i++)
	{
		Check_Data += SRAM_Read(GPRS_SOCKET1_2+i);
	}
	Result=SRAM_Read(GPRS_SOCKET1_END_2);
	if(Check_Data==Result)		return(0);
	else						return(1);
}

/********************************************************\
*	函数名:Judge_SMS_Way()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:
	运行此子程序,则是需要有数据发送时候TCP和GSM数据的选择
\********************************************************/
void Judge_SMS_Way(void)
{
	//1,如果TCP的开关量或者IP地址无效的情况下,以短消息的形式传送数据
    if(   ((gGeneral_Flag&TCP_IP_VALID_1)==0)
    	||(gON_OFF_Temp0&TCP_LAND_ON_OFF_1)	   )
    {
    	gInternal_Flag|=ALLOW_DATA_F_1;
    }
    //2,如果TCP的开关量开启,并且IP地址有效
    else
    {
    	//2.1如果处于GSM的工作状态下
    	if(gM22_Status==GSM_WORK)
    	{
    		//2.1.1如果处于禁止登陆TCP的状态
    		if(gGeneral_Flag&LAND_TCP_ERROR_F_1)
    		{
    			gInternal_Flag|=ALLOW_DATA_F_1;
    		}
    		//2.1.2如果处于允许登陆TCP的状态,则设置标志进行TCP登陆
    		else
    		{
    			gOther_Flag|=NEED_LADN_TCP_F_1;
    			gInternal_Flag&=~ALLOW_DATA_F_1;
    		}
    	}
    }
}
/********************************************************\
*	函数名:Load_Info_One()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	可以用来检查目标号码,短消息中心号码,IP地址的有效性
\********************************************************/
void Load_Info_One(void)
{
	unsigned int i=0,j=0,k=0;

	Check_Flash(FLASH_INFO1_ONE_2);

	for(i=0;i<=sizeof(gGeneral_Buffer);i++)	gGeneral_Buffer[i]=0;
	Load_Flash_Par_Buffer1();
	//================================================
	//调试读出Flash中的参数是否正确
	OperateSPIEnd();
	ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
	OperateSPIEnd();
	//1,显示车型,车类,车组,车号
	Send_COM1_String( (unsigned char *)VTYPE,sizeof(VTYPE) );
	j=ReadByteFromBuffer2(VEH_TYPE_2);
	Send_COM1_Byte(ASCII(j/0x10));
	Send_COM1_Byte(ASCII(j%0x10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)VKIND,sizeof(VKIND) );
	j=ReadNextFromBuffer2();
	Send_COM1_Byte(ASCII(j/0x10));
	Send_COM1_Byte(ASCII(j%0x10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)VGROUP,sizeof(VGROUP) );
	j=ReadNextFromBuffer2();
	Send_COM1_Byte(ASCII(j/0x10));
	Send_COM1_Byte(ASCII(j%0x10));
	Send_COM1_Byte(':');
	Send_COM1_String( (unsigned char *)VID,sizeof(VID) );
    Send_COM1_Byte(ASCII(gVID/0x1000));
    Send_COM1_Byte(ASCII((gVID%0x1000)/0x100));
    Send_COM1_Byte(ASCII(((gVID%0x1000)%0x100)/0x10));
	Send_COM1_Byte(ASCII(gVID%0x10));
	OperateSPIEnd();
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);

	//2,显示目标号码1
	Send_COM1_String( (unsigned char *)NUM1,sizeof(NUM1) );
	j=ReadByteFromBuffer2(TARGET_NUMBER1_F_2);
	if(j>16) j=0;
	Send_COM1_Byte(ASCII(j/0x10));
	Send_COM1_Byte(ASCII(j%0x10));
	Send_COM1_Byte('[');
	for(i=0;i<j;i++)
	{
		k=ReadNextFromBuffer2();
		Send_COM1_Byte(k);
	}
	Send_COM1_Byte(']');
	OperateSPIEnd();
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	//3,显示TCP服务器的IP地址
	Send_COM1_String( (unsigned char *)IP_ADDRESS,sizeof(IP_ADDRESS) );
	j=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2);
	if(j>16) j=0;
	Send_COM1_Byte(ASCII(j/0x10));
	Send_COM1_Byte(ASCII(j%0x10));
	Send_COM1_Byte('[');
	for(i=0;i<j;i++)
	{
		k=ReadNextFromBuffer2();
		Send_COM1_Byte(k);
	}
	OperateSPIEnd();
	Send_COM1_Byte(']');
	Send_COM1_Byte(':');
	//4,显示TCP服务器的PORT号
	Send_COM1_String( (unsigned char *)PORT,sizeof(PORT) );
	j=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
	Send_COM1_Byte('[');
	Send_COM1_Byte(j);
	for(i=0;i<4;i++)
	{
		k=ReadNextFromBuffer2();
		Send_COM1_Byte(k);
	}
	Send_COM1_Byte(']');
	//6,显示APN
	OperateSPIEnd();
	Send_COM1_String( (unsigned char *)TCP_APN,sizeof(TCP_APN) );
	j=ReadByteFromBuffer2(GPRS_APN_DATA_F_2);
	if(j>20) j=0;
	Send_COM1_Byte(ASCII(j/0x10));
	Send_COM1_Byte(ASCII(j%0x10));
	Send_COM1_Byte('[');
	for(i=0;i<j;i++)
	{
		k=ReadNextFromBuffer2();
		Send_COM1_Byte(k);
	}

⌨️ 快捷键说明

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