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

📄 smsrecv.c

📁 名厂车载GPS通信终端
💻 C
📖 第 1 页 / 共 5 页
字号:
	if(Get_Word_Bit(&alarm_flag,_OVERSPEED_ALM))Set_Word_Bit(vstate,14);
	if(IsGpsWireClose()&&Get_Word_Bit(&alarm_flag,_GPSEER_ALM))Set_Word_Bit(vstate,15);
	if(Get_Word_Bit(&alarm_flag,_POWER_ALM))Set_Word_Bit(vstate+1,0);
	if(Get_Word_Bit(&alarm_flag,_ACC_ALM))Set_Word_Bit(vstate+1,1);
	if(Get_Word_Bit(&alarm_flag,_VOLTAGE_ALM))Set_Word_Bit(vstate+1,2);
	if(IsGpsLongInvalid()&&Get_Word_Bit(&alarm_flag,_GPSEER_ALM))Set_Word_Bit(vstate+1,3);
	if(port[_TIMEKEEPER].status)Set_Word_Bit(vstate+1,4);
	if(Get_Word_Bit(&alarm_flag,_REMOTEERR_ALM))Set_Word_Bit(vstate+1,5);
	if(Get_Word_Bit(&alarm_flag,_REMOTE_ALM))Set_Word_Bit(vstate+1,6);
	if(Get_Word_Bit(&alarm_flag,_BAK_ALM))Set_Word_Bit(vstate+1,7);
	if(shut_down_status)Set_Word_Bit(vstate+1,8);
	if(Get_Word_Bit(&alarm_flag,_ENGINE_ALM))Set_Word_Bit(vstate+1,9);
	if(Get_Word_Bit(&alarm_flag,_BROKE_ALM))Set_Word_Bit(vstate+1,10);
	//if(Get_Word_Bit(&alarm_flag,_POWER_ALM))Set_Word_Bit(vstate+1,11);reserve//
	if(Get_Word_Bit(&alarm_flag,_DRAG_ALM))Set_Word_Bit(vstate+1,12);
	//reserve13//
	//the driver id14,15//
	Write_Word_Stream(vstate[0]);
	Write_Word_Stream(vstate[1]);
	Write_Word_Stream(0);//odometer;//
	Write_Word_Stream(0);
}

void Assemble_Sms_Tail(uchar attrib)
{ 
	uchar simid; //added by leon 050923
	simid = save.basevalue.mode.bit.simid; //added by leon 050923
	
	if((AutoDial.state==_BUSY)&&(AutoDial.attrib==0x00)) return;   // 0805  for listening
	
	Write_Absword_Stream(2,Get_Stream_Len()+4);
	write_crc_stream();
	Write_Byte_Stream(0x0d);
	Write_Byte_Stream(0x0a);
	if(attrib==_SMS_SPECIAL)
	{
		SendSM(Get_Stream_Headptr(),Get_Stream_Len(),FALSE,save.phonenumber.ManageCentreNumb[simid],_SMS_COMMON,_INDEX_SPECIAL);
	}
	else if(Get_Word_Bit(&alarm_flag,_ROP_ALM))
	{
		SendSM(Get_Stream_Headptr(),Get_Stream_Len(),FALSE,save.phonenumber.ManageCentreNumb[simid],attrib,_INDEX_SOS);
	}
	else
	{
		SendSM(Get_Stream_Headptr(),Get_Stream_Len(),FALSE,save.phonenumber.ManageCentreNumb[simid],attrib,_INDEX_NORMAL);
	}
}

void Assemble_Gprs_Tail(void)
{
	Write_Absword_Stream(2,Get_Stream_Len()+4);
	write_crc_stream();
	Write_Byte_Stream(0x0d);
	Write_Byte_Stream(0x0a);
	Send_Gprsdata(Get_Stream_Headptr(),Get_Stream_Len());
}

