📄 schedlcd.c
字号:
#include "config.h"
uint8 schedLCD_Init_Ok=0;
INT16U strEncoder_SchedLCD(INT8U * dest ,INT16U *inewlen,STRU_MainSchedLCD *pcur_MainSchedLCD,ENUM_SchedLCD2Term_CommID baseCommID_Up)
{
INT16U iplace=0,itemp=0;
INT8U * ss;
INT16U tempPlace=0;
ss=dest;
if(pcur_MainSchedLCD!=NULL) //if(pcur_IPMAINDATA->answerFlag==MAIN_ANSWER_FLAG)
{ //回应调度屏消息 终端命令应答。
switch(pcur_MainSchedLCD->commandID)
{
case SchedLCD_QueryParam : //3.2.5.2. 参数查询(命令ID:72H) 12
{ //Term_UploadParam : //3.2.4.8. 参数查询应答(命令ID:08H) 12
if(pcur_MainSchedLCD->pContext!=NULL)
{
INT16U * p=NULL, * pTemp=NULL;
//INT16U tempPlace=0;
iplace=0;
pcur_MainSchedLCD->startChr=0x2a; //同步头字符 1 固定为'*'; 0x2a
ss[iplace++]=pcur_MainSchedLCD->startChr;
iplace+=sizeof(pcur_MainSchedLCD->dataLen);//命令长度 2 包括头尾'*'和'#'
pcur_MainSchedLCD->commandID=Term_UploadParam; //命令ID 1 //3.2.4.8. 参数查询应答(命令ID:08H) 12
ss[iplace++]=pcur_MainSchedLCD->commandID;
tempPlace=iplace;
pTemp=(INT16U *)pcur_MainSchedLCD->pContext;
p=pTemp;
while((INT16S)(*inewlen-tempPlace-4-1)>0) //判断长度中:去掉密码占用的4个字节长度,去掉尾字符占用的1个字节长度
{
INT16U paramAddr=0;
Term_UploadParam_Comm uploadParam;
uploadParam.param_ID=*pTemp; //2个字节
pTemp+=1;
tempPlace+=2;
uploadParam.paramValue_Len=0; //长度清0
uploadParam.query_Result_Flag=0; //0:成功,1:失败
ss[iplace++]=uploadParam.query_Result_Flag;
for(itemp=0;itemp<sizeof(uploadParam.param_ID);itemp++)
ss[iplace++]=(uint8)(uploadParam.param_ID>>(8*(sizeof(uploadParam.param_ID)-itemp-1)));
switch (uploadParam.param_ID)
{//注:相对于入网规范中定义的参数,调度屏增加了以下参数://新增参数主机全部以ASCII码的形式传送到调度屏。
case 0x0f00: //当前追踪时间间隔 ID 0X0F00
{
char str_Timeslot[10];
memset(str_Timeslot,0,sizeof(str_Timeslot));
sprintf(str_Timeslot,"%d",cur_Timeslot);
uploadParam.paramValue_Len=strlen(str_Timeslot);
ss[iplace++]=uploadParam.paramValue_Len;
memcpy(ss+iplace,str_Timeslot,strlen(str_Timeslot));
break;
}
case 0x0f01: //车机IP ID 0X0F01
uploadParam.paramValue_Len=strlen(cur_Communi.strIP);
ss[iplace++]=uploadParam.paramValue_Len;
memcpy(ss+iplace,cur_Communi.strIP,strlen(cur_Communi.strIP));
break;
case 0x0f02: //当前中心IP ID 0X0F02
uploadParam.paramValue_Len=strlen(cur_Communi.strIP);
ss[iplace++]=uploadParam.paramValue_Len;
memcpy(ss+iplace,cur_Communi.strIP,strlen(cur_Communi.strIP));
break;
case 0x0f03: //当前图片服务器IP ID 0X0F03
uploadParam.paramValue_Len=strlen(cur_Communi.strIP);
ss[iplace++]=uploadParam.paramValue_Len;
memcpy(ss+iplace,cur_Communi.strIP,strlen(cur_Communi.strIP));
break;
case 0x0f04: //软件版本号 ID 0X0F04
uploadParam.paramValue_Len=strlen(SoftwareVersionNO);
ss[iplace++]=uploadParam.paramValue_Len;
memcpy(ss+iplace,SoftwareVersionNO,strlen(SoftwareVersionNO));
break;
case 0x0f05: //协议版本号 ID 0X0F05
{
char tempStr[10];
memset(tempStr,0,sizeof(tempStr));
sprintf(tempStr,"%02x",ProtocolVersion);
uploadParam.paramValue_Len=strlen(tempStr);//HardwareVersionNO
ss[iplace++]=uploadParam.paramValue_Len;
memcpy(ss+iplace,tempStr,strlen(tempStr));
}
break;
default:
GetOmoveAddr(SETUP_PARAMS,SETUP_PARAMS_COUNT,uploadParam.param_ID,(uint16 *)&(uploadParam.paramValue_Len),¶mAddr);
if((iplace+uploadParam.paramValue_Len)>TRANSLEN) //调度屏数据长度可以为TRANSLEN,
{
iplace-=(1+sizeof(uploadParam.param_ID));
break;
}
if(uploadParam.param_ID==0x6001)
pcur_MainSchedLCD->dataLen=iplace;
ss[iplace++]=uploadParam.paramValue_Len;
W25X32_READ_Semphore(GetAddr(SETUP_PARAMS_SEC,paramAddr),(uint32)uploadParam.paramValue_Len,ss+iplace);
GetParamVal_ASCII(uploadParam.param_ID,ss+iplace,(uint32 *)&uploadParam.paramValue_Len);
ss[iplace-1]=uploadParam.paramValue_Len;//重新将参数长度值赋值。
break;
}
iplace+=uploadParam.paramValue_Len;
}
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;
FREE(p);
}
break;
}
case SchedLCD_LoginTerm : //3.2.5.4. 调度屏向定位终端登录(命令ID:74H) 13
{ //Term_InitStart : //3.2.4.4. 初始化开始指令(命令ID:04H) 11
iplace=0;
pcur_MainSchedLCD->startChr=0x2a; //同步头字符 1 固定为'*'; 0x2a
ss[iplace++]=pcur_MainSchedLCD->startChr;
iplace+=sizeof(pcur_MainSchedLCD->dataLen);//命令长度 2 包括头尾'*'和'#'
pcur_MainSchedLCD->commandID=Term_InitStart; //命令ID 1
ss[iplace++]=pcur_MainSchedLCD->commandID;
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)));
schedLCD_Init_Ok=0x01;//初始化开始
break;
}
default:
{ //case Term_CommAnswer : //3.2.4.1. 定位终端向调度屏发送应答命令(命令ID:00H) 10
STRU_Term2SchedLCD_Comm term2SchedLCD;
iplace=0;
pcur_MainSchedLCD->startChr=0x2a; //同步头字符 1 固定为'*'; 0x2a
ss[iplace++]=pcur_MainSchedLCD->startChr;
iplace+=sizeof(pcur_MainSchedLCD->dataLen);//命令长度 2 包括头尾'*'和'#'
term2SchedLCD.schedLCD_commID=pcur_MainSchedLCD->commandID; //命令ID 1 调度屏指令的ID
pcur_MainSchedLCD->commandID=Term_CommAnswer; //命令ID 1
ss[iplace++]=pcur_MainSchedLCD->commandID;
ss[iplace++]=term2SchedLCD.schedLCD_commID;
term2SchedLCD.exec_Result_Flag=0;//处理结果 1 0:成功 2:失败
ss[iplace++]=term2SchedLCD.exec_Result_Flag;
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)));
break;
}
}
}
else
{ //主动发往调度屏的命令
STRU_MainSchedLCD cur_MainSchedLCD;
pcur_MainSchedLCD=&cur_MainSchedLCD;
pcur_MainSchedLCD->pContext=NULL;
iplace=0;
pcur_MainSchedLCD->startChr=0x2a; //同步头字符 1 固定为'*'; 0x2a
ss[iplace++]=pcur_MainSchedLCD->startChr;
iplace+=sizeof(pcur_MainSchedLCD->dataLen);//命令长度 2 包括头尾'*'和'#'
pcur_MainSchedLCD->commandID=baseCommID_Up; //命令ID 1
ss[iplace++]=pcur_MainSchedLCD->commandID;
switch(baseCommID_Up)
{ //pcur_MainSchedLCD->pContext;//命令内容 不定
//case Term_CommAnswer : //3.2.4.1. 定位终端向调度屏发送应答命令(命令ID:00H) 10
//break; //strEncoder_SchedLCD函数内default:处理
case Term_SrvComm : //3.2.4.2. 转发中心下发的指令(命令ID:01H) 11
break;
case Term_SystemInfo : //3.2.4.3. 系统信息(命令ID:02H) 11
{
STRU_SystemInfo_Comm systemInfo;
systemInfo.cur_Integral=0x0000; //车载终端当前积分 2 占用两个字节,设置显示在主界面上当前的司机的积分,积分范围-32768至32768。
ss[iplace++]=0x00; //主机暂不增加司机积分功能,该值直接赋值为0x0000
ss[iplace++]=0x00;
systemInfo.cur_Date[0]=GPS_DATA.Time.Year; //当前日期 4 第一个字节代表年(2000年为0年),第二个字节代表月,第三个字节代表日,第四个字节代表星期
systemInfo.cur_Date[1]=GPS_DATA.Time.Mon;
systemInfo.cur_Date[2]=GPS_DATA.Time.Day;
systemInfo.cur_Date[3]=GPS_DATA.Time.Week;
for(itemp=0;itemp<sizeof(systemInfo.cur_Date);itemp++)
ss[iplace++]=systemInfo.cur_Date[itemp];
systemInfo.cur_Time[0]=GPS_DATA.Time.Hour; //当前时间 3 第一个字节代表小时,第二个字节代表分钟,第三个字节代表秒
systemInfo.cur_Time[1]=GPS_DATA.Time.Min;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -