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

📄 schedlcd.c

📁 C语言源代码及相关资料
💻 C
📖 第 1 页 / 共 2 页
字号:


#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),&paramAddr);
								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 + -