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

📄 hanset.c

📁 名厂车载GPS通信终端
💻 C
📖 第 1 页 / 共 2 页
字号:
	case 0x13:
	case 0x14:
	case 0x15:
	case 0x16:
	case 0x17:
	case 0x18:
	case 0x19:
	case 0x1a:
	case 0x1b:
		At_Cmd_Vts(0x20+handmsg.userdata[0]);
		break;
   }
}

void Handle_04Msg(void) //文字信息//
{
	Send_H5FMsg(0x04,0xff,0xff);
#ifdef DEBUG_AT
//	Uart1Send("Send Text Message:");
//  hand_send(handmsg.userdata,handmsg.len-9);
#endif
    if((gsmstatus.mode&INIT_OK && !gsc.Gprs_Simcard_bits.isconnecting)&&gsmstatus.isupdate == FALSE) //added by leon 051110
		Send_Message_Data(handmsg.userdata,handmsg.len-9);
	else
		Send_H06Msg(0);
}

void Send_Sms_Proc() //added by leon
{
	if(!(gsmstatus.mode&INIT_OK))
	{
		if(need_send_sms_again)
		{
			need_send_sms_again = 0;
			Send_H06Msg(0);
			return;
		}
		if(need_handle_dialing)
		{
			need_handle_dialing = 0;
			Send_H09Msg(0);
			return;
		}
	}
	else if(gsc.Gprs_Simcard_bits.isconnecting)
	{
		if(need_send_sms_again)
		{
			Start_Timer(Send_Sms_Timer,1,SECOND);	
		}
		else if(need_handle_dialing)
		{
			Send_H09Msg(0x03);
		}
	}
	else
	{
		if(need_send_sms_again)
		{
			need_send_sms_again = 0;
			if(alarm_flag&0xfe53 || gsmstatus.isupdate == TRUE)
			{
				Send_H06Msg(0x04);
			}
			else
			{
				Handle_06Msg();
			}
		}
	}
}


void Handle_05Msg(void) //拨号//
{
	uchar flag;
	uchar i;
	uchar emergflag;
	
	emergflag = 0;
	flag      = 0;
	if(handmsg.len<10)
	{
		return;
	}
	Send_H5FMsg(0x05,0xff,0xff);
#ifdef DEBUG_AT
//	Uart1Word(gsmstatus.mode);
//	Uart1Word(gsc.Gprs_Simcard_bits.isconnecting);
#endif
	if(!(gsmstatus.mode&INIT_OK) || gsc.Gprs_Simcard_bits.isconnecting)
	{
		need_handle_dialing = 1;
		need_send_sms_again = 0;
		Start_Timer(Send_Sms_Timer,1,SECOND);
		return;
	}
	if(handmsg.len==12)
	{
		if(Str_Cmp(handmsg.userdata,"110", 3))
		{
			emergflag = 1;
		}
		if(Str_Cmp(handmsg.userdata,"112", 3))
		{
			emergflag = 1;
		}
		if(Str_Cmp(handmsg.userdata,"119", 3))
		{
			emergflag = 1;
		}
		if(Str_Cmp(handmsg.userdata,"120", 3))
		{
			emergflag = 1;
		}
	}
	if(handmsg.len==13)
	{
		if(Str_Cmp(handmsg.userdata,"1860", 4))
		{
			emergflag = 1;
		}
	}
	if(handmsg.len==20)
	{
		if(Str_Cmp(handmsg.userdata,"13800138000", 11))
		{
			emergflag = 1;
		}
	}
	
	if(emergflag==0)
	switch(save.basevalue.phone_mode)
	{
		case 0:
			flag = 1;
			Send_H06Msg(0x02);
			break;
		case 2:
			flag = 1;
			for(i=0; i<10; i++)
			{
				if(save.basevalue.mode.bit.simid==0)
				{
					if(Str_Cmp(save.phonenumber.User0Limit[i], handmsg.userdata, _Strlen(save.phonenumber.User0Limit[i],15)))
					{
						flag = 0;
					}
				}
				else
				{
					
					if(Str_Cmp(save.phonenumber.User1Limit[i], handmsg.userdata, _Strlen(save.phonenumber.User1Limit[i],15)))
					{
						flag = 0;
					}
				}
			}
			if(flag==1)
			{
				Send_H06Msg(0x02);
			}
			break;
		case 4:
			flag = 1;
			Send_H06Msg(0x02);
			break;
	}
	if(flag==0||emergflag==1)
	{
		Dial(handmsg.userdata,handmsg.len-9,TRUE,FALSE);
	}
}