void Send_Gpsdata(uint type, uchar attrib,uchar need_sos)
{
	Assemble_Sms_Head(type);
	Write_Gps_Data(type,need_sos);
	if(gsmstatus.gprsdata == TRUE)          //added by leon 050913
		Assemble_Gprs_Tail();
	else
		Assemble_Sms_Tail(attrib);
}

void Send_Acc_On_proc(void)
{
	Send_Gpsdata(0x0140,_SMS_SUCCESS,0);
}

void Send_Acc_On(void)
{
	Stop_Timer(Send_Acc_On_Timer);
	if(gsmstatus.power == _GPRS_POWER_ON)
	{
		if(gsmstatus.mode&0xe0)
		{
#ifdef DEBUG_AT
			Uart1hex(gsmstatus.mode);
			Uart1Send("send a acc on");
#endif 
			Reset_Gprs();
			Start_Timer(Send_Acc_On_Timer,30,SECOND);
		}
		else
		{
			if(gsmstatus.gprsdata == FALSE)
			{
				if(!gsc.Gprs_Simcard_bits.isconnecting)
				{
					isgprsnoservice = 1;
					Gprs_Service_Proc();
				}
			}
			else
			{
				if(gsmstatus.isupdate == TRUE) //added by leon 051021
					return;
				need_start_connect = 1;
				SwitchToAtCmd();
				isgprsnoservice = 1;
			}
			//Send_Gpsdata(0x0140,_SMS_SUCCESS,0);
		}
	}
	else
	{
		Start_Timer(Send_Acc_On_Timer,50,SECOND);  //modified by leon 051021 from 39s to 50s
	}
}

void Send_Acc_Off(void)
{
	Stop_Timer(Send_Acc_On_Timer);
	if(alarm_flag&0xfe53 || gsmstatus.isupdate == TRUE || monitor_times !=0 || gsc.Gprs_Simcard_bits.isconnecting) //added by leon 051021
	{
		gsc.Gprs_Simcard_bits.isneedsendaccoff =1 ;
		return;
	}
	//Stop_Timer(Fix_Send_Timer);	//masked by leon
	//added by leon 051021
	if(gsmstatus.gprsdata == TRUE) 
		Send_Gpsdata(0x0240,_SMS_SUCCESS,0);
	need_start_connect = 1;//add lxo 112302 for reconnect after accoff
	SwitchToAtCmd();
//	isgprsnoservice = 0;//add lxo 112303 for reconnect after accoff
}

void Send_Sos_Help(void)
{
	Send_Gpsdata(0x0148,_SMS_SUCCESS,1);
}

void Send_Alarm_Data(void)
{
#ifdef DEBUG_AT
	Uart1Send("SEND ALARM!! the alarm_flag is :");
	Uart1Word(alarm_flag);
#endif 
/*//Removed by lxo 021501
	if(gsc.Gprs_Simcard_bits.isconnecting) //added by leon 051110
	{
		need_sendalarm_again = 1;
				if(Hour24Remainder==0)//lxo 1208024 for 24 hours reset.
					Hour24Remainder=(DWORD)(Get_Lefttime(Hour24_Send_Timer)/MINUTE);//lxo 1208025 for 24 hours reset.
		Start_Timer(Hour24_Send_Timer,3,SECOND);
		return;
	}
*/
/*//Removed by lxo 123001 
	if(gsmstatus.gprsdata == FALSE)
	{
		if(port[_ACC].status == 0)
		{
			gsc.Gprs_Simcard_bits.isneedsendaccoff = 1;
			if(!gsc.Gprs_Simcard_bits.isconnecting)
			{
				isgprsnoservice = 1;
				Gprs_Service_Proc();
			}
		}
	}
*/
	if(gsmstatus.isupdate == FALSE)
		Send_Gpsdata(0x0148,_SMS_COMMON,0);
	if(gsmstatus.gprsdata == TRUE)
	{
		if(alarm_flag&0x01)  //存在劫警
		{
			if(need_pull_led==1)
			{
				if(Hour24Remainder==0)//lxo 1208021 for 24 hours reset.
					Hour24Remainder=(DWORD)(Get_Lefttime(Hour24_Send_Timer)/MINUTE);//lxo 1208022 for 24 hours reset.
/*					
#ifdef DEBUG_AT//lxo 1208023 for 24 hours reset.
				Uart1Send("Hour24Remainder/MINUTE1 is :");
				Uart1Word(Hour24Remainder);
#endif 
*/
				Start_Timer(Hour24_Send_Timer,2,SECOND);				
			}
		}
	}
}

