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

📄 do_record.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************\
*	文件名:  Do_Record.h
*	创建时间:2005年6月21日
*	创建人:  
*	版本号:  1.00
*	功能:
*
*	修改历史:(每条详述)
	补充说明:与外接的行使记录仪相连接,串口1,9600,奇校验,全双工通讯方式
\********************************************************/
#include <msp430x14x.h>
#include <stdlib.h>
#include "General.h"
#include "Do_SRAM.h"
#include "D_Buffer.h"
#include "Other_Define.h"
#include "Uart01.h"
#include "Sub_C.h"
#include "Record_Protocol.h"
#include "Define_Bit.h"
#include "M22_AT.h"
#include "Disp_Protocol.h"
#include "Do_Other.h"
#include "W_Protocol.h"
#include "Record_Protocol.h"
#include "TA_Uart.h"
/*
#include "SPI45DB041.h"
#include "W_Protocol.h"
#include "Handle_Protocol.h"
#include "Do_Record.h"
#include "Define_Bit.h"
#include "Main_Init.h"
#include "Check_GSM.h"
#include "Do_Reset.h"
#include "Do_M22.h"
#include "Do_Handle.h"
#include "Do_GPS.h"
#include "Do_Disp.h"
#include "Do_Other.h"
*/
void Deal_Record_Data(unsigned int Length);
unsigned char Check_Record_Time(void);
/********************************************************\
*	函数名:Do_Record_Module()
	作用域:外部文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)

\********************************************************/
void Do_Record_Module(void)
{
	unsigned int i;
	unsigned int k;
	unsigned char DataTemp=0;
	if( (gReceive1_Over_Count>60)&&(gReceive1_Point>SRAM_RECORD_S)&&((gOther_Flag&RECORD_DATA_F_1)==0) )
	{
		//判断是否正确的数据包
		i=gReceive1_Point;
			//先判断包尾
		if( (SRAM_Read(i-1)==0x0a)&&(SRAM_Read(i-2)==0x0d) )
		{
			//如果包尾正确,则需要判断包长
			k=0;
			k=SRAM_Read(SRAM_RECORD_S+4);
			k<<=8;
			k=k+SRAM_Read(SRAM_RECORD_S+5);
			k=k+10;
			if( (i-SRAM_RECORD_S)==k )
			{
				if((gGeneral_Flag&TCP_PHONE_F_1)==0 )
				{
					#ifdef Debug_GSM_COM1
		            Send_COM1_Byte(ASCII((i-SRAM_RECORD_S)/0x100));
		            Send_COM1_Byte(ASCII(((i-SRAM_RECORD_S)%0x100)/0x10));
		            Send_COM1_Byte(ASCII((i-SRAM_RECORD_S)%0x10));
		            Send_COM1_Byte(':');
		            Send_COM1_Byte(ASCII(k/0x100));
		            Send_COM1_Byte(ASCII((k%0x100)/0x10));
		            Send_COM1_Byte(ASCII(k%0x10));
					Send_COM1_Byte('[');
					for(n=SRAM_RECORD_S;n<i;n++)
					{
						DataTemp=SRAM_Read(n);
						Send_COM1_Byte(ASCII(DataTemp/0x10));
						Send_COM1_Byte(ASCII(DataTemp%0x10));
						Clear_Exter_WatchDog();
					}
					Send_COM1_Byte(']');
					Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
					#endif
				}
				Deal_Record_Data(i-SRAM_RECORD_S);
				gNO_Sram_Data_Timer=0;
			}
		}
		gReceive1_Point=SRAM_RECORD_S;
	}
	//如果超过20秒无记录仪的数据发送,则需要清除外部SRAM.
	if(gNO_Sram_Data_Timer>20)
	{
		gNO_Sram_Data_Timer=0;
		gReceive1_Point=SRAM_RECORD_S;
		gReceive1_Over_Count=0;
		Send_COM1_String((unsigned char *)CLEAR_SRAM,sizeof(CLEAR_SRAM));
	}
}
/********************************************************\
*	函数名:Deal_Record_Command()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:将接收到的完整的数据包已经放在
	外部SRAM的SRAM_DO_S-----SRAM_DO_E区域。
	则这个子程序部分是需要将命令字提取并分析出来
\********************************************************/
void Deal_Record_Data(unsigned int Length)
{
	unsigned char nCmd=0;
	unsigned int iLength=0,i=0;
	unsigned char nStatus;
	unsigned char nTemp=0;
	unsigned char Check_Record=0;
	iLength=Length;
	SRAM_Init();
	nStatus=SRAM_Read(SRAM_RECORD_S);
	switch(nStatus)
	{
		//1,消息类型为0的消息包
		case	NORMAL_TYPE:
		{
			gRecord_Data_Timer=0;
			gStatus2_Flag&=~RECORD_VAILD_F_1;
			gReceive_Record_Info_Timer=0;
			gStatus=NORMAL_TYPE;
			SRAM_Init();
			//读取命令字
			nCmd=SRAM_Read(SRAM_RECORD_S+3);
			/**************************************************************************************\
			1,	返回记录仪发送的记录仪系统数据:信息有,当前速度(米/秒)
				年,月,日,时,分,秒,记录仪状态字节1,记录仪状态字节2
				补充说明:A:速度需要用来做超速和制动方面的处理。同时定期向显示屏显示
						  B:如果判断记录仪的时间和GPS有效的状态下,误差超过2秒则,需要对记录仪的时间进行矫正,
						     同时,如果GPS无效果的状态下,GPS的时间也无效果,则转发记录仪的时间到显示屏。
						  C:记录仪的状态字节1的信息包括如下:	BIT0;间隔距离上发的数据时间到。
						  										BIT1;疲劳驾驶提示标志。
						  										BIT2;疲劳报警标志
						  										BIT3;记录仪打印机的工作状态
						  										BIT4;记录仪USB的工作状态

			00 55 7A 40 00 09 00 00 05 09 02 11 37 09 02 00 45 0D 0A
			\************************************************************************************/
			if(nCmd==K_RECEIVE_RECORDDATA)
			{
				//1,速度的处理
				SRAM_Init();
				gSpeed_Record=SRAM_Read(SRAM_RECORD_S+7);
				gSpeed_Disp=gSpeed_Record;
				gRecord_Null_Count=0;
				gPublic_Flag &=~ RECORD_NULL_F_1;
				//2,年月日时分秒的处理,如果判断记录仪的时间与GPS的时间误差超过,则需要对记录仪进行时间矫正的设置,但只设置一次
				i=Check_Record_Time();
				if(   (i==1)
					&&((gPublic_Flag&CHECK_TIME_F_1)==0)	)
				{
					gPublic_Flag|=SET_RECORD_TIME_F_1;
				}
				//------------------------------
				//3,状态位的处理
				gRecord_Status=SRAM_Read(SRAM_RECORD_S+14);
				//3-1,判断BIT0,属于需要发送当前定位点的数据
				if(   (gRecord_Status&J_DISTANCE_DATA_F_1)
					&&(gCycle_Send_Status==TRACK_DATA_DISTANCE)
					&&((gPublic_Flag&ALLOW_SEND_DISTANCE_F_1)==0)	 )
				{
//					Send_COM1_String( (unsigned char *)DISTANCE_DATA,sizeof(DISTANCE_DATA) );
					gPublic_Flag|=ALLOW_SEND_DISTANCE_F_1;
				}
				else
				{
					if(gPublic_Flag&ALLOW_SEND_DISTANCE_F_1)
					{
						if( (gInternal_Flag&SEND_CIRCLE_F_1)==0 )
						{
							Circle_Data_TCP(VEHICLE_RUNDATA_UP,0);
							gInternal_Flag|=SEND_CIRCLE_F_1;
							gPublic_Flag&=~ALLOW_SEND_DISTANCE_F_1;
							//处于GSM的工作方式下
							if(gM22_Status==GSM_WORK)
							{
								//属于常连在线的方式
								if((gON_OFF_Temp1&DISTANCE_TCP_ON_1)==0)
								{
									gInternal_Flag&=~SEND_CIRCLE_F_1;
									gInternal_Flag&=~ALLOW_DATA_F_1;
									gCircle_Buffer_Point=0;
								}
								//属于不常在线的方式,则需要登陆
								else
								{
									//在登陆部分有处理和判断
								}
							}
						}
					}
				}
				//3-2,判断BIT1,属于疲劳驾驶提示的标志
				if(gRecord_Status&J_TIRE_NOTICE_F_1)
				{
					gFore_Tire_Count++;
					if(gFore_Tire_Count>20)
					{
						gDisp_Status|=S_TIRE_NOTICE_F_1;
						gFore_Tire_Count=0;
					}
					else
					{
						gDisp_Status&=~S_TIRE_NOTICE_F_1;
					}
				}
				else
				{
					gFore_Tire_Count=0;
					gDisp_Status&=~S_TIRE_NOTICE_F_1;
				}
				//3-3,判断BIT2,属于疲劳驾驶报警的标志
				if(gRecord_Status&J_TIRE_ALARM_F_1)

⌨️ 快捷键说明

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