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

📄 exec_func.c

📁 C语言源代码及相关资料
💻 C
📖 第 1 页 / 共 4 页
字号:
/***********************************************Copyright (c)*********************************************
**--------------File Info---------------------------------------------------------------------------------
** File name:			    
** Last modified Date:              
** Last Version:		    
** Descriptions:		    
**
*********************************************************************************************************/

#include "Config.h"

uint8	First_Run_Flag=0;	//系统第一次启动标志,1个字节.为0时表示已执行第一次启动,非0表示还未执行过
uint8	GPS_Fault=0;	//GPS模块故障,0:无,1:有
uint8	schedLCD_BuildIn_OK=0;	//调度屏是否安装。0:缺省值,表示未安装
uint8	Reconn_Flag=0;	//主IP,端口,APN修改标志,重连
uint8	INIT_FLAG=1;	//默认值为1,恢复出厂值标志
uint8	FTP_UPGRADE_FLAG=0;	//FTP升级命令执行标志。
uint8	SRV_HeartSlot=120;	//中心下发心跳间隔
uint8	HeartSlot=40;	//上传心跳包时间间隔
uint8	Rst_ACC_Mileage=0;	//重新设置起始累计里程数和ACC累计时间
Communi_Stru	cur_Communi;
Communi_Stru	Communi;
uint16	cur_WorkParamUploadTimeslot=0;		//当前工作参数上传设置二时间间隔
STRU_D_Trace_Comm		trace_FORM;//跟踪结构全局变量
uint16	cur_Timeslot=0;		//当前追踪时间间隔
uint32	ACCIN_SEC_COU=0;	//ACC开累计时间
uint32	RemoteCtrl_Status=0;//远程控制状态标志
uint8	bl_DiaoDuMes=0;	//需要发送调度信息
uint8	bl_Warning=0;	//发生报警信息
uint8	bl_powerdown=0;
uint8	bl_poweroff=0;
uint16  powerdown_settime=0;//中心设置的休眠时间
uint16  poweroff_settime=0;//中心设置的关机时间

float	milValue=0;		//里程数
float	Distance_Slot=0;	//当前移动里程数
uint8	Last_ACC_Mileage[10];	//里程数,ACC开关状态及ACC累计时间
uint8	CSQVal=0;	//AT+CSQ手机信号强度	1	取值范围0~30,表示GPRS/CDMA信号强度,0最弱,30最强。
INT8U	TERM_ID[7];		//定位终端ID
char	StrTermID[15];	//定位终端ID,ASCII码

//uint8	cur_Running_Compress_Flag=0;	//当前正在运行压缩回传标志,0:表示没有运行,1:表示正在运行。
uint16	cur_CompressRevert_Cou=0;	//压缩回传的次数
uint8	cur_DatumMark_Falg=0;		//当前压缩--0:基准点未确定,1:基准点已确定
uint8	cur_Compress_PlaceCou=0;	//当前压缩--当前压缩位置数
uint8	cur_CompressTimeslot=0;		//当前压缩--ACC开关时间间隔
uint8	new_setupCompressRevert_Flag=0;	//更新压缩回传设置参数标志。0:表示未更新,1:表示已更新
STRU_D_SetupCompressRevert_Comm		new_setupCompressRevert;	//新的压缩回传参数。待当前压缩完成后,更新setupCompressRevert
STRU_D_SetupCompressRevert_Comm		setupCompressRevert;	//设置当前压缩回传参数

Stru_Cfg_WorkParam		cfg_WorkParam;	//当前设置的工作参数
STRU_WorkParamUploadCfg2_Comm	workParamUploadCfg2;	////工作参数上传设置二
uint8	TimePoint_Cou=0;	//工作参数上传设置一 设置的时间点数量
STRU_WorkParamUploadCfg1_Comm	workParamUploadCfg1;	//工作参数上传设置一(指定时间点方式

uint8	Motorman_LoginStau=0;	//驾驶员状态登陆状态//0:表示请求登陆//1:表示请求退出//2:表示登陆失败
uint8 	G_RestMsg=0;		//是否有登陆提示回复标志
char	G_LoadingMotorman[DEVICE_LEN];	//已登陆驾驶员ID
char	G_DriverLoginMobile[DEVICE_LEN];//已登陆驾驶员手机号码
char 	MsgNum[2]={0,0};    //短信编号
char 	G_SMSInfo[TRANSLEN/2];		//手机短消息内容

char	*	HardwareVersionNO	="gaojing_V1.0";		//终端硬件版本号	使用ASCII码表示,版本号长度小于128个字节。
char	*	SoftwareVersionNO	="gaojing_V1.0";		//软件版本号   版本号为:V1.0
char	*	HardwareSN			="66666666";			//硬件序列号

