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

📄 do_disp.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 2 页
字号:
			{
				gCommon_Flag|=ALLOW_OUT_DISP_F_1;
				gDo_Speed_Count=0;
			}
			else
			{
				k=gDisp_Buffer[0];
		        Copy_String( gDisp_Buffer+k,gDisp_Buffer,gDisp_Buffer_Point-k );
		        gDisp_Buffer_Point=gDisp_Buffer_Point-k;
			}
		}
		//2,收到响应后的处理
		else if(   (gCommon_Flag&DISP_SEND_OK_F_1)
		         &&(gCommon_Flag&ALLOW_OUT_DISP_F_1)  )
		{
			gCommon_Flag&=~DISP_SEND_OK_F_1;
			gCommon_Flag&=~ALLOW_OUT_DISP_F_1;
			k=gDisp_Buffer[0];
	        Copy_String( gDisp_Buffer+k,gDisp_Buffer,gDisp_Buffer_Point-k );
	        gDisp_Buffer_Point=gDisp_Buffer_Point-k;
		}
		//3,重发部分的处理
		else if(   (gCommon_Flag&ALLOW_OUT_DISP_F_1)
		         &&((gCommon_Flag&DISP_SEND_OK_F_1)==0)   )
		{
			if(gSend_Disp_Timer>3)
			{
				gSend_Disp_Timer=0;
				Send_COM4_String( gDisp_Buffer+2,gDisp_Buffer[0]-2 );
				RX4_Ready();
				gCommon_Flag&=~ALLOW_SEND_DISP_F_1;
				gDisp_Timer=0;
				gDisp_ReSend_Count++;
				if(gDisp_ReSend_Count>3)
				{
					gCommon_Flag&=~ALLOW_OUT_DISP_F_1;
					k=gDisp_Buffer[0];
	        		Copy_String( gDisp_Buffer+k,gDisp_Buffer,gDisp_Buffer_Point-k );
	       		 	gDisp_Buffer_Point=gDisp_Buffer_Point-k;
				}
			}
	    }
	}
}
/********************************************************\
*	函数名:Check_Disp_Command()
	作用域:本地文件调用
*	功能:	用来接收处理来自显示终端的接收数据,判断出命令字
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/

unsigned char Check_Disp_Command(void)
{
    if( gDisp_Buffer_R_Point < 6) return(0);
//    if( gDisp_Buffer_R_Point != gDisp_Buffer_R[2]) return(0);
    if( gDisp_Buffer_R[0]!='@' ) return(0);
    if( gDisp_Buffer_R[1]!='%' ) return(0);
    if( gDisp_Buffer_R[gDisp_Buffer_R[2]-2]!='$' ) return(0);
    if( gDisp_Buffer_R[gDisp_Buffer_R[2]-1]!='&' ) return(0);
    return( gDisp_Buffer_R[3] );
}
/********************************************************\
*	函数名:Save_TypeC_Buffer()
	作用域:本地文件调用
*	功能:	用来处理C类需要上传的数据(这里指的是来自显示终端的C类数据())
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:
		0xB1	存储表示这个区域的SMS是否处理,为1则表示后面还有未处理的SMS,为0则表示已经处理完了SMS
		0xB2	存储数据包的命令字在这里则为nCommand
		0xB3	存储数据包的ACK的值ACK
		0xB4	存储后面数据包的长度(但注意没有包括存储CHK(MSB),CHK(LSB),EOT,这三个字节)
		0xB5  	从这开始存储数据包
\********************************************************/



/********************************************************\
*	函数名:Disp_Hand_Free_Defence()
	作用域:本地文件调用
*	功能:	接收到来自显示终端的主动解除防信息的处理
			1,先判断解除设防的密码是否正确,
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:
	1,先判断车载终端的密码是否有效,如果还未存储过密码,则不判断解除密码的正确性,直接解除设防
	2,如果车载终端的密码有效,则判断解除密码是否正确,这里需要重点说明的是,因为显示终端的密码如果
		不满足6位,则不足处不会填为0x20,但以后的如果通过手柄来处理密码则始终按6位来处理,不足6位的
		则会填0X20。
	3,如果密码正确,则向显示终端发送密码正确,并且解除设防(包括FLASH区设防标志的清除)
	4,如果密码不正确,则向显示中断发送密码不正确,并且连续3次密码输入不正确,则立刻产生被盗报警信息
		但设防标志仍然存在

\********************************************************/


