📄 schedlcd.c
字号:
systemInfo.cur_Time[2]=GPS_DATA.Time.Sec;
for(itemp=0;itemp<sizeof(systemInfo.cur_Time);itemp++)
ss[iplace++]=systemInfo.cur_Time[itemp];
if(GPS_DATA.Time.Flag=='A')
systemInfo.gps_Status=2; //GPS模块状态 1 0:模块故障;1:未定位;2:已定位;3:天线故障
else if(GPS_DATA.Time.Flag=='V')
systemInfo.gps_Status=1;
else if(GPS_Fault==1)
systemInfo.gps_Status=0;
else
systemInfo.gps_Status=3;
ss[iplace++]=systemInfo.gps_Status;
systemInfo.vidicon_Status=0x01; //摄像头状态 1 0:故障;1:正常。
ss[iplace++]=systemInfo.vidicon_Status; //主机不接摄像头的情况下,直接赋值0x01,表示正常,否则屏上会有摄像头故障显示
if(ReConnect_OK==0)
systemInfo.connect_Status=0; //连接状态 1 0:ppp正在连接;//1:ppp连接成功,但与中心未连接成功; //2:与中心建立连接。
else if(ReConnect_OK==2)
systemInfo.connect_Status=2;
else
systemInfo.connect_Status=1;
ss[iplace++]=systemInfo.connect_Status;
systemInfo.mobile_Rssi=CSQVal; //AT+CSQ手机信号强度 1 取值范围0~30,表示GPRS/CDMA信号强度,0最弱,30最强。
ss[iplace++]=systemInfo.mobile_Rssi; //0 : ≤-113 dBm 1 : -111 dBm 2...30 : -109 到-53 dBm 31 : -51dBm 99 : 未知或不可检测
systemInfo.mobile_operators=0;//运营商 1 0:移动 1:联通 >1:其他
ss[iplace++]=systemInfo.mobile_operators;
systemInfo.carry_Status=0; //空重车状态 .1 0:空 1:重 2:未营运(保留)
ss[iplace++]=systemInfo.carry_Status;
systemInfo.redAlert_Status=0;//紧急报警状态 1 0:无紧急报警 1:正在紧急报警
ss[iplace++]=systemInfo.redAlert_Status;
systemInfo.saveAlertPic_Status=0;//存放报警图片状态 1 0:没有存储报警图片 1:已经存储了报警图片 //直接赋值0x00
ss[iplace++]=systemInfo.saveAlertPic_Status;
systemInfo.car_Speed=GPS_DATA.Speed; //车辆速度 1 单位:公里/小时,表示范围0~255。
ss[iplace++]=systemInfo.car_Speed;
systemInfo.satellite_cou=GPS_DATA.StlUsed; //GPS卫星数目 1 0~12颗
ss[iplace++]=systemInfo.satellite_cou;
systemInfo.pricecounter_Status=0x01;//计价器状态 1 0:故障 1:正常 //主机不接计价器的情况下,直接赋值0x01,表示正常,否则屏上会有计价器故障显示
ss[iplace++]=systemInfo.pricecounter_Status;
systemInfo.lowV_Alarm=ALARM_ID_STATUS[ALARMID_COUNT+3]; //低压报警 1 0:主电源电压低 1:正常
ss[iplace++]=systemInfo.lowV_Alarm;
break;
}
//case Term_InitStart : //3.2.4.4. 初始化开始指令(命令ID:04H) 11
//break; //strEncoder_SchedLCD函数内SchedLCD_LoginTerm:处理
//case Term_InitEnd : //3.2.4.5. 初始化结束指令(命令ID:05H) 11
//break;
case Term_UpgradeStatus : //3.2.4.6. 定位终端固件升级状态(命令ID:06H) 11//固件升级进度 1 0 ~100,表示主机固件升级进度为0%~100%。
break;
case Term_CtrlInfo : //3.2.4.7. 定位终端发送控制信息(命令ID:07H) 11
break;
//case Term_UploadParam : //3.2.4.8. 参数查询应答(命令ID:08H) 12
//break; //strEncoder_SchedLCD函数内SchedLCD_QueryParam对Term_UploadParam:处理
default:
break;
}
pcur_MainSchedLCD->endChr=0x23;//同步尾字符 1 固定为'#' ; 0x23
ss[iplace++]=pcur_MainSchedLCD->endChr;
pcur_MainSchedLCD->dataLen=iplace;//命令长度 2 包括头尾'*'和'#'
for(itemp=0;itemp<sizeof(pcur_MainSchedLCD->dataLen);itemp++)
ss[itemp+1]=(INT8U)((pcur_MainSchedLCD->dataLen)>>(8*(sizeof(pcur_MainSchedLCD->dataLen)-itemp-1)));
}
*inewlen=iplace;
return TRUE;
}
INT16U strDecode_SchedLCD(INT8U * str,INT16U * inewlen,STRU_MainSchedLCD * pcur_MainSchedLCD)
{
INT8U RTN_FLAG=0;
INT8U * ss;
INT16U iplace=0,itemp=0;
pcur_MainSchedLCD->pContext=NULL;
ss=str;
iplace=0;
pcur_MainSchedLCD->startChr=ss[iplace++]; //同步头字符 1 固定为'*'; 0x2a
pcur_MainSchedLCD->dataLen=0;
for(itemp=0;itemp<sizeof(pcur_MainSchedLCD->dataLen);itemp++)//命令长度 2 包括头尾'*'和'#'
pcur_MainSchedLCD->dataLen|=(INT16U)(ss[iplace++]<<(8*(sizeof(pcur_MainSchedLCD->dataLen)-itemp-1))); //
if(*inewlen!=pcur_MainSchedLCD->dataLen) return 0xffff; //信息长度不对,或者是非法信息
pcur_MainSchedLCD->commandID=ss[iplace++]; //命令ID 1
if((pcur_MainSchedLCD->commandID>>4)>0x00)
{
switch(pcur_MainSchedLCD->commandID)
{
case SchedLCD_CommAnswer : //3.2.5.1. 调度屏向定位终端发送命令应答(命令ID:70H) 12
{
STRU_SchedLCD2Term_Comm schedLCD2Term;
schedLCD2Term.term_commID=ss[iplace++]; //命令ID 1 定位终端指令的ID
schedLCD2Term.exec_Result_Flag=ss[iplace++];//处理结果 1 0:成功 2:失败
if(schedLCD2Term.term_commID==Term_InitEnd)
{
if(schedLCD2Term.exec_Result_Flag==0x00)
schedLCD_Init_Ok=0x03;//初始化成功
else
schedLCD_Init_Ok=0x01;//初始化失败
}
RTN_FLAG= MAIN_UNANSWER_FLAG;
break;
}
case SchedLCD_QueryParam : //3.2.5.2. 参数查询(命令ID:72H) 12
{
INT16U *p=NULL;
SchedLCD_QueryParam_Comm queryParam;
queryParam.pParamID=NULL;
memmove(queryParam.passWord,ss+iplace,sizeof(queryParam.passWord));
iplace+=sizeof(queryParam.passWord);
if(memcmp(queryParam.passWord,Password,sizeof(queryParam.passWord))==0)
{
p=(INT16U *)malloc(*inewlen-iplace-1); //判断长度中:去掉尾字符占用的1个字节长度
if(NULL==p) break;
pcur_MainSchedLCD->pContext=(void *)p;
while((INT16S)(*inewlen-iplace-1)>0) //判断长度中:去掉尾字符占用的1个字节长度
{
*p=(INT16U)(ss[iplace+1]|(ss[iplace]<<8));
p+=1;
iplace+=2;
}
RTN_FLAG= MAIN_ANSWER_FLAG;
}
else
RTN_FLAG= MAIN_UNANSWER_FLAG;
break;
}
case SchedLCD_SetupParam : //3.2.5.3. 参数设置(命令ID:73H) 13
{
INT16U len=0,moveAddr=0;
uint8 * p=NULL;
SchedLCD_SetupParam_Comm setupParam;
memmove(setupParam.passWord,ss+iplace,sizeof(setupParam.passWord));
iplace+=sizeof(setupParam.passWord);
if(memcmp(setupParam.passWord,Password,sizeof(setupParam.passWord))==0)
{
setupParam.paramID=0;
for(itemp=0;itemp<sizeof(setupParam.paramID);itemp++)
setupParam.paramID|=(INT16U)(ss[iplace++]<<(8*(sizeof(setupParam.paramID)-itemp-1)));//参数ID 2
setupParam.pParamValue=(uint8 *)malloc(*inewlen-iplace); //参数值 不定
setupParam.pParamValue=ss+iplace;
GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,setupParam.paramID,&len,&moveAddr);
p=(uint8 *)malloc(len);
if(NULL==p) break;
memset(p,0xFF,len);
memcpy(p,setupParam.pParamValue,*inewlen-iplace-1);
W25X32_WRITE(GetAddr(SETUP_PARAMS_SEC,moveAddr),len,p,SETUP_PARAMS_DATASIZE);
//主中心通讯参数被修改,则更改重连标志
if(setupParam.paramID==0x0200||setupParam.paramID==0x0201||setupParam.paramID==0x0202||setupParam.paramID==0x0205)
{
if(Reconn_Flag!=1&&First_Run_Flag==0)
{
T1MAT_Init(Fpclk*((uint32)120), 0, 1, 0, 0, 1); // 120秒钟定时
Reconn_Flag=1;
}
}
if(setupParam.paramID==0x0402) //低电压门限值及采样次数时间
memcpy(Lmt_V_Time,setupParam.pParamValue,sizeof(Lmt_V_Time));
FREE(p);
RTN_FLAG= MAIN_ANSWER_FLAG;
}
else
RTN_FLAG= MAIN_UNANSWER_FLAG;
break;
}
case SchedLCD_LoginTerm : //3.2.5.4. 调度屏向定位终端登录(命令ID:74H) 13
schedLCD_Init_Ok=0x02;//收到登陆命令
RTN_FLAG= MAIN_ANSWER_FLAG;
break;
case SchedLCD_UploadCommTerm : //3.2.5.5. 上传中心指令(命令ID:75H) 13
break;
case SchedLCD_BillData : //3.2.6. 表单数据 ( 命令ID: 79H) 14
break;
default:
break;
}
}
iplace++; //尾字符占用一个字节长度。
*inewlen=iplace;
return RTN_FLAG;
}
INT16U ParseCode_SchedLCD(INT8U * buff,INT16U *inewlen,INT8U updown_flag,ENUM_SchedLCD2Term_CommID baseCommID_Up)
{
STRU_MainSchedLCD cur_MainSchedLCD;
INT16U ret=0;
if(updown_flag==DWLOAD)
{
ret=strDecode_SchedLCD(buff,inewlen,&cur_MainSchedLCD);
if(ret==MAIN_ANSWER_FLAG)
{
memset(buff,0,TRANSINFOLEN/2);
strEncoder_SchedLCD(buff,inewlen,&cur_MainSchedLCD,NULL);
}
else
return FALSE;
}
else if(updown_flag==UPLOAD)
{
memset(buff,0,TRANSINFOLEN/2);
strEncoder_SchedLCD(buff,inewlen,NULL,baseCommID_Up);
}
else
return FALSE;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -