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

📄 do_handle.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 4 页
字号:
			    TACTL|=MC1;             //定时器A选择连续增记数模式
			    TAR=0;                  //定时器A的值清零
			    TACCTL0|=OUT;           //TXD2 Idle as Mark
				TACCTL1|=OUT;           //TXD3 Idle as Mark
				TACCTL2|=OUT;           //TXD4 Idle as Mark
				gON_OFF_Temp0=0xFF;gON_OFF_Temp1=0xFF;gON_OFF_Temp2=0xFF;
				gAlarm_Type=0;gWatch_Type=0;gCycle_Send_Status=NOP_DATA;
				gStatus2_Flag&=~ROB_ALARM_F_1;
				//设防状态清除
				gInternal_Flag&=~VEHICLE_DEFENCE_F_1;
				gStatus1_Flag&=~DEFENCE_STATUS_F_1;
				//行车轨迹上传的间隔
				gCycle_GSM=0;gCycle_TCP=0;
				//TCP的IP地址无效
				gGeneral_Flag&=~NUM1_VAILD_F_1;
				gGeneral_Flag&=~TCP_IP_VALID_1;
				gStatus2_Flag&=~IP_VAILD_F_1;
				gStatus2_Flag&=~TCP_ON_OFF_F_1;
				RX2_Ready();RX3_Ready();RX4_Ready();
				Waiting_Allow_Send();
				Send_COM3_SubProgram(5,MAIN_RETURN_INIT,COMMAND_OK);
				gTimer=0;
				gDelay_Flash_Timer=0;
				while(gTimer<50){}
				break;
			}
			/********************************************************\
			19,手柄返回是否开机的状态(手柄命令)
			\********************************************************/
			case	HANDLE_STATUS:
			{
				//如果接收到此命令,则根据命令字,来判断是否车载电话是否处于开机和关机状态,同时清除计时判断手柄未接的计数变量
				//判断手柄显示终端关机
				gHandle_OnLine_Timer=0;
				if( gHandle_Buffer[3]==0 )
				{
					gStatus1_Flag |= HANDLE_ON_0_F_1;
					gStatus1_Flag &=~ HANDLE_ON_1_F_1;
				}
				//判断手柄显示终端开机
				else if ( gHandle_Buffer[3]==1 )
				{
					gStatus1_Flag &=~ HANDLE_ON_0_F_1;
					gStatus1_Flag |= HANDLE_ON_1_F_1;
				}
				break;
			}
			/********************************************************\
			20,手柄查询指定位置的电话号码本的内容(手柄命令)
			\********************************************************/
			case	HANDLE_PHONE_NOTE:
			{
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				Read_Phone_Note_Record(gHandle_Buffer[3]);
				break;
			}
			/********************************************************\
			A1,手柄对指定页数据的擦除(测试命令)
			\********************************************************/
			/*
			case	HANDLE_ERASE_PAGEDATA:
			{
				break;
			}
			*/
			/********************************************************\
			A2,手柄对指定页数据的读取(测试命令)
			\********************************************************/
			case	HANDLE_READ_PAGEDATA:
			{
				gHandle_OnLine_Timer=0;
				Handle_ReadOnePage_Data(gHandle_Buffer[3],gHandle_Buffer[4]);
				break;
			}
			/********************************************************\
			A3,通过手柄(COM3)设置目标电话号码1(测试命令)
			\********************************************************/
			/*
			case	HANDLE_SET_PHONE_NUM:
			{
				break;
			}
			*/
			/********************************************************\
			A4,通过手柄(COM3)发送检查整个FLASH(测试命令)根据情况,则只检查buffer1和buffer2的情况
			\********************************************************/
			/*
			case	HANDLE_CHECK_FLASH:
			{
				break;
			}
			*/
			/********************************************************\
			A5,通过手柄(COM3)发送检查GPS数据格式有效性(测试命令)
			\********************************************************/
			/*
			case	HANDLE_CHECK_GPS:
			{
				break;
			}
			*/
			/********************************************************\
			A6,通过手柄(COM3)使GSM模块自发自收一个SMS的命令(测试命令)
			\********************************************************/
			/*
			case	HANDLE_CHECK_SMS:
			{
				break;
			}
			*/
			/********************************************************\
			A7,手柄接口调试监听语音电路(测试命令)
			\********************************************************/
			case	HANDLED_ACTIVE_MONITOR:
			{
				gHandle_OnLine_Timer=0;
				SRAM_Init();
				SRAM_Write(PHONE_AT_2+0,VAILD_2);
				SRAM_Write(PHONE_AT_2+1,M_DIAL);
				SRAM_Write(PHONE_AT_2+2,gHandle_Buffer[1]-4);
				for(i=0;i<gHandle_Buffer[1]-4;i++)
				{
					SRAM_Write(PHONE_AT_2+3+i,gHandle_Buffer[i+3]);
				}
				break;
			}
			/********************************************************\
			A8,手柄插除所有的历史轨迹的数据(测试命令)
			\********************************************************/
			/*
			case	HANDLE_ERASE_ALLPASS:
			{
				break;
			}
			*/
			/********************************************************\
			A8-1,测试外部SRAM的数据正确性(测试命令)
			\********************************************************/
			case	HANDLE_TEST_SRAM:
			{
				gHandle_OnLine_Timer=0;
				Handle_Test_Sram();
				break;
			}
			/********************************************************\
			A9,手柄设置相关TCP的参数(测试命令)
				做测试用,设置IP和PORT后,则需要开启进行TCP登陆的操作
				以测试此登陆TCP的功能正确
			\********************************************************/
			/*
			case	HANDLE_SET_TCP:
			{
				break;
			}
			*/
			/********************************************************\
			A10,手柄读取版本号(测试命令)
			\********************************************************/
			case	HNADLE_READ_EDITION:
			{
				gHandle_OnLine_Timer=0;
				if(gHandle_Buffer[3]=(char)(~gHandle_Buffer[2]))
				{
					Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
					Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
					for(i=0;i<35;i++)	Send_COM1_Byte('=');
					Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
					for(i=0;i<sizeof(String_A);i++)
					{
						Send_COM1_Byte(String_A[i]-1);
						Send_COM1_Byte(String_EDIT[i]+1);
					}
					for(i=0;i<35;i++)	Send_COM1_Byte('=');
					Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
					Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
				}
				break;
			}
			/********************************************************\
			A12,手柄接口设置基本参数(参数设置命令)
			\********************************************************/
			case	HANDLE_SET_PAR:
			{
				gHandle_OnLine_Timer=0;
				Handle_Set_Par(nHandle_Piont_Temp);
				break;
			}
			/********************************************************\
			A13,手柄接口设置TCP的相关参数(参数设置命令)
			\********************************************************/
			case	HANDLE_SET_TCPIP:
			{
				Handle_Set_TcpIp();
				break;
			}
			/********************************************************\
			A14,手柄接口设置时间间隔的相关参数(参数设置命令)
			\********************************************************/
			case	HANDLE_SET_TIME:
			{
				gHandle_OnLine_Timer=0;
				Handle_Set_Time();
				break;
			}
			/********************************************************\
			A15,手柄接口设置短消息预置的相关参数(参数设置命令)
			\********************************************************/
			case	HANDLE_SET_SMS:
			{
				gHandle_OnLine_Timer=0;
				Handle_Set_SMS();
				break;
			}
			/********************************************************\
			A16,手柄接口设置电话号码本设置置的相关参数(参数设置命令)
			\********************************************************/
			case	HANDLE_SET_PHONE_NOTE:
			{
				Handle_Set_Phone(nHandle_Piont_Temp);
				break;
			}
			/********************************************************\
			A17,手柄接口设置按距离上传数据的相关参数(参数设置命令)
			\********************************************************/
			case	HANDLE_SET_DISTANCE:
			{
				gHandle_OnLine_Timer=0;
				Handle_Set_Dis();
				break;
			}
			/********************************************************\
			A18,(查询所有参数设置命令的返回的命令)
			\********************************************************/
			case	HANDLE_ASK_PAR:
			{
				gHandle_OnLine_Timer=0;
				Handle_Ask_Par();
				break;
			}
			/********************************************************\
			A19,手柄端口人为设置目标号码在buffer1中错误(调试命令)
			\********************************************************/
			/*
			case	HANDLE_ERROR_NUM:
			{
				break;
			}
			*/
			/********************************************************\
			A20,手柄接口端口人为设置短消息中心号码在buffer1中错误(调试命令)
			\********************************************************/
			/*
			case	HANDLE_ERROR_CENTER:
			{
				break;
			}
			*/
			/********************************************************\
			A21,手柄端口 人为设置430两个信息扇区的错误(调试命令)
			\********************************************************/
			/*
			case	HANDLE_ERROR_IP:
			{

				for(i=0;i<128;i++)
				{
					gGeneral_Buffer[i]=0xFF;
				}
				Write_SegAB(gHandle_Buffer[3]);

				break;
			}
			*/
			/********************************************************\
			A22,手柄端口 人为设置在扇区中的错误(调试命令)
			\********************************************************/
			/*
			case	HANDLE_ERROR_PORT:
			{

				OperateSPIEnd();ReadOnePageToBuffer2((int)gHandle_Buffer[3]);OperateSPIEnd();
				if( (gHandle_Buffer[3]==1)||(gHandle_Buffer[3]==2) )
				{
					if(gHandle_Buffer[4]==0)			k=TARGET_NUMBER1_F_2;
					else if(gHandle_Buffer[4]==1)		k=GPRS_IP_ADDRESS1_F_2;
					WriteOneByteToBuffer2(k+gHandle_Buffer[5],0x47);
					for(i=0;i<gHandle_Buffer[6];i++)
					{
						WriteNextByteToBuffer2(0x47);
					}
					OperateSPIEnd();
					if(gHandle_Buffer[7]==1)
					{
						RFlash_Sector((int)gHandle_Buffer[3]);
					}
					else
					{
						WriteBuffer2ToPage((int)gHandle_Buffer[3]);
						gTimer=0;
						while(gTimer<1000){Clear_Exter_WatchDog();}
					}
				}

				break;
			}
			*/
			/********************************************************\
			A23,手柄端口人为设置在扇区中的错误(调试命令)
			\********************************************************/
			/*
			case	HANDLE_SET_ALARM:
			{
				break;
			}
			*/
			/********************************************************\
			A25,手柄端口 读取数据从外部的SRAM中相应的位置(调试命令)
			\********************************************************/
			/*
			case	HANDLE_READ_SRAM:
			{
				break;
			}
			*/
			/********************************************************\
			A26,手柄端口 设置命令初始化显示终端
			\********************************************************/
			case	HANDLE_CLEAR_DISP:
			{
				gHandle_OnLine_Timer=0;
				if(gDisp_Buffer_Point+6+2<=sizeof(gDisp_Buffer))
				{
					gDisp_Buffer[gDisp_Buffer_Point]=6+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]=6;
					gDisp_Buffer_Point++;
					gDisp_Buffer[gDisp_Buffer_Point]=DISP_CLEAR_DOWN;
					gDisp_Buffer_Point++;
					gDisp_Buffer[gDisp_Buffer_Point]='$';
					gDisp_Buffer_Point++;
					gDisp_Buffer[gDisp_Buffer_Point]='&';
					gDisp_Buffer_Point++;
				}
				break;
			}

			/********************************************************\
			其他
			\********************************************************/
			default:
				break;
		}
		gHandle_Buffer_Point=0;
		for(i=0;i<sizeof(gHandle_Buffer);i++)	gHandle_Buffer[i]=0;
	}
	//判断是否有需要发送的手柄数据
	else if( 	(gHandle_Receive_Over>20)
			  &&(gDisp_Receive_Over>20)
			  &&( (gCommon_Flag&ALLOW_R232_F_1)==0)
			  &&(gGPS_Receive_Over>20)
			  &&(gReceive1_Over_Count>20)  )
	{
		SRAM_Init();
		i=SRAM_Read(SHANDLE_DATA_VAILD);
		if(i!=NULL_2)
		{
			for(k=0;k<SRAM_Read(SHANDLE_DATA_VAILD+2);k++)
			{
				Send_COM3_Byte( SRAM_Read(SHANDLE_DATA_VAILD+1+k) );
			}
			RX3_Ready();
			SRAM_Init();
			SRAM_Write(SHANDLE_DATA_VAILD+0,NULL_2);
		}
	}
}

