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

📄 exec_func.c

📁 C语言源代码及相关资料
💻 C
📖 第 1 页 / 共 4 页
字号:
				ss[iplace++]=workParam.pWorkParam_Value[iTemp];
		}
	}
	
	*p_iplace=iplace;
	
	return	TRUE;
	
}

//STRU_QueLogData_Comm	queLogData;	//设置 查询日志数据的方式等


//得到//设置压缩回传的参数信息
uint8	GetSetupCompressRevert(void)
{
	INT16U	len=0,moveAddr=0;
	uint8	paramValue[6];
	memset(paramValue,0,sizeof(paramValue));
	GetOmoveAddr(CUSTOM_PARAMS,CUSTOM_PARAMS_COUNT,0x000f,&len,&moveAddr);
	W25X32_READ_Semphore(GetAddr(CUSTOM_PARAMS_SEC,moveAddr),sizeof(paramValue),paramValue);
	
	setupCompressRevert.compressRevertData=paramValue[0];	// 需压缩回传的数据.  00:表示定位数据.01:表示带工作参数的定位数据
	setupCompressRevert.accIn_CompressTimeSlot=paramValue[1];	//压缩的时间间隔(ACC开).单位秒,最小为1秒。
	setupCompressRevert.accOut_CompressTimeSlot=paramValue[2];	//压缩的时间间隔(ACC关).单位秒,最小为1秒。
	setupCompressRevert.compress_PlaceCou=paramValue[3];		//每包压缩的位置数。		表示一个数据包可以包含的压缩位置的数量,表示范围10~33,默认值为33。
	setupCompressRevert.compressRevert_Cou=(uint16)(paramValue[4]<<8)+(uint16)paramValue[5];	//压缩回传的次数.     表示需要压缩回传的次数,当改值为FFFFH时表示连续不断的回传,当该值为0000H表示停止发送。
	
	
	return 	TRUE;
	
}

//得到工作参数上传设置一(指定时间点方式)
uint8	GetWorkParamUploadCfg1(void)
{
	uint8	i=0;
	GetCustomValue(0x000a,(uint8 *)&workParamUploadCfg1.communi_Mode);
	GetCustomValue(0x000b,(uint8 *)workParamUploadCfg1.stru_TimePoint_FORM);
	for(i=0;i<240;i++)
	{
		if(workParamUploadCfg1.stru_TimePoint_FORM[i].timePoint_Hour==0xff
				&&workParamUploadCfg1.stru_TimePoint_FORM[i].timePoint_Minute==0xff)
			break;
	}
	TimePoint_Cou=i;
	return	TRUE;
	
}
uint8	GetCustomValue(uint16 paramID,uint8	*	paramValue)
{
	INT16U	len=0,moveAddr=0;
	
	GetOmoveAddr(CUSTOM_PARAMS,CUSTOM_PARAMS_COUNT,paramID,&len,&moveAddr);
	W25X32_READ_Semphore(GetAddr(CUSTOM_PARAMS_SEC,moveAddr),len,paramValue);
	
	return 	TRUE;
}
uint8	SaveCustomValue(uint16 paramID,uint8	*	paramValue)
{
	INT16U	len=0,moveAddr=0;
	
	GetOmoveAddr(CUSTOM_PARAMS,CUSTOM_PARAMS_COUNT,paramID,&len,&moveAddr);
	
	W25X32_WRITE(GetAddr(CUSTOM_PARAMS_SEC,moveAddr),len,paramValue,CUSTOM_PARAMS_DATASIZE);
	return 	TRUE;
}
uint8	GetParamValue(uint16 paramID,uint8	*	paramValue)
{
	INT16U	len=0,moveAddr=0;
	
	GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,paramID,&len,&moveAddr);
	W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,paramValue);
	
	return 	TRUE;
}
uint8	SaveParamValue(uint16 paramID,uint8	*	paramValue)
{
	INT16U	len=0,moveAddr=0;
	
	GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,paramID,&len,&moveAddr);
	
	W25X32_WRITE(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,paramValue,SETUP_PARAMS_DATASIZE);
	return 	TRUE;
}

