📄 exec_func.c
字号:
/***********************************************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 + -