INT8U	CUR_ALARM_ID=0;	//当前告警ID
uint8	Password[4];	//终端密码
uint8	Lmt_V_Time[2]={0,0};	//低电压门限值及采样次数时间

uint16	oilSum=0;	//油量
uint16	temValue1=0;	//传感器1温度
uint16	temValue2=0;	//传感器2温度

uint32	G_LastLatitude=0;	//基准点纬度
uint32	G_lastLongitude=0;//基准点经度

uint32	cur_BlindSection_SaveAddr=0;	//盲区保存的当前地址
uint32	cur_BlindSection_RepairAddr=0;	//盲区回传的当前地址
unsigned	long long	BlindSection_Cfg=0ull;//盲区补传数据设置
//初始化全局变量函数
void	Init_Glb_Param(void)
{
	ReConnect_Cou=0;	//重连次数
	Connect_OK=FALSE;
	ReConnect_OK=0;
	Rec_OK=0;
	
	RING_COU=0;	//ring铃声次数
	First_Run_Flag=0;	//系统第一次启动标志,1个字节.为0时表示已执行第一次启动,非0表示还未执行过
	GPS_Fault=0;	//GPS模块故障,0:无,1:有
	schedLCD_BuildIn_OK=0;	//调度屏是否安装。0:缺省值,表示未安装
	Reconn_Flag=0;	//主IP,端口,APN修改标志,重连
	//INIT_FLAG=1;	//默认值为1,恢复出厂值标志
	FTP_UPGRADE_FLAG=0;	//FTP升级命令执行标志。
	SRV_HeartSlot=120;	//中心下发心跳间隔
	HeartSlot=40;	//上传心跳包时间间隔
	Rst_ACC_Mileage=0;	//重新设置起始累计里程数和ACC累计时间
	//Communi_Stru	cur_Communi;
	//Communi_Stru	Communi;
	cur_WorkParamUploadTimeslot=0;		//当前工作参数上传设置二时间间隔
	//STRU_D_Trace_Comm		trace_FORM;//跟踪结构全局变量
	cur_Timeslot=0;		//当前追踪时间间隔
	ACCIN_SEC_COU=0;	//ACC开累计时间
	RemoteCtrl_Status=0;//远程控制状态标志
	bl_DiaoDuMes=0;	//需要发送调度信息
	bl_Warning=0;	//发生报警信息
	bl_powerdown=0;
	bl_poweroff=0;
	powerdown_settime=0;//中心设置的休眠时间
	poweroff_settime=0;//中心设置的关机时间

	milValue=0;		//里程数
	Distance_Slot=0;	//当前移动里程数
	memset(Last_ACC_Mileage,0,sizeof(Last_ACC_Mileage));	//里程数,ACC开关状态及ACC累计时间
	CSQVal=0;	//AT+CSQ手机信号强度	1	取值范围0~30,表示GPRS/CDMA信号强度,0最弱,30最强。
	memset(TERM_ID,0,sizeof(TERM_ID));		//定位终端ID
	memset(StrTermID,0,sizeof(StrTermID));	//定位终端ID,ASCII码

	//cur_Running_Compress_Flag=0;	//当前正在运行压缩回传标志,0:表示没有运行,1:表示正在运行。
	cur_CompressRevert_Cou=0;	//压缩回传的次数
	cur_DatumMark_Falg=0;		//当前压缩--0:基准点未确定,1:基准点已确定
	cur_Compress_PlaceCou=0;	//当前压缩--当前压缩位置数
	cur_CompressTimeslot=0;		//当前压缩--ACC开关时间间隔
	new_setupCompressRevert_Flag=0;	//更新压缩回传设置参数标志。0:表示未更新,1:表示已更新
	//STRU_D_SetupCompressRevert_Comm		new_setupCompressRevert;	//新的压缩回传参数。待当前压缩完成后,更新setupCompressRevert
	//STRU_D_SetupCompressRevert_Comm		setupCompressRevert;	//设置当前压缩回传参数
	setupCompressRevert.compressRevertData		=0;		// 需压缩回传的数据.  00:表示定位数据.01:表示带工作参数的定位数据
	setupCompressRevert.accIn_CompressTimeSlot	=0;	//压缩的时间间隔(ACC开).单位秒,最小为1秒。
	setupCompressRevert.accOut_CompressTimeSlot	=0;	//压缩的时间间隔(ACC关).单位秒,最小为1秒。
	setupCompressRevert.compress_PlaceCou		=0;			//每包压缩的位置数。		表示一个数据包可以包含的压缩位置的数量,表示范围10~33,默认值为33。
	setupCompressRevert.compressRevert_Cou		=0;		//压缩回传的次数.     表示需要压缩回传的次数,当改值为FFFFH时表示连续不断的回传,当该值为0000H表示停止发送。
	
	//Stru_Cfg_WorkParam		cfg_WorkParam;	//当前设置的工作参数
	//STRU_WorkParamUploadCfg2_Comm	workParamUploadCfg2;	////工作参数上传设置二
	TimePoint_Cou=0;	//工作参数上传设置一 设置的时间点数量
	//STRU_WorkParamUploadCfg1_Comm	workParamUploadCfg1;	//工作参数上传设置一(指定时间点方式

	Motorman_LoginStau=0;	//驾驶员状态登陆状态
	G_RestMsg=0;		//是否有登陆提示回复标志
	memset(G_LoadingMotorman,0,sizeof(G_LoadingMotorman));	//已登陆驾驶员ID
	memset(G_DriverLoginMobile,0,sizeof(G_DriverLoginMobile));//已登陆驾驶员手机号码
	memset(MsgNum,0,sizeof(MsgNum));    //短信编号
	memset(G_SMSInfo,0,sizeof(G_SMSInfo));		//手机短消息内容
	
	HardwareVersionNO	="V2.0";		//终端硬件版本号	使用ASCII码表示,版本号长度小于128个字节。
	SoftwareVersionNO	="V1.0";		//软件版本号   版本号为:V1.0
	HardwareSN			="66666666";			//硬件序列号

	CUR_ALARM_ID=0;	//当前告警ID
	memset(Password,0,sizeof(Password));	//终端密码
	memset(Lmt_V_Time,0,sizeof(Lmt_V_Time));	//低电压门限值及采样次数时间

	oilSum=0;	//油量
	temValue1=0;	//传感器1温度
	temValue2=0;	//传感器2温度
	
	////////////////////////////////////////////////////////////////////////////
	gsm_BlindBorough=0;		//GSM盲区标志位 =0非盲区 ;=1盲区
	gprs_BlindBorough=0;	//GPRS盲区标志位 =0非盲区 ;=1盲区
	MotormanLoadSign=0;	//盲区或无连接的时候,驾驶员拨打终端电话状态标志,0:表示未处理,1:表示退出,2:表示盲区,3:表示登陆。
	
	G_LastLatitude=0;	//基准点纬度
	G_lastLongitude=0;//基准点经度
	
	cur_BlindSection_SaveAddr=0;	//盲区保存的当前地址
	cur_BlindSection_RepairAddr=0;	//盲区回传的当前地址
	BlindSection_Cfg=0x00000000ull;//盲区补传数据设置
	
	
}
//得到实际设置的需要上传的工作参数ID。
uint8	GetCurCfgWorkParamID(Stru_Cfg_WorkParam	*	pCfg_WorkParam)
{
	
	uint8	*	p2=NULL;
	INT16U		len=0,i=0;
	uint8		buff[0x48];	//最多支持36个工作参数
	
	memset(pCfg_WorkParam->cfg_WorkParamID,0,sizeof(pCfg_WorkParam->cfg_WorkParamID));
	pCfg_WorkParam->cfg_WorkParamID_cou=0;
	
	memset(buff,0,sizeof(buff));
	GetParamValue(0x0212,buff);	//得到实际设置的需要上传的工作参数。
	p2=memchr(buff,0xff,sizeof(buff));	//判断是否全部工作参数
	if(p2!=NULL)
		len=p2-buff;
	else
		len=sizeof(buff);
	
	for(i=0;i<len;i+=2)
	{
		pCfg_WorkParam->cfg_WorkParamID[i/2]=(INT16U)(buff[i+1]|(buff[i]<<8));
   		pCfg_WorkParam->cfg_WorkParamID_cou++;
	}
	
	
	return	TRUE;
	
}