uint8	GetWorkParamValue(uint16 paramID,uint8	*	paramValue)
{
	INT16U	len=0,moveAddr=0;
	
	GetOmoveAddr(WORK_PARAMS,WORK_PARAMS_COUNT,paramID,&len,&moveAddr);
	W25X32_READ_Semphore(GetAddr(WORK_PARAMS_SEC,moveAddr),len,paramValue);
	return 	TRUE;
}
uint8	SaveWorkParamValue(uint16 paramID,uint8	*	paramValue)
{
	INT16U	len=0,moveAddr=0;
	
	GetOmoveAddr(WORK_PARAMS,WORK_PARAMS_COUNT,paramID,&len,&moveAddr);
	
	W25X32_WRITE(GetAddr(WORK_PARAMS_SEC,moveAddr),len,paramValue,WORK_PARAMS_DATASIZE);
	return 	TRUE;
}
/*
uint8	GetLmt_V_Time(uint8	*	lmtVTime)
{
	INT16U	len=0,moveAddr=0;
			
	GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0402,&len,&moveAddr);
	W25X32_READ(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,lmtVTime);
	
	return	TRUE;
	
}
*/

uint8	GetHeartSlot(void)
{
	INT16U	len=0,moveAddr=0;
	INT8U	temp=0;
	
	//终端上发心跳间隔	占用1个字节,设置心跳时间,单位:秒,缺省40秒。
	GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0209,&len,&moveAddr);
    W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,&temp);
   	
   	if((temp<10)||(temp>240))		
   		temp=40;	//默认40S
   	
   	HeartSlot=temp;
   	
	return	TRUE;
	
}

uint8	Term2Srv_Heart(uint8	*	buff,uint16	*	uiNum)
{
	/////当定位终端连续一段时间(详见设定参数0004H指令)无任何数据发往中心时发送一条心跳指令,
	/////该指令由消息长度(0009H)字段和定位终端ID字段组成,中心不需要回码,但中心收到后需立即回传一条心跳指令。
	uint8	tempbuff[50];
	
	memset(tempbuff,0,sizeof(tempbuff));
	
	tempbuff[0]=0x00;
	tempbuff[1]=0x09;
	
	memmove(tempbuff+2,TERM_ID,sizeof(TERM_ID));
	*uiNum=2+sizeof(TERM_ID);
	*uiNum=getAStr(buff,tempbuff,*uiNum);
	
	return	TRUE;
	
}


/////////////////////得到通信方式及跟踪参数时间间隔距离间隔
INT8U	GetTrace_FORM(void)
{
	
	INT16U	len=0,moveAddr=0;
	INT8U	buff[7];
	INT8U	iTemp=0,iplace=0;
	

	GetOmoveAddr(CUSTOM_PARAMS,CUSTOM_PARAMS_COUNT,0x0000,&len,&moveAddr);////ACC开时间间隔,单位:秒,最小为0,默认为0秒
    W25X32_READ_Semphore(GetAddr(CUSTOM_PARAMS_SEC,moveAddr),sizeof(buff),buff);
    ////////////////////////
    
#if defined(SYSTEM_SEMCONTROL)
		{
			INT8U SysRsrcErr;
			OSSemPend(gw_pSysRsrcSem, 0, &SysRsrcErr);
		}
#else
		OSSchedLock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
    trace_FORM.communi_Mode=(uint8)buff[iplace++];
    trace_FORM.acc_In_Timeslot=0;
    for(iTemp=0;iTemp<sizeof(trace_FORM.acc_In_Timeslot);iTemp++)
    	trace_FORM.acc_In_Timeslot|=(uint16)(buff[iplace++]<<(8*(sizeof(trace_FORM.acc_In_Timeslot)-iTemp-1)));
    trace_FORM.acc_Out_Timeslot=0;
    for(iTemp=0;iTemp<sizeof(trace_FORM.acc_Out_Timeslot);iTemp++)
    	trace_FORM.acc_Out_Timeslot|=(uint16)(buff[iplace++]<<(8*(sizeof(trace_FORM.acc_Out_Timeslot)-iTemp-1)));
    trace_FORM.distance_Slot=0;
    for(iTemp=0;iTemp<sizeof(trace_FORM.acc_In_Timeslot);iTemp++)
    	trace_FORM.distance_Slot|=(uint16)(buff[iplace++]<<(8*(sizeof(trace_FORM.distance_Slot)-iTemp-1)));
#if defined(UART_SEMCONTROL)
		OSSemPost(gw_pSysRsrcSem);
#else
		OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)

   	
    return	TRUE;
    
}