void Handle_06Msg(void)
{
	uchar tel[15];
	uchar i;
	if(handmsg.len<=23)return;
	Send_H5FMsg(0x06,0xff,0xff);
#ifdef DEBUG_AT
//	Uart1Word(gsmstatus.mode);
//	Uart1Word(gsc.Gprs_Simcard_bits.isconnecting);
#endif
	if(!(gsmstatus.mode&INIT_OK) || gsc.Gprs_Simcard_bits.isconnecting)
	{
		need_send_sms_again = 1;
		need_handle_dialing = 0;
		Start_Timer(Send_Sms_Timer,1,SECOND);
		return;
	}
	if(gsmstatus.gprsdata == TRUE)			//added by leon 051012
	{
		need_send_sms_again = 1;
		need_handle_dialing = 0;
		if(alarm_flag&0xfe53 || gsmstatus.isupdate == TRUE)		
		{
			Start_Timer(Send_Sms_Timer,1,SECOND);
			return;
		}
		else
		{
			SwitchToAtCmd();
			Start_Timer(Send_Sms_Timer,5,HMSEL);
			return;
		}
	}
	for(i=0; i<14; i++)
	{
		if(handmsg.userdata[i]=='F')
			tel[i] = '\0';
		else
			tel[i] = handmsg.userdata[i];
	}
	tel[14] ='\0';
#ifdef DEBUG_AT
	//Uart1Send("send sms to the tel:");
	//hand_send(tel,15);
	//Uart1Send("sms msg is:");
	//hand_send(handmsg.userdata+14,handmsg.len-23);
#endif
	//#ifdef _HAVE_UNICODE
	Start_Timer(Gprs_Service_Timer,30,SECOND);
	SendSM(handmsg.userdata+14,handmsg.len-23,TRUE,tel,_SMS_COMMON,_INDEX_LCD);
	//#else
	//   SendSM(handmsg.userdata+14,handmsg.len-23,FALSE,tel,_SMS_COMMON,_INDEX_LCD);
	//#endif
}