//得到实际设置的需要上传的工作参数值
uint8	GetCurCfgWorkParamValue(INT16U	param_ID,INT16U	paramValue_Len,uint8 *	paramValue)
{
	uint8	buff[6];
	memset(buff,0,sizeof(buff));
	
	switch	(param_ID)
	{
		//工作参数ID	参数名称	描述
		//开关量类工作参数(第一个字节为OOH)
		case	0x0001:      //开关量1	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0002:      //开关量2	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0003:      //开关量3	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0004:      //开关量4	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		memcpy(paramValue,buff,paramValue_Len);
		case	0x0005:      //开关量5	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0006:      //开关量6	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0007:      //开关量7	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0008:      //开关量8	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0009:      //开关量9	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x000A:      //开关量10	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x000B:      //开关量11	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x000C:      //开关量12	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x000D:      //开关量13	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x000E:      //开关量14	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x000F:      //开关量15	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0010:      //开关量16	占用1个字节,0表示未连接;1表示关闭;2表示打开;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0011:		//0011H	无线开关量1	占用6个字节,
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0012:		//0012H	无线开关量2	占用6个字节,
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0013:		//0013H	无线开关量3	占用6个字节,
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0014:		//0014H	无线开关量4	占用6个字节,
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0015:		//0015H	无线开关量5	占用6个字节,
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0016:		//0016H	无线开关量6	占用6个字节,
		memcpy(paramValue,buff,paramValue_Len);
		break;
		
		//数值类工作参数(第一个字节为O1H)
		case	0x0100:      //ACC累计时间	占用4个字节,数值范围0~4294967295,单位:秒。
		memcpy(buff,Last_ACC_Mileage+5,4);
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0101:      //里程数	占用4个字节,数值范围0~4294967295,单位:米。
		memcpy(buff,Last_ACC_Mileage,4);
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0102:      //油箱油位值	占用2个字节,  数值范围0~65535   单位:0.001V
		buff[0]=(uint8)(oilSum>>8);
		buff[1]=(uint8)oilSum;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0103:      //GSM信号强度	占用1个字节,数值范围0~31
		buff[0]=CSQVal;
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0104:      //喷油累计时间	占用4个字节,数值范围0~4294967295,单位:mS
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0105:      //温度值	占用3个字节,具体详见表A.46
		{
			char temp[10];
			
			sprintf(temp,"%d",(INT16S)temValue1);
			if(temp[0]=='-')
			{
				buff[0]=0x11;
				memmove(temp,temp+1,strlen(temp+1));
				temp[strlen(temp)-1]='\0';
				
			}
			else
				buff[0]=0x00;
			buff[2]=(uint8)atoi(&temp[strlen(temp)-1]);
			temp[strlen(temp)-1]='\0';
			buff[1]=(uint8)atoi(temp);
			memcpy(paramValue,buff,paramValue_Len);
		}
		break;
		case	0x0106:      //油箱油位值(无线)	占用2个字节,  数值范围0~65535   单位:0.01V
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0107:      //脉冲(1)信号个数	占用4个字节,数值范围0~4294967295,单位:千个
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0108:      //湿度值(无线)	占用2个字节,具体详见表A.47
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0109:		//0109H	油箱1油位百分比	占用1个字节,表示当前油位的百分比 单位:% 取值范围:0-100
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0111:		//0111H	6无线温度值1	具体详见表A.48
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0112:		//0112H	6无线温度值2	具体详见表A.48
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0113:		//0113H	6无线温度值3	具体详见表A.48
		memcpy(paramValue,buff,paramValue_Len);
		break;
		case	0x0114:		//0114H	6无线温度值4	具体详见表A.48
		memcpy(paramValue,buff,paramValue_Len);
		break;
		
		//数据传输类工作参数(第一个字节为O2H)
		case	0x0200:      //数据传输1	详细参见每批次采购技术状态
		memcpy(paramValue,buff,paramValue_Len);
		break;
		
	}
	return	TRUE;
	
}