/********************************************************\
*	函数名:Disp_Ask_Watch_Status_Echo()
	作用域:本地文件调用
*	功能:	接收到来自显示终端主动改变密码的信令
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Disp_Ask_Watch_Status_Echo(void)
{
	if(gDisp_Buffer_Point+14<=sizeof(gDisp_Buffer))
	{
		gDisp_Buffer[gDisp_Buffer_Point]=14;
		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]=12;
		gDisp_Buffer_Point++;
		gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_STATUS_DOWN;
		gDisp_Buffer_Point++;
		if(gGeneral_Flag&GPS_VALID_F_1)
		{
			gDisp_Buffer[gDisp_Buffer_Point]=gYear;
			gDisp_Buffer_Point++;
			gDisp_Buffer[gDisp_Buffer_Point]=gMonth;
			gDisp_Buffer_Point++;
			gDisp_Buffer[gDisp_Buffer_Point]=gDate;
		}
		else
		{
			gDisp_Buffer[gDisp_Buffer_Point]=0x05;
			gDisp_Buffer_Point++;
			gDisp_Buffer[gDisp_Buffer_Point]=0x01;
			gDisp_Buffer_Point++;
			gDisp_Buffer[gDisp_Buffer_Point]=0x01;
		}
		gDisp_Buffer_Point++;
		gDisp_Buffer[gDisp_Buffer_Point]=gHour;
		gDisp_Buffer_Point++;
		gDisp_Buffer[gDisp_Buffer_Point]=gMinute;
		gDisp_Buffer_Point++;
		gDisp_Buffer[gDisp_Buffer_Point]=gSecond;
		gDisp_Buffer_Point++;
		gDisp_Buffer[gDisp_Buffer_Point]='$';
		gDisp_Buffer_Point++;
		gDisp_Buffer[gDisp_Buffer_Point]='&';
		gDisp_Buffer_Point++;
	}
}

/********************************************************\
*	函数名:Disp_Ask_Info()
	作用域:本地文件调用
*	功能:	接收到来自显示终端的按键请求信息,需要将这些信息上行给中心
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Disp_Ask_Info(unsigned char nCommand,unsigned char nKey_ID,unsigned char nACK)
{
	unsigned char Key_ID=0;
	Key_ID=nKey_ID;
	SRAM_Init();
	SRAM_Write(OTHER_SMS_2+0,VAILD_2);
	SRAM_Write(OTHER_SMS_2+1,nCommand);
	SRAM_Write(OTHER_SMS_2+2,nACK);
	SRAM_Write(OTHER_SMS_2+3,22);
	SRAM_Write(OTHER_SMS_2+4,Key_ID);
	Write_PartData_Sram(OTHER_SMS_2+4);
	SRAM_Write(OTHER_SMS_2+4+18,0);
	SRAM_Write(OTHER_SMS_2+4+19,gStatus3_Flag);
	SRAM_Write(OTHER_SMS_2+4+20,gStatus2_Flag);
	SRAM_Write(OTHER_SMS_2+4+21,gStatus1_Flag);
	Judge_SMS_Way();
}
/********************************************************\
*	函数名:Disp_Ask_Info()
	作用域:本地文件调用
*	功能:	接收到来自显示终端的按键请求信息,需要将这些信息上行给中心
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Disp_Receive_Info_Echo(unsigned char nCommand,unsigned char nInfo_ID1,unsigned char nInfo_ID2,unsigned char nInfo_ID3,unsigned char nInfo_ID4,unsigned char nACK)
{
	SRAM_Init();
	SRAM_Write(OTHER_SMS_2+0,VAILD_2);
	SRAM_Write(OTHER_SMS_2+1,nCommand);
	SRAM_Write(OTHER_SMS_2+2,nACK);
	SRAM_Write(OTHER_SMS_2+3,17+8);
	//4个字节的信息包的ID号
	SRAM_Write(OTHER_SMS_2+4,nInfo_ID1);
	SRAM_Write(OTHER_SMS_2+5,nInfo_ID2);
	SRAM_Write(OTHER_SMS_2+6,nInfo_ID3);
	SRAM_Write(OTHER_SMS_2+7,nInfo_ID4);
	Write_PartData_Sram(OTHER_SMS_2+7);
	SRAM_Write(OTHER_SMS_2+7+18,0);
	SRAM_Write(OTHER_SMS_2+7+19,0);
	SRAM_Write(OTHER_SMS_2+7+20,gStatus2_Flag);
	SRAM_Write(OTHER_SMS_2+7+21,gStatus1_Flag);
	Judge_SMS_Way();
}

/********************************************************\
*	函数名:Disp_Ask_Par(()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Disp_Ask_Par(void)
{
	unsigned int i=0;
	unsigned char Data_Temp[12];
	unsigned int iData=0;
	Ask_Par();
	//向显示屏发送的数据包需要另外处理一下
	/*
	gGeneral_Buffer[0]存储的是发送数据的长度
	需要将gGeneral_Buffer[1]-----gGeneral_Buffer[5]的数据转换为ASCII字符显示形式
	例程:
	40 25 50 13 30 30 30 31 30 31 30 30 30 30 30 35 31 33 36 39 31 38 37 38 35 33 34 00 32 31 30 2E 32 31 2E 32 34 34 2E 33 39 00 30 39 39 38 38 31 2C 22 49 50 22 2C 22 43 4D 4E 45 54 22 00 31 30 30 30 32 30 30 30 32 30 30 30 30 30 30 30 24 26
	*/
	Data_Temp[0]=ASCII(gGeneral_Buffer[1]/10);
	Data_Temp[1]=ASCII(gGeneral_Buffer[1]%10);		//车型

	Data_Temp[2]=ASCII(gGeneral_Buffer[2]/10);
	Data_Temp[3]=ASCII(gGeneral_Buffer[2]%10);		//车组

	Data_Temp[4]=ASCII(gGeneral_Buffer[3]/10);
	Data_Temp[5]=ASCII(gGeneral_Buffer[3]%10);		//车类

	iData = gGeneral_Buffer[4];
	iData <<=8;
	iData +=gGeneral_Buffer[5];

	Data_Temp[6]=ASCII(iData/100000);
	Data_Temp[7]=ASCII( (iData%100000)/10000 );
	Data_Temp[8]=ASCII( (iData%10000)/1000);
	Data_Temp[9]=ASCII( (iData%1000)/100);
	Data_Temp[10]=ASCII( (iData%100)/10);
	Data_Temp[11]=ASCII( iData%10 );				//车号

	//重新整理gGeneral_Buffer缓冲
	for(i=gGeneral_Buffer[0]+7;i>=13;i--)
	{
		gGeneral_Buffer[i]=gGeneral_Buffer[i-7];
	}
	//重新整理数据长度
	gGeneral_Buffer[0]=gGeneral_Buffer[0]+7;
	for(i=0;i<12;i++)
	{
		gGeneral_Buffer[1+i]=Data_Temp[i];
	}
	if(gDisp_Buffer_Point+gGeneral_Buffer[0]+1+5+2<=sizeof(gDisp_Buffer))
	{
		gDisp_Buffer[gDisp_Buffer_Point]=gGeneral_Buffer[0]+1+5+2;
		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]=gGeneral_Buffer[0]+1+5;
		gDisp_Buffer_Point++;
		gDisp_Buffer[gDisp_Buffer_Point]=DISP_ASK_PAR_DOWM;
		gDisp_Buffer_Point++;
		for(i=1;i<=gGeneral_Buffer[0];i++)
		{
			gDisp_Buffer[gDisp_Buffer_Point]=gGeneral_Buffer[i];
			gDisp_Buffer_Point++;
		}
		gDisp_Buffer[gDisp_Buffer_Point]='$';
		gDisp_Buffer_Point++;
		gDisp_Buffer[gDisp_Buffer_Point]='&';
		gDisp_Buffer_Point++;
	}
}

⌨️ 快捷键说明

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