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

📄 schedlcd.c

📁 C语言源代码及相关资料
💻 C
📖 第 1 页 / 共 2 页
字号:
				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 + -