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

📄 do_record.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 2 页
字号:
				{
					gOver_Tire_Count++;
					gStop_Tire_Count=0;
				}
				else
				{
					gOver_Tire_Count=0;
					gStop_Tire_Count++;
				}
				//3-4,判断BIT3,属于打印机的工作状态
				if(gRecord_Status&J_PRINTER_STATUS_F_1)	gDisp_Status|=S_PRINTER_STATUS_F_1;
				else									gDisp_Status&=~S_PRINTER_STATUS_F_1;

				//3-5,判断BIT4,属于USB的工作状态
				if(gRecord_Status&J_USB_STATUS_F_1)		gDisp_Status|=S_USB_STATUS_F_1;
				else									gDisp_Status&=~S_USB_STATUS_F_1;

				//4,接收到记录仪的数据,则需要返回一个状态包,包括经度,纬度.
				//------------------------------
		    	Send_COM1_Byte(gStatus);
		    	Check_Record = gStatus;
		    	Send_COM1_Byte(0xAA);
		    	Check_Record ^= 0xAA;
		    	Send_COM1_Byte(0x75);
		    	Check_Record ^= 0x75;
		    	Send_COM1_Byte(K_SEND_GPSDATA);
		    	Check_Record ^= K_SEND_GPSDATA;
		    	Send_COM1_Byte(0);
		    	Check_Record ^= 0;
		    	Send_COM1_Byte(10);
		    	Check_Record ^= 10;
		    	Send_COM1_Byte(0x00);
		    	Check_Record ^= 0x00;
		    	if(gGeneral_Flag&GPS_VALID_F_1)
		    	{
		    		Send_COM1_Byte(0x01);
		    		Check_Record ^= 0x01;
		    	}
				else
				{
					Send_COM1_Byte(0x00);
					Check_Record ^= 0x00;
				}
		    	Send_COM1_Byte(gLongitude/0x1000000);
		    	Check_Record ^= gLongitude/0x1000000;
		    	Send_COM1_Byte(gLongitude%0x1000000/0x10000);
		    	Check_Record ^= gLongitude%0x1000000/0x10000;
		    	Send_COM1_Byte(gLongitude%0x10000/0x100);
		    	Check_Record ^= gLongitude%0x10000/0x100;
		    	Send_COM1_Byte(gLongitude%0x100);
		    	Check_Record ^= gLongitude%0x100;
		    	Send_COM1_Byte(gLatitude/0x1000000);
		    	Check_Record ^= gLatitude/0x1000000;
		    	Send_COM1_Byte(gLatitude%0x1000000/0x10000);
		    	Check_Record ^= gLatitude%0x1000000/0x10000;
		    	Send_COM1_Byte(gLatitude%0x10000/0x100);
		    	Check_Record ^= gLatitude%0x10000/0x100;
		    	Send_COM1_Byte(gLatitude%0x100);
		    	Check_Record ^= gLatitude%0x100;
		    	Send_COM1_Byte(gRecord_Status);
		    	Check_Record ^= gRecord_Status;
		    	Send_COM1_Byte(0);
		    	Check_Record ^= 0;
		    	Send_COM1_Byte(Check_Record);					//校验核
		    	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);		//包尾
			}
			/**************************************************************************************\
			2,主控接收记录仪的驾驶员信息的响应(不管是主控主动查询的还是记录仪主动发送的,均为同一个命令字)
				因为需要显示屏实时的显示当前记录仪IC卡中的驾驶员信息。所以有一些特殊的处理方式
				A,主控系统重新上电或者是系统程序重新启动的时候,则需要先进行一次进行采集记录仪当前驾驶员信息
					的命令。
				B,主控已经开机,正常运行的过程中,如果此时记录仪的驾驶员信息更新,则需要记录仪主动发送一个
					当前驾驶员信息的命令给主控。

				不管是通过什么方式,主控系统只要得到一次当前记录仪的驾驶员信息,则需要将此驾驶员的信息
				存储在FLASH中。并设置需要发送驾驶员信息给显示屏的标志。

				在系统程序运行过程中,如果判断显示中断处于开机的状态,并有发送驾驶员标志给显示屏。
			\**************************************************************************************/
			else if(nCmd==K_GET_DRIVEDATA_E_ECHO)
			{
				gReceive_Record_Info_Timer=0;
				SRAM_Init();
				SRAM_Write(SRAM_DRIVER_INFO_VAILD,VAILD_2);
				for(i=0;i<29;i++)
				{
					nTemp=SRAM_Read(SRAM_RECORD_S+7+i);
					SRAM_Write(SRAM_DRIVER_INFO_CODE+i,nTemp);
				}
				///////////////////////////////
				gDisp_Buffer_Point=0;
				if(gDisp_Buffer_Point+37<=sizeof(gDisp_Buffer))
				{
					gDisp_Buffer[gDisp_Buffer_Point]=37;
					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]=35;
					gDisp_Buffer_Point++;
					gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_IC_INFO_DOWN;
					gDisp_Buffer_Point++;
					SRAM_Init();
					for(i=0;i<29;i++)
					{
		 				gDisp_Buffer[gDisp_Buffer_Point]=SRAM_Read(SRAM_DRIVER_INFO_CODE+i);
						gDisp_Buffer_Point++;
					}
					gDisp_Buffer[gDisp_Buffer_Point]='$';
					gDisp_Buffer_Point++;
					gDisp_Buffer[gDisp_Buffer_Point]='&';
					gDisp_Buffer_Point++;
					gGet_Driver_Info_Count=0;
					//gDriver_Info=WAIT_SEND_DRIVER_INFO;
				}
				/////////////////////////////////
			}
			/**************************************************************************************\
			3,收到主控向记录仪设置间隔记录的记录仪的响应
			\**************************************************************************************/
			else if(nCmd==K_SET_INTERDISTANCE_ECHO)
			{
				gPublic_Flag|=SET_DISTANCE_OK_F_1;
				gSet_Distance_Info_Count=0;
			}
			/**************************************************************************************\
			4,收到主控向记录仪设置时间的记录仪的响应
			\**************************************************************************************/
			else if(nCmd==G_SET_TIME_EHCO)
			{
				gPublic_Flag&=~SET_RECORD_TIME_F_1;
				gPublic_Flag|=CHECK_TIME_F_1;
			}
			break;
		}
		/*
		========================================================================
		二,消息类型为1的消息包(转移给中心的数据)
			如果记录仪有数据发送给中心,则首先需要进行TCP登陆操作
			如果登陆操作失败,则可以判断是否允许SMS的形式发送
		========================================================================
		*/
		case	CENTER_TYPE:
		{
			gRecord_Data_Timer=0;
			gStatus2_Flag&=~RECORD_VAILD_F_1;
			gReceive_Record_Info_Timer=0;
			gStatus=CENTER_TYPE;
			gOther_Flag|=RECORD_DATA_F_1;
			gOther_Flag|=ALLOW_SEND_RECORD_F_1;
			SRAM_Init();
			SRAM_Write(SRAM_SEND_VAILD,VAILD_2);
			SRAM_Write(SRAM_SEND_LENGTH_H,(iLength-3)/0x100);
			SRAM_Write(SRAM_SEND_LENGTH_L,(iLength-3)%0x100);
			for(i=0;i<iLength-3;i++)
			{
				nTemp=SRAM_Read(SRAM_RECORD_S+1+i);
				SRAM_Write(SRAM_SEND_S+i,nTemp);
			}
			Judge_SMS_Way();
			break;
		}
		/*
		========================================================================
		三,消息类型为2的消息包(转移给显示屏的数据)
		========================================================================
		*/
		case	DISP_TYPE:
		{
			gRecord_Data_Timer=0;
			gStatus2_Flag&=~RECORD_VAILD_F_1;
			gStatus=DISP_TYPE;
			if(gDisp_Buffer_Point+iLength+8<=sizeof(gDisp_Buffer))
			{
				gDisp_Buffer[gDisp_Buffer_Point]=iLength+8;
				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]=iLength+6;
				gDisp_Buffer_Point++;
				gDisp_Buffer[gDisp_Buffer_Point]=DISP_ASK_RECORD_INFO_ECHO_DOWM;
				gDisp_Buffer_Point++;
				for(i=0;i<iLength;i++)
				{
					gDisp_Buffer[gDisp_Buffer_Point] = SRAM_Read(SRAM_RECORD_S+i) ;
					gDisp_Buffer_Point++;
				}
				gDisp_Buffer[gDisp_Buffer_Point]='$';
				gDisp_Buffer_Point++;
				gDisp_Buffer[gDisp_Buffer_Point]='&';
				gDisp_Buffer_Point++;
			}
			break;
		}
		default:
			break;
	}
}
/********************************************************\
*	函数名:Deal_Record_Command()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
unsigned char Check_Record_Time(void)
{
	SRAM_Init();
	if(   (gGeneral_Flag&GPS_VALID_F_1)
		&&((gPublic_Flag&SET_RECORD_TIME_F_1)==0)
		&&(gSecond>=55) )
	{
		if(gYear!=SRAM_Read(SRAM_RECORD_S+8) )				return(1);
		else if(gMonth!=SRAM_Read(SRAM_RECORD_S+9))			return(1);
		else if(gDate !=SRAM_Read(SRAM_RECORD_S+10))		return(1);
		else if(gHour !=SRAM_Read(SRAM_RECORD_S+11))		return(1);
		else if(gMinute!=SRAM_Read(SRAM_RECORD_S+12))		return(1);
		else												return(0);
	}
	else
	{
		return(0);
	}
}

⌨️ 快捷键说明

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