/////得到通信方式及工作参数上传设置2时间间隔距离间隔
INT8U	GetWorkParamUploadCfg2(void)
{
	
	INT16U	len=0,moveAddr=0;
	INT8U	buff[7];
	INT8U	iTemp=0,iplace=0;
	

	GetOmoveAddr(CUSTOM_PARAMS,CUSTOM_PARAMS_COUNT,0x0006,&len,&moveAddr);//通信方式//ACC开时间间隔,单位:秒,最小为0,默认为0秒
    W25X32_READ_Semphore(GetAddr(CUSTOM_PARAMS_SEC,moveAddr),sizeof(buff),buff);
    ////////////////////////
    
#if defined(SYSTEM_SEMCONTROL)
		{
			INT8U SysRsrcErr;
			OSSemPend(gw_pSysRsrcSem, 0, &SysRsrcErr);
		}
#else
		OSSchedLock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
    workParamUploadCfg2.communi_Mode=(uint8)buff[iplace++];
    workParamUploadCfg2.acc_In_Timeslot=0;
    for(iTemp=0;iTemp<sizeof(workParamUploadCfg2.acc_In_Timeslot);iTemp++)
    	workParamUploadCfg2.acc_In_Timeslot|=(uint16)(buff[iplace++]<<(8*(sizeof(workParamUploadCfg2.acc_In_Timeslot)-iTemp-1)));
    workParamUploadCfg2.acc_Out_Timeslot=0;
    for(iTemp=0;iTemp<sizeof(workParamUploadCfg2.acc_Out_Timeslot);iTemp++)
    	workParamUploadCfg2.acc_Out_Timeslot|=(uint16)(buff[iplace++]<<(8*(sizeof(workParamUploadCfg2.acc_Out_Timeslot)-iTemp-1)));
    workParamUploadCfg2.distance_Slot=0;
    for(iTemp=0;iTemp<sizeof(workParamUploadCfg2.acc_In_Timeslot);iTemp++)
    	workParamUploadCfg2.distance_Slot|=(uint16)(buff[iplace++]<<(8*(sizeof(workParamUploadCfg2.distance_Slot)-iTemp-1)));
#if defined(UART_SEMCONTROL)
		OSSemPost(gw_pSysRsrcSem);
#else
		OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
   	
    return	TRUE;
    
}

//INT8U	gw_rambuff_IP[4]={221, 231, 140, 211};

INT8U	GetIPandPort(void)
{
	INT16U	i=0,len=0,moveAddr=0;
	INT8U	buff_APN[40];//APN参数用ASCII码表示,长度小于32个字节。
	INT8U	buff_DNS[128];//设置主中心域名	中心域名用ASCII码表示,域名长度小于128个字节。
	INT8U	buff_IP[4];	//通讯IP地址,例如:10.120.37.19表示为0x0A 0x78 0x25 0x13。
	INT8U	buff_Port[2];	//通讯端口号,数值范围为0~65535。
	uint16	port=0;
	
	memset(Communi.strAPN,0,sizeof(Communi.strAPN));
	memset(Communi.strIP,0,sizeof(Communi.strIP));
	memset(Communi.strPort,0,sizeof(Communi.strPort));
	
	memset(buff_APN,0,sizeof(buff_APN));
	GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0200,&len,&moveAddr);
    W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,buff_APN);
    GetParamVal_ASCII(0x200,buff_APN,(uint32 *)&len);
// Chad    
    //strcat(Communi.strAPN,(char *)buff_APN);
    strcpy(Communi.strAPN,(char *)buff_APN);
    
    if(ReConnect_Cou<3)
    {
	    memset(buff_DNS,0,sizeof(buff_DNS));
		GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0202,&len,&moveAddr);
	    W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,buff_DNS);
	    GetParamVal_ASCII(0x202,buff_DNS,(uint32 *)&len);
// Chad	    
	    //strcat(Communi.strIP,(char *)buff_DNS);
	    strcpy(Communi.strIP,(char *)buff_DNS);
    }
    else	if(ReConnect_Cou>=3&&ReConnect_Cou<6)
    {
    	GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0201,&len,&moveAddr);
	    W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,buff_IP);
// Chad
#if 0
	    for(i=0;i<sizeof(buff_IP);i++)
	    {
	    	char 	buff[4];
	    	memset(buff,0,sizeof(buff));
	    	sprintf(buff,"%d",buff_IP[i]);
	    	strcat(Communi.strIP,buff);
	    	strcat(Communi.strIP,".");
	    	
		}
		Communi.strIP[strlen(Communi.strIP)-1]='\0';	//去掉最后一个"."
#endif
		sprintf(Communi.strIP,"%d.%d.%d.%d", buff_IP[0], buff_IP[1], buff_IP[2], buff_IP[3]);
		//sprintf(Communi.strIP,"www.gttgps.cn");
	}
    else	if(ReConnect_Cou>=6&&ReConnect_Cou<9)
    {
    	memset(buff_DNS,0,sizeof(buff_DNS));
		GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0204,&len,&moveAddr);
	    W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,buff_DNS);
	    GetParamVal_ASCII(0x202,buff_DNS,(uint32 *)&len);
	    //strcat(Communi.strIP,(char *)buff_DNS);
	    strcpy(Communi.strIP,(char *)buff_DNS);
    }
    else	if(ReConnect_Cou>=9&&ReConnect_Cou<12)
    {
    	GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0203,&len,&moveAddr);
	    W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,buff_IP);
// Chad
#if 0
	    for(i=0;i<sizeof(buff_IP);i++)
	    {
	    	char 	buff[4];
	    	memset(buff,0,sizeof(buff));
	    	sprintf(buff,"%d",buff_IP[i]);
	    	strcat(Communi.strIP,buff);
	    	strcat(Communi.strIP,".");
	    	
			}
		Communi.strIP[strlen(Communi.strIP)-1]='\0';	//去掉最后一个"."
#endif
			sprintf(Communi.strIP,"%d.%d.%d.%d", buff_IP[0], buff_IP[1], buff_IP[2], buff_IP[3]);
			//sprintf(Communi.strIP,"www.gttgps.cn");
	}
	else
	{
		ReConnect_Cou=0;
	}
	
    GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,0x0205,&len,&moveAddr);
    W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,buff_Port);
    for(i=0;i<sizeof(buff_Port);i++)
    	port|=buff_Port[i]<<(8*(sizeof(buff_Port)-i-1));
    
	sprintf(Communi.strPort,"%d",port);
	
    
	return	TRUE;
	
}


//发送终端心跳包
uint8	Exec_Heart_Comm(void)
{
	  		
    uint8	uiReviceBuf0[TRANSLEN/2];
	uint16	uiNum=0;
	
	memset(uiReviceBuf0,0,sizeof(uiReviceBuf0));
	Term2Srv_Heart(uiReviceBuf0,&uiNum);
	Send_data(uiReviceBuf0,sizeof(uiReviceBuf0),&uiNum);
	uartWrite(UART2,uiReviceBuf0,uiNum,NULL); 
	
//	uartWrite(UART3,uiReviceBuf0,uiNum,NULL);	//测试
 
    return	TRUE;
    
}

uint8	schedLCD_Alm_Comm(uint32 *	schedLCD_CouSec,uint8	paramValue,uint32	timeout)
{
	if(*schedLCD_CouSec>=timeout)
	{	
		
		uint8 paramValue_alm=0;
		
		*schedLCD_CouSec=0;
		GetCustomValue(0x000e,&paramValue_alm);
		if(paramValue_alm!=paramValue)
		{
			SaveCustomValue(0x000e,&paramValue);//将调度屏故障告警保存在工作参数开关量第三项中。
			return	TRUE;
			
		}
		
	}	
	return 	FALSE;
	
}

⌨️ 快捷键说明

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