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

📄 do_handle.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 4 页
字号:
/********************************************************\
*	文件名:  Do_Handle.h
*	创建时间:2004年10月20日
*	创建人:  
*	版本号:  1.00
*	功能:
*
*	修改历史:(每条详述)

\********************************************************/
#include <msp430x14x.h>
#include "Handle_Protocol.h"
#include "SPI45DB041.h"
#include "TA_Uart.h"
#include "General.h"
#include "D_Buffer.h"
#include "Other_Define.h"
#include "Define_Bit.h"
#include "Uart01.h"
#include "Sub_C.h"
#include "M22_AT.h"
#include "Do_Handle.h"
#include "W_Protocol.h"
#include "Disp_Protocol.h"
#include "Do_SRAM.h"
#include "Msp430_Flash.h"

/*
#include "Check_GSM.h"
#include "Do_Reset.h"
#include "Main_Init.h"
#include "Do_GSM.h"
*/
//#define Debug_GSM_COM1
unsigned char Check_Handle_Command(void);
void Handle_Dailing(unsigned char nPoint_Temp);
void Handle_Answer(void);
void Write_Dail_Record(unsigned char nPhone_Length);
void Read_Dail_Record(unsigned char nItem);
void Write_Talk_Record(unsigned char nPhone_Length);
void Read_Talk_Record(unsigned char nItem);
void Handle_ReadOnePage_Data(unsigned char Page_H,unsigned char Page_L);
//void Handle_EraseOnePage_Data(unsigned char Page_H,unsigned char Page_L);
void Move_Right_Item(unsigned char Start_Item,unsigned char End_Item,unsigned char Move_Count);
//void Handle_Set_NumPhone(void);
//void Handle_Set_TCP_Par(void);
//unsigned char  Check_All_Flash(void);
unsigned int  Check_Allow_Phone(unsigned char Length_Phone);
void Read_Phone_Note_Record(unsigned char nItem);
void Handle_Set_Par(unsigned char nLength);
void Handle_Set_TcpIp(void);
void Handle_Set_Time(void);
void Handle_Ask_Par(void);
void Handle_Set_SMS(void);
void Handle_Set_Phone(unsigned char nLength);
void Handle_Set_Dis(void);
void Handle_Test_Sram(void);
/********************************************************\
*	函数名:Do_Handle_Module
	作用域:外部文件调用
*	功能:	与手柄通讯模块。
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:
	收到的每一个手柄数据存储在gGeneral_Buffer[]中。
	由Check_Handle_Command()子程序处理接收在gGeneral_Buffer中的数据
	根据信令的不一样,需要分别处理,需要通过有G20的AT操作的指令则直接
	存储在buffer1中的0x5D----0x7A 区域共30个字节。

	手柄与电话有关的AT指令包括如下几类
	这里只存储AT指令的类型有如下几类:
	1,拨号,2,挂机,3,接听,4,DMTF,5,音量调节,6,CSCA的设置
	根据上面的情形,以30个字节足够存储的

	还有一类的指令则是需要直接处理的,比如说电话记录的查询,密码设置等等

	0x5D----0x7A 区域的分配如下:
	0x5D--  存储后面数据是否处理完的标志,为1则表示后面的数据未处理,为0则表示
			已经处理完毕,可以在填写下个指令。
	0x5E--	存储相关的AT指令的类型。如手柄拨号,挂机等等
	0x5F--	存储后面数据的长度,如需要拨号的电话号码等。如果后面无任何数据,则写0。
\********************************************************/
void Do_Handle_Module(void)
{
	unsigned int i=0,k=0;
	unsigned char nHandle_Piont_Temp=0;
	//指令的重发机制,目前只针对主控发送给手柄的挂机指令和接通指令
	if(   (gSend_Handle_Timer>2)
		&&((gSys_Handle==MAIN_HANG_UP)||(gSys_Handle==MAIN_TALKING))  )
	{
		gSend_Handle_Timer=0;
		Send_COM3_Load(4,gSys_Handle,0);
		gRe_Send_Count++;
		if(gRe_Send_Count>=5)
		{
			gRe_Send_Count=0;
			gSys_Handle=0;
		}
	}
	if(gDTMF_SAVE[0]>0)
	{
		SRAM_Init();
		if(SRAM_Read(PHONE_AT_2)==NULL_2)
		{
			OperateSPIEnd();
			k=gDTMF_SAVE[1];
			gDTMF_SAVE[0]--;
			for(i=0;i<gDTMF_SAVE[0];i++)
			{
				gDTMF_SAVE[i+1]=gDTMF_SAVE[i+2];
			}
			SRAM_Init();
			SRAM_Write(PHONE_AT_2+0,VAILD_2);
			SRAM_Write(PHONE_AT_2+1,H_DTMF);
			SRAM_Write(PHONE_AT_2+2,1);
			SRAM_Write(PHONE_AT_2+3,k);
		}
		OperateSPIEnd();
	}
	if( (gHandle_Receive_Over>40)&&(gHandle_Buffer_Point>0) )
	{
		#ifdef Debug_GSM_COM1
		Send_COM1_Byte(ASCII(gHandle_Buffer_Point/10));
		Send_COM1_Byte(ASCII(gHandle_Buffer_Point%10));
		Send_COM1_Byte('[');
		Send_COM1_String(gHandle_Buffer,gHandle_Buffer_Point);
		Send_COM1_Byte(']');
		Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
		#endif
		//作为判断手柄是否被摘除掉或者手柄出现程序异常的判
		//接收完数据,则开始处理数据
		k=Check_Handle_Command();
		nHandle_Piont_Temp=gHandle_Buffer_Point;
		gHandle_Buffer_Point=0;
		switch(k)
		{
			/********************************************************\
			0,手柄的指令ECHO(手柄命令)
			\********************************************************/
			case	HANDLE_ECHO:
			{
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				//判断返回的是那一个指令的ECHO
				if( (gSys_Handle==MAIN_HANG_UP)&&(gHandle_Buffer[3]==MAIN_HANG_UP) )
				{
					gRe_Send_Count=0;
					gSys_Handle=0;
				}
				else if( (gSys_Handle==MAIN_TALKING)&&(gHandle_Buffer[3]==MAIN_TALKING) )
				{
					gRe_Send_Count=0;
					gSys_Handle=0;
				}
				break;
			}
			/********************************************************\
			1,手柄拨号(手柄命令)
			\********************************************************/
			case	HANDLE_DIAL:
			{
				gCommon_Flag&=~CHECK_RINGPHONE_F_1;
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				k=SRAM_Read(PHONE_AT_2);
				i=SRAM_Read(PHONE_AT_2+1);
				if( (i==H_HUNGUP)&&(k==VAILD_2) )
				{
					Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_ERROR);
				}
				else
				{
					Handle_Dailing(nHandle_Piont_Temp);
				}
				break;
			}
			/********************************************************\
			2,手柄接听(手柄命令)
			\********************************************************/
			case 	HANDLE_ANSWER:
			{
				gCommon_Flag&=~CHECK_RINGPHONE_F_1;
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
				Handle_Answer();
				break;
			}
			/********************************************************\
			3,手柄挂机(手柄命令)
			\********************************************************/
			case	HANDLE_HANGUP:
			{
				gCommon_Flag&=~CHECK_RINGPHONE_F_1;
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				Send_COM3_Load(5,MAIN_RETURN_PHONE_ECHO,COMMAND_OK);
				//如果这个时候处于监听状态,则下面不用处理
				if( (gGeneral_Flag&MONITOR_ON_F_1)||(gPhone_Status==ACTIVE_MONITOR))
				{
					gHandle_Buffer_Point=0;
				}
				else
				{
					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);
				}
				break;
			}
			/********************************************************\
			4,手柄调节音量(手柄命令)
			\********************************************************/
			case	HANDLE_VOL:
			{
				gCommon_Flag&=~CHECK_RINGPHONE_F_1;
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				SRAM_Init();
				SRAM_Write(PHONE_AT_2+0,VAILD_2);
				SRAM_Write(PHONE_AT_2+1,H_VOLADJ);
				SRAM_Write(PHONE_AT_2+2,1);
				SRAM_Write(PHONE_AT_2+3,gHandle_Buffer[3]);
				break;
			}
			/********************************************************\
			5,手柄的DTMF(手柄命令)
			\********************************************************/
			case	HANDLE_DTMF:
			{
				gCommon_Flag&=~CHECK_RINGPHONE_F_1;
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				if(gDTMF_SAVE[0]<sizeof(gDTMF_SAVE)-1)
				{
					gDTMF_SAVE[0]++;
					gDTMF_SAVE[gDTMF_SAVE[0]]=gHandle_Buffer[3];
				}
				break;
			}
			/********************************************************\
			6,手柄读最新拨出电话号码(手柄命令)
			\********************************************************/
			case	HANDLE_READ_DIAL:
			{
				gCommon_Flag&=~CHECK_RINGPHONE_F_1;
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				if(gPhone_Status==ACTIVE_MONITOR);
				else if(gGeneral_Flag&TCP_PHONE_F_1)
				{
					gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
				}
				//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
				Read_Dail_Record(gHandle_Buffer[3]);
				gDelay_Flash_Timer=0;
				break;
			}
			/********************************************************\
			7,手柄读前一个拨出电话号码(手柄命令)
			\********************************************************/
			case	HANDLE_UP_DIAL:
			{
				gCommon_Flag&=~CHECK_RINGPHONE_F_1;
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				/*
				if(gPhone_Status==ACTIVE_MONITOR);
				else if(gGeneral_Flag&TCP_PHONE_F_1)
				{
					gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
				}
				&*/
				//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
				Read_Dail_Record(gHandle_Buffer[3]);
				gDelay_Flash_Timer=0;
				break;
			}
			/********************************************************\
			8,手柄读后一个拨出电话号码(手柄命令)
			\********************************************************/
			case	HANDLE_DOWN_DIAL:
			{
				gCommon_Flag&=~CHECK_RINGPHONE_F_1;
				gHandle_OnLine_Timer=0;
				gStatus1_Flag &=~ HANDLE_ON_0_F_1;
				gStatus1_Flag |= HANDLE_ON_1_F_1;
				/*
				if(gPhone_Status==ACTIVE_MONITOR);
				else if(gGeneral_Flag&TCP_PHONE_F_1)
				{
					gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
				}
				*/
				//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
				Read_Dail_Record(gHandle_Buffer[3]);
				gDelay_Flash_Timer=0;
				break;
			}
			/********************************************************\
			9,手柄读最新一次的通话记录(手柄命令)
			\********************************************************/
			/*
			case	HANDLE_READ_TALK:
			{
				gHandle_OnLine_Timer=0;
				if(gPhone_Status==ACTIVE_MONITOR);
				else if(gGeneral_Flag&TCP_PHONE_F_1)
				{
					gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
				}
				//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
				Read_Talk_Record(gHandle_Buffer[3]);
				gDelay_Flash_Timer=0;

				break;
			}
			*/
			/********************************************************\
			10,手柄读前一个通话记录(手柄命令)
			\********************************************************/
			/*
			case	HANDLE_UP_TALK:
			{
				gHandle_OnLine_Timer=0;
				if(gPhone_Status==ACTIVE_MONITOR);
				else if(gGeneral_Flag&TCP_PHONE_F_1)
				{
					gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
				}
				//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
				Read_Talk_Record( gHandle_Buffer[3] );
				gDelay_Flash_Timer=0;

				break;
			}
			*/
			/********************************************************\
			11,手柄读后一个通话记录(手柄命令)
			\********************************************************/
			/*
			case	HANDLE_DOWN_TALK:
			{
				gHandle_OnLine_Timer=0;
				if(gPhone_Status==ACTIVE_MONITOR);
				else if(gGeneral_Flag&TCP_PHONE_F_1)
				{
					gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
				}
				//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
				Read_Talk_Record(gHandle_Buffer[3]);
				gDelay_Flash_Timer=0;

				break;
			}
			*/
			/********************************************************\
			12,手柄送给主控存储的通话记录(手柄命令)
			\********************************************************/
			/*
			case	HANDLE_SEND_TALK:
			{
				gHandle_OnLine_Timer=0;
				if(gPhone_Status==ACTIVE_MONITOR);
				else if(gGeneral_Flag&TCP_PHONE_F_1)
				{
					gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;
				}
				//while(gDelay_Flash_Timer<3) {Clear_Exter_WatchDog();}
				Init_Buffer2();
				Write_Talk_Record(nHandle_Piont_Temp);
				gDelay_Flash_Timer=0;
				Init_Buffer2();

				break;
			}
			*/
			/********************************************************\
			13,手柄送被盗设防命令(手柄命令),取消
			\********************************************************/
			/*
			case	HANDLE_SET_DEFENCE:
			{
				gHandle_OnLine_Timer=0;
				break;
			}
			*/
			/********************************************************\
			14,手柄解除设防命令(手柄命令)
			\********************************************************/
			/*
			case	HANDLE_FREE_DEFENCE:
			{
				gHandle_OnLine_Timer=0;
				break;
			}
			*/
			/********************************************************\
			15,手柄提取短消息中心号码(手柄命令,暂时取消)
			\********************************************************/
			/*
			case	HANDLE_ASK_CENTER_NUM:
			{
				gHandle_OnLine_Timer=0;
				break;
			}
			*/
			/********************************************************\
			16,手柄设置短消息中心号码(手柄命令,暂时取消)
			\********************************************************/
			/*
			case	HANDLE_SET_CENTER_NUM:
			{
				break;
			}
			*/
			/********************************************************\
			17,手柄更改设置密码(手柄命令)
			\********************************************************/
			/*
			case	HANDLE_PASSWORD:
			{
				break;
			}
			*/
			/********************************************************\
			18,手柄进行对车载终端进行出厂设置操作(初始化系统)
			\********************************************************/
			case	HANDLE_DEFAULT_SET:
			{
				gHandle_OnLine_Timer=0;
				//1,清除信息区1
				OperateSPIEnd();EraseOnePage(FLASH_INFO1_ONE_2);OperateSPIEnd();
				OperateSPIEnd();EraseOnePage(FLASH_INFO1_TWO_2);OperateSPIEnd();
				Clear_Exter_WatchDog();
				RX2_Ready();RX3_Ready();RX4_Ready();
				//2,清除信息区2
				OperateSPIEnd();EraseOnePage(FLASH_INFO2_ONE_2);OperateSPIEnd();
				OperateSPIEnd();EraseOnePage(FLASH_INFO2_TWO_2);OperateSPIEnd();
				Clear_Exter_WatchDog();
				RX2_Ready();RX3_Ready();RX4_Ready();
				//3,清除电话号码拨出和通话记录区域
				OperateSPIEnd();EraseOnePage(FLASH_DIAL_PHONE);OperateSPIEnd();
				OperateSPIEnd();EraseOnePage(FLASH_RECORD_PHONE_2);OperateSPIEnd();
				Clear_Exter_WatchDog();
				RX2_Ready();RX3_Ready();RX4_Ready();
				//4,清除存储区域数据的区域
				OperateSPIEnd();EraseOnePage(FLASH_AREA_ONE_2);OperateSPIEnd();
				OperateSPIEnd();EraseOnePage(FLASH_AREA_TWO_2);OperateSPIEnd();
				Clear_Exter_WatchDog();
				RX2_Ready();RX3_Ready();RX4_Ready();
				//5,清除存储线路数据的区域1的数据
				OperateSPIEnd();EraseOnePage(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
				OperateSPIEnd();EraseOnePage(FLASH_LINEDATA1_TWO_2);OperateSPIEnd();
				Clear_Exter_WatchDog();
				RX2_Ready();RX3_Ready();RX4_Ready();
				//6,清除存储线路数据的区域2的数据
				OperateSPIEnd();EraseOnePage(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
				OperateSPIEnd();EraseOnePage(FLASH_LINEDATA2_TWO_2);OperateSPIEnd();
				Clear_Exter_WatchDog();
				RX2_Ready();RX3_Ready();RX4_Ready();
				//7,清除存储电话号码本的区域数据
				OperateSPIEnd();EraseOnePage(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
				OperateSPIEnd();EraseOnePage(FLASH_PHONE_INFO_TWO_2);OperateSPIEnd();
				Clear_Exter_WatchDog();
				RX2_Ready();RX3_Ready();RX4_Ready();
				//
				for(i=0;i<128;i++)
				{
					gGeneral_Buffer[i]=0xFF;
				}
				Write_SegAB(0);
				gTimer=0;
				while(gTimer<3000){Clear_Exter_WatchDog();}
				RX2_Ready();RX3_Ready();RX4_Ready();
				Write_SegAB(1);
				gTimer=0;
				while(gTimer<1500){Clear_Exter_WatchDog();}
			    TACTL|=TASSEL1;         //输入时钟选择MCLK
			    TACTL|=TACLR;           //定时器A清除位CLR清零

⌨️ 快捷键说明

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