void Handle_07Msg(void)
{
	uchar flag;
	uchar *ptr;
	uchar port_number;  //added by leon 051013
	uint  i;			//added by leon 051013
	uchar *bakptr;		//added by leon 051013
	flag = 0;
	if(handmsg.userdata[1]==0x00)
	{
		if(handmsg.userdata[0]==0x0c || handmsg.userdata[0] == 0x0e)
			Send_H0BMsg(handmsg.userdata[0],handmsg.userdata[2]-'0',handmsg.userdata[2]);
		else
			Send_H0BMsg(handmsg.userdata[0],handmsg.userdata[2]-'0',handmsg.userdata[3]);
	}
	else if(handmsg.userdata[1]==0x01){
		switch(handmsg.userdata[0])
		{
		case 0x01:
			_MemFillCpy(save.simcard[handmsg.userdata[2]-'0'].MyNumb,handmsg.userdata+3,'\0',15,handmsg.len-12);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			flag = 1;
			break;
		case 0x02:
			flag = 1;
			_Memcpy(save.psw.handpsw,handmsg.userdata+2,8);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x03:
			flag = 1;
			_MemFillCpy(save.simcard[handmsg.userdata[2]-'0'].IpAddr,handmsg.userdata+3,'\0',16,_StrlenForKey(handmsg.userdata+3,'F',15));
			_MemFillCpy(save.simcard[handmsg.userdata[2]-'0'].SocketPort,handmsg.userdata+18,'\0',6,_StrlenForKey(handmsg.userdata+18,'F',5));
			_MemFillCpy(save.simcard[handmsg.userdata[2]-'0'].User,handmsg.userdata+23,'\0',21,_StrlenForKey(handmsg.userdata+23,'F',20));
			_MemFillCpy(save.simcard[handmsg.userdata[2]-'0'].Password,handmsg.userdata+43,'\0',21,_StrlenForKey(handmsg.userdata+43,'F',20));
			Send_H5FMsg(0x07,handmsg.userdata[0],handmsg.userdata[2]);
			//added by leon 051013
			if((handmsg.userdata[2]-'0')==save.basevalue.mode.bit.simid)
			{
				bakptr = (uchar *)(save.simcard[handmsg.userdata[2]-'0'].MyNumb);
				ptr    = (uchar *)(cur_sim.MyNumb);
				for(i=0; i<sizeof(_CURRENT_SIMCARD); i++)
				{
					ptr[i] = bakptr[i];
				}
				Start_Timer(Gprs_Service_Timer,5,HMSEL);
				 ParaSet.IPChange=1;	//add lxo 112312 for reconnect after IP&Port change.
			}
			break;
		case 0x04:
			flag = 1;
			_MemFillCpy(save.simcard[handmsg.userdata[2]-'0'].Apn,handmsg.userdata+3,'\0',21,_StrlenForKey(handmsg.userdata+3,'F',20));
			Send_H5FMsg(0x07,handmsg.userdata[0],handmsg.userdata[2]);
			//added by leon 051013
			if((handmsg.userdata[2]-'0')==save.basevalue.mode.bit.simid)
			{
				bakptr = (uchar *)(save.simcard[handmsg.userdata[2]-'0'].MyNumb);
				ptr    = (uchar *)(cur_sim.MyNumb);
				for(i=0; i<sizeof(_CURRENT_SIMCARD); i++)
				{
					ptr[i] = bakptr[i];
				}
				Start_Timer(Gprs_Service_Timer,5,HMSEL);
			}
			break;
		case 0x05:
			flag = 1;
			/*(handmsg.userdata[2]>10)         //modified by leon for 06B1 whatever choose from handset the 06B1 always DOUBLE-MODE.
			{
			save.basevalue.gprs_mode = 2;
			}
			else if(handmsg.userdata[2]>0)
			{
            save.basevalue.gprs_mode = 1;
			}
			else
			{
            save.basevalue.gprs_mode = 0;
			}*/
			save.basevalue.gprs_mode =2;    //added by leon 0050921
			//save.basevalue.gprs_mode = handmsg.userdata[2];
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x06:  //modified by leon 050923
			flag = 1;
			//if(handmsg.userdata[2]=='8'&&handmsg.userdata[3]=='6')
			//{
			//	_MemFillCpy(save.phonenumber.ManageCentreNumb, handmsg.userdata+2, '\0',15, handmsg.len-11);
			//}
			//else
			//{
			//save.phonenumber.ManageCentreNumb[0] = '8';
			//save.phonenumber.ManageCentreNumb[1] = '6';
			_MemFillCpy(save.phonenumber.ManageCentreNumb[0],handmsg.userdata+2,'\0',15,handmsg.len-11);
			//}
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x07:  //modified by leon 050923
			flag = 1;
			if(handmsg.userdata[2]!='+')
			{
				save.phonenumber.MessageServiceNumb[0][0] = '+';
				_MemFillCpy(save.phonenumber.MessageServiceNumb[0]+1, handmsg.userdata+2, '\0', 14, handmsg.len-11);
			}
			else
			{
				_MemFillCpy(save.phonenumber.MessageServiceNumb[0],handmsg.userdata+2,'\0',15,handmsg.len-11);
			}
			if(gsmstatus.gprsdata == FALSE)  //added by leon 050923
			{
				if(save.basevalue.mode.bit.simid == 0)
					At_Cmd_Csca(save.phonenumber.MessageServiceNumb[0],_Strlen(save.phonenumber.MessageServiceNumb[0],15));
			}
			else
				need_set_messagenumber = 1;
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x08:  //modified by len 050923
			flag = 1;
			_MemFillCpy(save.phonenumber.ListenNumb[0],handmsg.userdata+2,'\0',15,handmsg.len-11);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x16: //added by leon 050923 
			flag  =1;
			_MemFillCpy(save.phonenumber.ManageCentreNumb[1],handmsg.userdata+2,'\0',15,handmsg.len-11);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x17:  //added by leon 050923
			flag = 1;
			if(handmsg.userdata[2]!='+')
			{
				save.phonenumber.MessageServiceNumb[1][0] = '+';
				_MemFillCpy(save.phonenumber.MessageServiceNumb[1]+1, handmsg.userdata+2, '\0', 14, handmsg.len-11);
			}
			else
			{
				_MemFillCpy(save.phonenumber.MessageServiceNumb[1],handmsg.userdata+2,'\0',15,handmsg.len-11);
			}
			if(gsmstatus.gprsdata == FALSE)  //added by leon 050923
			{
				if(save.basevalue.mode.bit.simid == 1)
					At_Cmd_Csca(save.phonenumber.MessageServiceNumb[1],_Strlen(save.phonenumber.MessageServiceNumb[1],15));
			}
			else
				need_set_messagenumber = 1;
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x18:  //added by leon 050923
			flag = 1;
			_MemFillCpy(save.phonenumber.ListenNumb[1],handmsg.userdata+2,'\0',15,handmsg.len-11);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x09:
			flag = 1;
			if(handmsg.userdata[2]=='0')
			{
				_MemFillCpy(save.phonenumber.User0Limit[handmsg.userdata[3]], handmsg.userdata+4, '\0', 15,handmsg.len-13);
			}
			else
			{
				_MemFillCpy(save.phonenumber.User1Limit[handmsg.userdata[3]], handmsg.userdata+4, '\0', 15,handmsg.len-13);
			}
			Send_H5FMsg(0x07,handmsg.userdata[0],handmsg.userdata[2]);
			break;
		case 0x0a:
			flag = 1;
			_Memcpy((LPBYTE)&save.basevalue.max_speed,handmsg.userdata+2,2);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x0b:
			flag = 1;
			_Memcpy((LPBYTE)&save.basevalue.low_voltage,handmsg.userdata+2,2);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x0c:
			flag 							  = 1;
			ptr  						       = &save.alarmtime.voltage;
			ptr[handmsg.userdata[2]-1] = handmsg.userdata[3];
			Send_H5FMsg(0x07,handmsg.userdata[0],handmsg.userdata[2]);
			break;
		case 0x0d:
			flag							   =1;
			save.basevalue.gprs_time      = handmsg.userdata[2]*1000;
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x0e:   //modified by leon 051013
			flag = 1;
			if(handmsg.userdata[2] < MAX_PORT_AREA)  
			{
				if(handmsg.userdata[2] >= save.simsel.set_port_number)
				{
					port_number = save.simsel.set_port_number;
					save.simsel.set_port_number++;
				}
				else
					port_number = handmsg.userdata[2];
				ptr  = (uchar *)&save.simsel.judge_port[port_number].mainland_port.top_left.lati;
				_Memcpy((LPBYTE)ptr,handmsg.userdata+3,48);
			}
			//ptr  = (uchar *)&save.simsel.sim_longi;
			//_Memcpy((LPBYTE)ptr, handmsg.userdata+2,10);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x0f:
			flag 					 = 1;
			save.basevalue.io.ch = handmsg.userdata[2];
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x10:
			flag		              = 1;
			save.basevalue.mode.bit.voice = Get_Char_Bit(&handmsg.userdata[2], 1);
			save.basevalue.mode.bit.dial    = Get_Char_Bit(&handmsg.userdata[2], 0);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
		case 0x11:
			flag	  = 1;
			save.basevalue.mode.bit.consume = Get_Char_Bit(&handmsg.userdata[2],0);
			Send_H5FMsg(0x07,handmsg.userdata[0],0xff);
			break;
      }
   }
   if(flag==1)
   {
	   Store_All_Para();
   }
}

