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

📄 do_other.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 5 页
字号:
	gCircle_Buffer[gCircle_Buffer_Point]=gKind;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gGroup;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gVID/0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gVID%0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	gCircle_Buffer[gCircle_Buffer_Point]=gLongitude/0x1000000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLongitude%0x1000000/0x10000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLongitude%0x10000/0x100;

	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLongitude%0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	gCircle_Buffer[gCircle_Buffer_Point]=gLatitude/0x1000000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLatitude%0x1000000/0x10000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLatitude%0x10000/0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLatitude%0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	gCircle_Buffer[gCircle_Buffer_Point]=gSpeed;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gAzimuth;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	if(gGeneral_Flag&GPS_VALID_F_1)		nFlag|=FLAG_GPSVAILD_1;
	else								nFlag&=~FLAG_GPSVAILD_1;

	gCircle_Buffer[gCircle_Buffer_Point]=nFlag;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	gCircle_Buffer[gCircle_Buffer_Point]=gYear;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gMonth;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gDate;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gHour;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gMinute;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gSecond;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	//增加4个状态量的发送
	gCircle_Buffer[gCircle_Buffer_Point]=0;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gStatus3_Flag;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gStatus2_Flag;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gStatus1_Flag;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	//增加long int型的里程数据
	/*
	gCircle_Buffer[gCircle_Buffer_Point]=gALL_Distance/0x1000000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gALL_Distance%0x1000000/0x10000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gALL_Distance%0x10000/0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gALL_Distance%0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	*/
	//==================================================
	gCircle_Buffer[gCircle_Buffer_Point]=iCheckOut/0x100;
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=iCheckOut%0x100;
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=EOT;
	gCircle_Buffer_Point++;
	//gCircle_Buffer_Point的值是数据区的长度
}

/********************************************************\
*	函数名:Circle_Data_GSM
	作用域:本地文件调用
*	功能:  在GSM的工作方式下,如果是报警,或者行车轨迹,或者监控数据,
			组织到gCircle_Buffer[]缓冲中
*	参数:

*	返回值:

*	创建人:
*
*	修改历史:(每条详述)
AT+CMGS=045
> 001100|0D 91683196818735F4 000400 1D FF43BC19010101001018739A9A04D63C2200008003093010164306460D

\********************************************************/
unsigned int Circle_Data_GSM( unsigned char nCount,unsigned char nCommand,unsigned char nACK,unsigned int iCheckOutTemp )
{
	unsigned char nInput;
	unsigned int  iCheckOut;
	unsigned int  i;
	iCheckOut=iCheckOutTemp;
	nInput=12+4+17*2;
	if(nCount==1)
	{
		gCircle_Buffer_Point=0;
		gCircle_Buffer[gCircle_Buffer_Point]=SOH;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=nCommand;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=(char)(~nCommand);
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=nInput-4;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=nACK;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gKind;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gGroup;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gVID/0x100;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gVID%0x100;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		i=Circle_Data_GSM_Sub(iCheckOut);
		return(i);
	}
	else if(nCount==2)
	{
		i=Circle_Data_GSM_Sub(iCheckOut);
		return(i);
	}
	/*
	else if(nCount==3)
	{
		i=Circle_Data_GSM_Sub(iCheckOut);
		return(i);
	}
	else if(nCount==4)
	{
		i=Circle_Data_GSM_Sub(iCheckOut);
		return(i);
	}
	*/
	else if(nCount==3)
	{
		i=Circle_Data_GSM_Sub(iCheckOut);
		return(i);
	}
	else if(nCount==4)
	{
		/////////////////////////////////////////////////
		i=Circle_Data_GSM_Sub(iCheckOut);
		//增加4个车载终端的状态量
		gCircle_Buffer[gCircle_Buffer_Point]=0;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gStatus3_Flag;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gStatus2_Flag;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gStatus1_Flag;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		//增加long int型的里程数据
		/*
		gCircle_Buffer[gCircle_Buffer_Point]=gALL_Distance/0x1000000;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gALL_Distance%0x1000000/0x10000;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gALL_Distance%0x10000/0x100;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=gALL_Distance%0x100;
		iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
		gCircle_Buffer_Point++;
		*/
		//////////////////////////////////////////////
		gCircle_Buffer[gCircle_Buffer_Point]=i/0x100;
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=i%0x100;
		gCircle_Buffer_Point++;
		gCircle_Buffer[gCircle_Buffer_Point]=EOT;
		gCircle_Buffer_Point++;
		return(0);
	}
	else
	{
	  return(0);
	}
}
/********************************************************\
*	函数名:Circle_Data_GSM_Sub
	作用域:本地文件调用
*	功能:  在GSM的工作方式下,如果是报警,或者行车轨迹,或者监控数据,
			组织到gCircle_Buffer[]缓冲中
*	参数:
*	返回值:
*	创建人:
*	修改历史:(每条详述)
\********************************************************/