void Send_Message_Data(uchar *ptr ,uint len)
{
	Assemble_Sms_Head(0x015A);
	Write_Ptr_Stream(ptr,len);
	if(gsmstatus.gprsdata == TRUE)              //added by leon 050913
	{
		Assemble_Gprs_Tail();
		Send_H06Msg(0x01);
	}
	else
	{
		is_message_data =1;
		Assemble_Sms_Tail(_SMS_COMMON);
	}
}

void Send_Sms_Ack(uint type,uchar ack)
{
	Assemble_Sms_Head(type);
	Write_Byte_Stream(ack);
	if(type==0x0445)
	{
		Assemble_Sms_Tail(_SMS_SPECIAL);
	}
	else
	{
		Assemble_Sms_Tail(_SMS_COMMON);
	}
}

void Send_Gprs_Ack(uint type,uchar ack)
{
	Assemble_Sms_Head(type);
	if(ack!=0xff)Write_Byte_Stream(ack);
	Assemble_Gprs_Tail();
}

void Send_Gprs_Ack_Update(uchar ack)
{
	Assemble_Sms_Head(0x2242);
	Write_Code_Stream(soft.sn,0,_Strlen(soft.sn,16),16);
	Write_Byte_Stream(ack);
	Assemble_Gprs_Tail();
}

void Send_Gprs_Packet_Update(uchar ack)
{
	Assemble_Sms_Head(0x2342);
	Write_Byte_Stream(ack);
	Write_Word_Stream(soft.curpack);
	Assemble_Gprs_Tail();
}

void SendMonitorProc(void)//modified by lxo 122803
{
#ifdef DEBUG_AT
	Uart1Send("IN SendMonitorProc:");
	Uart1Word(monitor_times);
#endif
/*
	if(gsc.Gprs_Simcard_bits.isconnecting == 1 || gsmstatus.isupdate == TRUE || ring.ack!=0)
	{
		if(monitor_times !=0)
			Start_Timer(Con_Timer,monitor_interval,SECOND);
		return;
	}
*/	
/*//Removed by lxo 123002
	if(gsmstatus.gprsdata == FALSE)
	{
		if(monitor_times>20)
		{
			if(port[_ACC].status == 0)
			{
				gsc.Gprs_Simcard_bits.isneedsendaccoff = 1;
			}
			if(!gsc.Gprs_Simcard_bits.isconnecting)
			{
				isgprsnoservice = 1;
				Gprs_Service_Proc();
			}
		}
	}
*/	
	if(gsc.Gprs_Simcard_bits.isconnecting != 1 || gsmstatus.isupdate != TRUE || ring.ack==0)
	{	
		 if(gsmstatus.gprsdata == TRUE)
		{
			Send_Gpsdata(0x0142,_SMS_COMMON,0);
		}
//Added by lxo 06081112 for none-signal-region-supplement condition compile
#if SUPPLEMENT == SUPPLEMENTENABLE
		else
			InformationSave(0x0142,_SMS_COMMON,0);
#endif			
	}
	
	//if(gsmstatus.gprsdata == TRUE)
//	Send_Gpsdata(0x0142,_SMS_COMMON,0);

	if(monitor_times!=0)
	{
		if(monitor_times < 255) //added by leon 051021
			monitor_times --;
	}
	
	if(monitor_times!=0)
	{
/*//Removed by lxo 0227021
	   if ((gsmstatus.gprsdata == TRUE)||(monitor_interval>7)){
		    Start_Timer(Con_Timer,monitor_interval,SECOND);
	       }
	  else 
	       {		
	       Start_Timer(Con_Timer,0x08,SECOND);
	       }
*/      
	    Start_Timer(Con_Timer,monitor_interval,SECOND);//Added by lxo 0227022
	}
}