void Handle_08Msg(void)
{
#ifdef DEBUG_HANDSET
	hand_send(save.psw.handpsw,8);
	//hand_send(&save.flag,sizeof(_SAVE));
#endif
	if(Str_Cmp(handmsg.userdata, save.psw.handpsw,8))
	{
		Send_H0CMsg(0x01);
	}
	else
	{
		Send_H0CMsg(0x00);
	}
}

void Handle_4Fmsg(void)
{
#ifdef DEBUG_AT
	//   Uart1Send("Got 4F message from handset!");
#endif
	if(handmsg.userdata[0]==0x07)
	{
		ring.ack =2;
	}
}

uchar Find_0D0A(void)
{
	uint  i,j;
	uchar *ptr;
	
	ptr = &handmsg.flag[0];
	
	i = handuart.head;
	j = 0;
	//   clr_watchdog();
	while(i!=handuart.tail)
	{
		//     clr_watchdog();
		ptr[j++] = handuart.recvbuf[i++];
		if(i>=MAXHANDRECVBUFFER)i = 0;
		
		if(j>1)
			if(ptr[j-1]==0x0a&&ptr[j-2]==0x0d)
			{
				handuart.head   = i;
				handmsg.handlen = j;
				return TRUE;
			}
			if(j>300)                            //数据长度超过100//
			{
				handuart.head = i;
				j             = 0;
				//Deal_Handsetfail();
				return FALSE;
			}
	}
	return FALSE;
}

void Deal_Handrecv(void)
{
	while(Find_0D0A())
	{
#ifdef DEBUG_HANDSET
		Uart1SendHex(&handmsg.flag[0],handmsg.handlen);
		Uart1Send("");
#endif
		if(handmsg.handlen!=handmsg.len)
		{
#ifdef DEBUG_AT
			Uart1Send("the len is no qualize");
#endif 
			break;
		}
		if(handmsg.flag[0]=='$'&&handmsg.flag[1]=='$')
		{
			if(crc_check(&handmsg.flag[0],handmsg.len-2))
			{
				Find_Proc(HANDMSGENTRYPROC,handmsg.msgtype,sizeof(HANDMSGENTRYPROC)/sizeof(ENTRY_PROC));
			}
		}
	}
}

void HandsetTaskEntry(void)
{
	Find_Proc(HANDTASKPROC,Current_Tskmsg->msgid,sizeof(HANDTASKPROC)/sizeof(ENTRY_PROC));
}

⌨️ 快捷键说明

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