unsigned int Circle_Data_GSM_Sub(unsigned int iCheckOutTemp)
{
	unsigned int iCheckOut;
	unsigned char nFlag;
	nFlag=gAlarm_Type;
	iCheckOut=iCheckOutTemp;
	gCircle_Buffer[gCircle_Buffer_Point]=gLongitude/0x1000000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLongitude%0x1000000/0x10000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLongitude%0x10000/0x100;

	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLongitude%0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	gCircle_Buffer[gCircle_Buffer_Point]=gLatitude/0x1000000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLatitude%0x1000000/0x10000;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLatitude%0x10000/0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gLatitude%0x100;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	gCircle_Buffer[gCircle_Buffer_Point]=gSpeed;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gAzimuth;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;

	if(gGeneral_Flag&GPS_VALID_F_1)		nFlag|=FLAG_GPSVAILD_1;
	else								nFlag&=~FLAG_GPSVAILD_1;

	gCircle_Buffer[gCircle_Buffer_Point]=nFlag;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gYear;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gMonth;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gDate;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gHour;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gMinute;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	gCircle_Buffer[gCircle_Buffer_Point]=gSecond;
	iCheckOut += gCircle_Buffer[gCircle_Buffer_Point];
	gCircle_Buffer_Point++;
	return(iCheckOut);
}

/********************************************************\
*	函数名:Dichotomy_PassData_First
	作用域:本地文件调用
*	功能:  二分法寻找历史轨迹的第一个满足条件的扇区
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
unsigned int Dichotomy_PassData_First(unsigned int iFirst_Page,unsigned int iEnd_Page)
{
	unsigned int iMiddle_Page;
	iMiddle_Page=(iFirst_Page+iEnd_Page)/2;
	return(iMiddle_Page);
}

/********************************************************\
*	函数名:GSM_WORK_Data
	作用域:
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void GSM_WORK_Data(void)
{
	if(gCircle_Timer>0)
	{
		if( (gGeneral_Flag&GPS_VALID_F_1)&&( (gInternal_Flag&LOAD_ONEVALID_F_1)==0) )
		{
			gInternal_Flag|=LOAD_ONEVALID_F_1;
			//在0--gCycle_GSM内判断到一个有效的数据
			gGSM_Work_Count++;
			gCheck_Data += Circle_Data_GSM(gGSM_Work_Count,VEHICLE_RUNDATA_UP,0,gCheck_Data);
			if(gGSM_Work_Count>=4)
			{
				gInternal_Flag|=SEND_CIRCLE_F_1;gGSM_Work_Count=0;gCheck_Data=0;
				Judge_SMS_Way();
			}
		}
		else if( gCircle_Timer>gCycle_GSM )
		{
			if( gInternal_Flag&LOAD_ONEVALID_F_1 )
			{
				gCircle_Timer=0;
				gInternal_Flag&=~LOAD_ONEVALID_F_1;
			}
			else
			{
				gCircle_Timer=0;
				gInternal_Flag&=~LOAD_ONEVALID_F_1;
				//在0--gCycle_GSM内仍然未判断到一个有效的数据,则将这个作为一个点存储
				gGSM_Work_Count++;
				gCheck_Data += Circle_Data_GSM(gGSM_Work_Count,VEHICLE_RUNDATA_UP,0,gCheck_Data);
				if(gGSM_Work_Count>=4)
				{
					gInternal_Flag|=SEND_CIRCLE_F_1;gGSM_Work_Count=0;gCheck_Data=0;
					Judge_SMS_Way();
				}
			}
		}
	}
}
/********************************************************\
*	函数名:TCP_WORK_Data
	作用域:
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/

void TCP_WORK_Data(unsigned int Timer,unsigned char nCommand)
{
	if(gCircle_Timer>0)
	{
		if( (gGeneral_Flag&GPS_VALID_F_1)&&( (gInternal_Flag&LOAD_ONEVALID_F_1)==0) )
		{
			gInternal_Flag|=LOAD_ONEVALID_F_1;
			//在0--gCycle_TCP内判断到一个有效的数据
			Circle_Data_TCP(nCommand,0);
			gInternal_Flag|=SEND_CIRCLE_F_1;
			Judge_SMS_Way();
		}
		else if( gCircle_Timer>Timer )
		{
			if( gInternal_Flag&LOAD_ONEVALID_F_1 )
			{
				gCircle_Timer=0;
				gInternal_Flag&=~LOAD_ONEVALID_F_1;
			}
			else

⌨️ 快捷键说明

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