void SendFixProc(void)
{
#ifdef DEBUG_AT
	Uart1Send("IN SendFixProc:");
	Uart1Word(save.basevalue.fixtime);
#endif
	if(gsc.Gprs_Simcard_bits.isconnecting == 1 || gsmstatus.isupdate == TRUE || ring.ack!=0)
	{	
		if(save.basevalue.fixtime !=0)
			Start_Timer(Fix_Send_Timer,save.basevalue.fixtime,SECOND);
		return;
	}
//	if(gsmstatus.gprsdata == TRUE)//Removed by lxo 0303011
	if((gsmstatus.gprsdata == TRUE)&&(save.basevalue.need_service==0))
		Send_Gpsdata(0x0642,_SMS_COMMON,0);
	if(save.basevalue.fixtime!=0)
	{
		Start_Timer(Fix_Send_Timer,save.basevalue.fixtime,SECOND);
	}
}

void Future_Track_Proc(void)	//Modified by lxo 122801
{
/*
	if(gsc.Gprs_Simcard_bits.isconnecting == 1 || gsmstatus.isupdate == TRUE || ring.ack!=0)
	{	
		if(future.times !=0)
			Start_Timer(Future_Timer,future.interval,SECOND);
		return;
	}
	if(gsmstatus.gprsdata == TRUE)
		Send_Gpsdata(0x0542,_SMS_COMMON,0);
*/
#ifdef DEBUG_AT
	Uart1Send("IN Future_Track_Proc");
#endif
	if(gsc.Gprs_Simcard_bits.isconnecting != 1 || gsmstatus.isupdate != TRUE || ring.ack==0)
	{	
		 if(gsmstatus.gprsdata == TRUE)
		{
			Send_Gpsdata(0x0542,_SMS_COMMON,0);
		}
//Added by lxo 06081114 for none-signal-region-supplement condition compile
#if SUPPLEMENT == SUPPLEMENTENABLE
		else
			InformationSave(0x0542,_SMS_COMMON,0);
#endif
	}
	if(future.times!=0){future.times--;}
	
	if(future.times!=0)
	{
//		if(future.interval<10)future.interval=10;	//lxo 122201 for future check interval
//		Start_Timer(Future_Timer,future.interval,SECOND);//lxo 122202 for future check interval
/*//Removed by lxo 0227031
	  	   if ((gsmstatus.gprsdata == TRUE)||(future.interval>7))//lxo 122203 for future check interval
	  	   {
	  		    Start_Timer(Future_Timer,future.interval,SECOND);
	  	   }
	  	  else 
	  	   {		
	  	       Start_Timer(Future_Timer,0x08,SECOND);
	  	    }
*/ 	    
  		    Start_Timer(Future_Timer,future.interval,SECOND);//Added by lxo 0227032
	}
	else
	{
		Stop_Timer(Future_Timer);
	}
}

void Start_Future_Track(void)
{
	Future_Track_Proc();
}