//得到实际设置的需要上传的所有工作参数ID及参数值,并放入SS
uint8	GetCfgWorkParamItem_All(uint8	* ss,uint16	*	p_iplace)
{
	uint8	i=0,iTemp=0;
	uint16	iplace=*p_iplace;
	for(i=0;i<cfg_WorkParam.cfg_WorkParamID_cou;i++)
	{
		if(cfg_WorkParam.cfg_WorkParamID[i]>0)
		{
			WorkParam_Item		workParam;
			INT16U	len=0,moveAddr=0;
			
			GetOmoveAddr(WORK_PARAMS,WORK_PARAMS_COUNT,cfg_WorkParam.cfg_WorkParamID[i],&len,&moveAddr);
			workParam.workParamValue_Len=len;
			/////////////////////////////////////工作参数项
			workParam.workParam_ID=cfg_WorkParam.cfg_WorkParamID[i];
			for(iTemp=0;iTemp<sizeof(workParam.workParam_ID);iTemp++)
				ss[iplace++]=(uint8)(workParam.workParam_ID>>(8*(sizeof(workParam.workParam_ID)-iTemp-1)));
			ss[iplace++]=workParam.workParamValue_Len;
			GetCurCfgWorkParamValue(workParam.workParam_ID,workParam.workParamValue_Len,workParam.pWorkParam_Value);
			for(iTemp=0;iTemp<workParam.workParamValue_Len;iTemp++)

⌨️ 快捷键说明

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