/********************************************************\
*	函数名:Check_Handle_Command
	作用域:本地文件调用
*	功能:	校验在手柄通讯完后,判断收到数据包的数据是否属于正确数据包
			并返回信令字
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
unsigned char Check_Handle_Command(void)
{
	if(gHandle_Buffer_Point<4)	return(0);							//最小的包长为4个字节,如果小于4说明数据包未收全
	if(gHandle_Buffer_Point!=gHandle_Buffer[1]) return(0);			//接收到的数据包与数据包里的字长不符合,也说明数据未收全
	if(gHandle_Buffer[0]!=0x24) return(0);							//收到的包头不正确
	if(gHandle_Buffer[gHandle_Buffer_Point-1]!=0x0d) return(0);		//收到的包尾不正确
	return(gHandle_Buffer[2]);
}
/********************************************************\
*	函数名:Handle_Dailing
	作用域:本地文件调用
*	功能:

*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Handle_Dailing(unsigned char nPoint_Temp)
{
	unsigned int i=0;
	unsigned char nTemp=0;
	unsigned char nFlag=0;
	nTemp=nPoint_Temp;

	//1,如果主控状态处于电话禁止呼出状态
	if(  (gON_OFF_Temp0&PHONE_OUT_ON)==0 )
	{
		//如果存在中心服务电话,则允许此号码拨出
		for(i=0;i<nTemp-4;i++)
		{
			gGeneral_Buffer[i]=gHandle_Buffer[3+i];
		}
		i=1;
		i=Check_Allow_Phone(nTemp-4);
		//判断书否属于112,110,119,13800138000,1860,1861,1001,等一类的服务号码
		if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE1,nTemp-4))				i=0;
		else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE2,nTemp-4))		i=0;
		else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE3,nTemp-4))		i=0;
		else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE4,nTemp-4))		i=0;
		else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE5,nTemp-4))		i=0;
		else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE6,nTemp-4))		i=0;
		else if(Compare_String(gGeneral_Buffer,(unsigned char *)PHONE7,nTemp-4))		i=0;
		//拨出号码与比较号码均不匹配,则不允许拨出此号码
		if(i==1)
		{
			nFlag=1;
		}
		else if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR) )
		{
			nFlag=2;
		}
		else if( (gGeneral_Flag&DAILING_UP_F_1)||(gPhone_Status==ACTIVE_HANDLE)||(gGeneral_Flag&RING_F_1) )
		{
			nFlag=3;
		}
		else
		{
			nFlag=0;
		}
	}
	//如果这个时候处于监听状态,或者处于正在监听的拨号状态下,则返回手柄一个busy信令
	else if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR) )
	{
		nFlag=2;
	}
	//如果这个时候处于手柄拨号,或者正在通话的状态,或者正在来电的状态下,则返回一个busy信令
	else if( (gGeneral_Flag&DAILING_UP_F_1)||(gPhone_Status==ACTIVE_HANDLE)||(gGeneral_Flag&RING_F_1) )
	{
		nFlag=3;
	}
	//返回一个电话禁止呼出
	if(nFlag==1)
	{
		Send_COM3_Load(4,MAIN_RETURN_NO_CALLOUT,0);
	}
	//返回给手柄一个Busy信令
	else if(nFlag==2)
	{
		Send_COM3_Load(4,MAIN_BUSY,0);
	}
	//返回挂机命令
	else if(nFlag==3)
	{
		SRAM_Init();
		SRAM_Write(PHONE_AT_2+0,VAILD_2);
		SRAM_Write(PHONE_AT_2+1,H_HUNGUP);
		SRAM_Write(PHONE_AT_2+2,0);
		//Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_ERROR);
	}
	//返回一个正常的拨出号码
	else
	{
		Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
		SRAM_Init();

⌨️ 快捷键说明

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