void Hours_Send_Back(void)
{
	static uchar status = 0;
	if(need_sendalarm_again == 1) //another event--just use this timer 051110
	{
		need_sendalarm_again = 0;
		Start_Timer(Hour24_Send_Timer,Hour24Remainder,MINUTE);//lxo 12080321 for 24 hours reset.
		Hour24Remainder=0;//lxo 1208033 for 24 hours reset.
		Send_Alarm_Proc();
		if(need_pull_led == 1)//lxo 1208034 for 24 hours reset.	 
		{
			need_pull_led = 0;
			Put_Led_High();
		}
		
		return;
	}
	if(need_pull_led == 1)	 //another event--just use this timer
	{
		need_pull_led = 0;
		Put_Led_High();
		Start_Timer(Hour24_Send_Timer,Hour24Remainder,MINUTE);//lxo 1208031 for 24 hours reset.
		Hour24Remainder=0;//lxo 1208032 for 24 hours reset.
		return;
	}
	if(gsmstatus.wake == _GPRS_WAKE)
	{
		if(gsmstatus.gprsdata == TRUE) //added by leon
			Send_Gpsdata(0x0842,_SMS_SUCCESS,0);
		Start_Timer(Hour24_Send_Timer,1440,MINUTE);  //1440
		//     Start_Timer(Sleep_Gprs_Timer,10,SECOND);
//		if( gsmstatus.talkmode  != _TALK_ON && port[_ACC].status == 0)//lxo 113008 for 0x4208 error
//			Sleep_Gprs_Proc();//lxo 113009 for 0x4208 error
		ParaSet.Hours24Reset=1;//add lxo 120103 for reset mode after 24 hours passed.
		Start_Timer(Gprs_Service_Timer,30,SECOND);
	}
	else
	{
		if(status==0)
		{
			status =1;
			Wake_Up_Gprs();
			Sleep_Gprs();
			Start_Timer(Hour24_Send_Timer,2,MINUTE);  //modified by leon from 1 to 2 minutes.
		}
		else if(status ==1)
		{
			status = 0;
			if(gsmstatus.gprsdata == TRUE) //added by leon
				Send_Gpsdata(0x0842,_SMS_SUCCESS,0);
			Start_Timer(Hour24_Send_Timer,1440,MINUTE);
		}
	}
}

void send_ack_gprs_proc(void)
{
	send_ack_gprs_count ++;
	if(send_ack_gprs_count<4)
	{
		Start_Timer(send_ack_gprs_timer,15,SECOND);
		Send_Gprs_Packet_Update(1);
	}
	else
	{
		Send_Gprs_Ack_Update(4);
		InitSoftWare();
		gsmstatus.needupdate = FALSE;
		gsmstatus.isupdate   = FALSE;
		if(save.basevalue.gprs_mode==0)  //added by leon 050921
			SwitchToAtCmd();
		else
		{
			_MemFillCpy(cur_sim.IpAddr,gprsmode_sim.IpAddr,'\0',16,_StrlenForKey(gprsmode_sim.IpAddr,'\0',16));
			_MemFillCpy(cur_sim.SocketPort,gprsmode_sim.SocketPort,'\0',6,_StrlenForKey(gprsmode_sim.SocketPort,'\0',6));
			SwitchToAtCmd();
			SwitchToGprs();
		}
	}
}
void Custom_supervise_proc(void)//add by lxo;lable 122612//Modified by lxo 122802
{
#ifdef DEBUG_AT
	Uart1Send("In Custom_supervise_proc");
#endif
/*
	if(gsc.Gprs_Simcard_bits.isconnecting == 1 || gsmstatus.isupdate == TRUE || ring.ack!=0)
	{	
			Start_Timer(Custom_supervise_timer,0x0a,SECOND);
			return;
	}
	if(gsmstatus.gprsdata == TRUE)
		Send_Gpsdata(0x0742,_SMS_COMMON,0);
*/		
	if(gsc.Gprs_Simcard_bits.isconnecting != 1 || gsmstatus.isupdate != TRUE || ring.ack==0)
	{	
		 if(gsmstatus.gprsdata == TRUE)
		{
			Send_Gpsdata(0x0742,_SMS_COMMON,0);
		}
//Added by lxo 06081113 for none-signal-region-supplement condition compile
#if SUPPLEMENT == SUPPLEMENTENABLE
		else
			InformationSave(0x0742,_SMS_COMMON,0);
#endif			
	}
	Start_Timer(Custom_supervise_timer,0x0a,SECOND);

}
void Init_Smsrecv(void)

⌨️ 快捷键说明

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