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

📄 main.c

📁 用来pdu编解码
💻 C
📖 第 1 页 / 共 3 页
字号:
	else if (strcmp(cmd , "TM+WPDP=?\r")==0)//显示所有工作参数
	{		
		///////////////////////////////////////////////////////
		dprintf0("\r\n+WPTP: %d,%d,%d,%d\r\nOK\r\n", 
			WorkPara.sLoginMsgPeriod, 
			WorkPara.sWarnMsgPeriod,
			WorkPara.sCarStateMsgPeriod,
			WorkPara.sClass1LockDelay_m);
			
		//////////////////////////////////////////////////////
		myprintf0("\r\n+WPSB: ");
		for(kk=0; kk< (SENSORSNUM-1); kk++)
		{
			dprintf0("%d:%d,", kk+1, WorkPara.SensorsBound[kk]);	
		}	
		dprintf0("%d:%d\r\nOK\r\n", SENSORSNUM, WorkPara.SensorsBound[SENSORSNUM-1]);
		
		//////////////////////////////////////////////////////
		
		
		flag = 1;	
	}
	else if (strcmp(cmd , "TM+WPTP=?\r")==0)//读取时间设置
	{		
		dprintf0("\r\n+WPTP: %d,%d,%d,%d\r\nOK\r\n", 
			WorkPara.sLoginMsgPeriod, 
			WorkPara.sWarnMsgPeriod,
			WorkPara.sCarStateMsgPeriod,
			WorkPara.sClass1LockDelay_m);
		flag = 1;	
	}
	else if (strstr(cmd , "TM+WPTP=")!=0)//设置时间参数
	{
			if (sscanf(cmd, "TM+WPTP=%d,%d,%d,%d\r", 
				&(WorkPara.sLoginMsgPeriod), 
				&(WorkPara.sWarnMsgPeriod),
				&(WorkPara.sCarStateMsgPeriod),
				&(WorkPara.sClass1LockDelay_m)) == 4)
			{	
				
				dprintf0("\r\n+WPTP: %d,%d,%d,%d\r\nOK\r\n", 
					WorkPara.sLoginMsgPeriod, 
					WorkPara.sWarnMsgPeriod,
					WorkPara.sCarStateMsgPeriod,
					WorkPara.sClass1LockDelay_m);
					
				Myeeprom_write_block( (void *)&WorkPara.sLoginMsgPeriod, (void *)WP_LOGINPERD_ADDR, 2);
				Myeeprom_write_block( (void *)&WorkPara.sWarnMsgPeriod, (void *)WP_WARNPERD_ADDR, 2);

				flag = 1;	
			}
			else
			{				
				flag = 0;				
			}
	}	
	else if (strcmp(cmd , "TM+BPRD=D\r")==0)//基本参数恢复为默认值
	{
		ParaRecover();
		ParaInit();	
		dprintf0("\r\n+BPID: %s%s%s\r\nOK\r\n", 
							BasicPara.TM_Time,
							BasicPara.TM_type,
							BasicPara.TM_id
							);	

		dprintf0("\r\n+BPCN: %s\r\nOK\r\n", strlen(BasicPara.CenterGsmNum), BasicPara.CenterGsmNum);
		
		
		flag = 1;	
	}
	else if (strcmp(cmd , "TM+BPDP=?\r")==0)//display basic para
	{
		dprintf0("\r\n+BPID: %s%s%s\r\nOK\r\n", 
							BasicPara.TM_Time,
							BasicPara.TM_type,
							BasicPara.TM_id
							);	

		dprintf0("\r\n+BPCN: %s\r\nOK\r\n", BasicPara.CenterGsmNum);
				
		flag = 1;	
	}
	
				
	//错误命令
	if (flag == 1)
	{
		myprintf0("\r\n#ZF> ");
	}
	else
	{
		ErrorConsole();	
	}
	
	return 0;
}
void ErrorConsole(void)
{
	myprintf0("ERROR\r\n#ZF> ");		
}

//**************************************************************************
//函数:dprintf0
//功能: 通过串口0格式化输出字符串
//**************************************************************************
void dprintf0(char *format, ...)
{
	va_list args;
	char    buffer[255];
	
	va_start(args,format);
	
	vsprintf(buffer,format,args);
	
	va_end(args);  
	 
	myprintf0(buffer);
}
//**************************************************************************
//函数:dprintf1
//功能: 通过串口1格式化输出字符串
//**************************************************************************
void dprintf1(char *format, ...)
{
	va_list args;
	char    buffer[255];
	
	va_start(args,format);
	
	vsprintf(buffer,format,args);
	
	va_end(args);  
	 
	myprintf1(buffer);		
}
//**************************************************************************
//函数:tmEventProcess
//功能: 终端事件处理
//**************************************************************************
void tmEventProcess(void)
{

	TFrame Frame;
	SM_PARAM MySM_PARAM;
	
	if (SysState.fSendLoginMsg.flag == 1)
	{
		SysState.fSendLoginMsg.flag = 0;
		
		//生成注册消息
		Frame.type = F_TYPE_RESPOND;
		Frame.code = F_CODE_LOGIN;
		Frame.msglen = 0;
		Frame.msg = MySM_PARAM.TP_UD;
		tmCreateMsg( &Frame);
		MySM_PARAM.TP_UDlen = Frame.msglen;	

		//发送消息
		if (Frame.msglen > 0)
		{						
			myprintf0("\n注册");			
			SendSms(&MySM_PARAM);			
		}			
	}	
	if (SysState.fSendCarStateMsg.flag == 1)
	{
		SysState.fSendCarStateMsg.flag = 0;
		
		//生成车辆状态消息
		Frame.type = F_TYPE_RESPOND;
		Frame.code = F_CODE_CARSTATE;
		Frame.msglen = 0;
		Frame.msg = MySM_PARAM.TP_UD;
		tmCreateMsg( &Frame);
		MySM_PARAM.TP_UDlen = Frame.msglen;		

		//发送消息
		if (Frame.msglen > 0)
		{						
			myprintf0("\n发送车辆状态");			
			SendSms(&MySM_PARAM);			
		}
	}	
	
	if (SysState.fSendSetPataMsg == 1)
	{
		SysState.fSendSetPataMsg = 0;
		
		//生成工作参数消息
		Frame.type = F_TYPE_RESPOND;
		Frame.code = F_CODE_GETWORKPARA;
		Frame.msglen = 0;
		Frame.msg = MySM_PARAM.TP_UD;
		tmCreateMsg( &Frame);	
		MySM_PARAM.TP_UDlen = Frame.msglen;		
		
		//发送消息
		if (Frame.msglen > 0)
		{						
			myprintf0("\n工作参数消息");			
			SendSms(&MySM_PARAM);			
		}
	}
	
	if (SysState.fSendWorkState == 1)
	{
		SysState.fSendWorkState = 0;
		
		//生成工作状态消息
		Frame.type = F_TYPE_RESPOND;
		Frame.code = F_CODE_GETWORKSTATE;
		Frame.msglen = 0;
		Frame.msg = MySM_PARAM.TP_UD;
		tmCreateMsg( &Frame);
		MySM_PARAM.TP_UDlen = Frame.msglen;			

		//发送消息
		if (Frame.msglen > 0)
		{						
			myprintf0("\n工作状态消息");			
			SendSms(&MySM_PARAM);			
		}
	}	
		
	if (SysState.fClass1Loack.flag == 1)
	{
		Myprintf("一级锁闭\n");
		SysState.fClass1Loack.flag = 0;		
		SysState.fSendWorkState = 0;
		
		//生成工作状态消息
		Frame.type = F_TYPE_RESPOND;
		Frame.code = F_CODE_GETWORKSTATE;
		Frame.msglen = 0;
		Frame.msg = MySM_PARAM.TP_UD;
		tmCreateMsg( &Frame);	
		MySM_PARAM.TP_UDlen = Frame.msglen;			

		//发送消息
		if (Frame.msglen > 0)
		{						
			myprintf0("\n一级锁闭消息");			
			SendSms(&MySM_PARAM);			
		}	
	}
	if (SysState.fClass2Loack.flag == 1)
	{
		Myprintf("二级锁闭\n");
		SysState.fClass2Loack.flag = 0;		
		SysState.fSendWorkState = 0;
		
		//生成工作状态消息
		Frame.type = F_TYPE_RESPOND;
		Frame.code = F_CODE_GETWORKSTATE;
		Frame.msglen = 0;
		Frame.msg = MySM_PARAM.TP_UD;
		tmCreateMsg( &Frame);
		MySM_PARAM.TP_UDlen = Frame.msglen;					

		//发送消息
		if (Frame.msglen > 0)
		{						
			myprintf0("\n二级锁闭消息");			
//			SendSms(&MySM_PARAM);			
		}
	}			
}
//**************************************************************************
//函数:Simunator
//功能: 模拟主站发送命令
//输入:cmd=主站命令
//返回:无
//**************************************************************************
int centSimunator(char *cmd, unsigned char *msg)
{
	if (strstr(cmd, "ctGetCarState") != 0)
	{
		return ctGetCarState(msg);	
	}	
	if (strstr(cmd, "ctGetWorkPara") != 0)
	{
		
		return ctGetWorkPara(msg);	
	}
	if (strstr(cmd, "ctGetWorkState") != 0)
	{
		
		return ctGetWorkState(msg);	
	}
	if (strstr(cmd, "ctLoginConfirm") != 0)
	{
		
		return ctLoginConfirm(msg);		
	}
	if (strstr(cmd, "ctSetWorkPara") != 0)
	{
		
		return ctSetWorkPara(msg);	
	}
	if (strstr(cmd, "ctSetWorkState") != 0)
	{
		
		return ctSetWorkState(msg);		
	}	
	if (strstr(cmd, "ctNoteTmlogin") != 0)
	{
		
		return ctNoteTmlogin(msg);		
	}

	return 0;
}

/*------------------------------------------------------------------------
函数:BitCheck
功能:判断某一否为0还是为1
输入:uc=代检测数,bit=位数
返回: 0=位数错误,1=查询位为0,>1=查询位为1
---------------------------------------------------------------------------*/
unsigned char BitCheck(unsigned char uc, char bit)
{
	if (bit > 7)return 0;
	
	return (uc&(1<<bit))+1;	
}
/*------------------------------------------------------------------------
函数:SetBit
功能:将某一位置1
输入:uc=源数,bit=位数
输出:uc=目的数
---------------------------------------------------------------------------*/
void SetBit(unsigned char *uc, char bit)
{	
	if (bit > 7)return;
	
	(*uc)|=(1<<bit);	
}
/*------------------------------------------------------------------------
函数:ClearBit
功能:将某一位清0
输入:uc=源数,bit=位数
输出:uc=目的数
---------------------------------------------------------------------------*/
void ClearBit(unsigned char *uc, char bit)
{	
	if (bit > 7)return;
	
	(*uc)&=(~(1<<bit));	
}
/*------------------------------------------------------------------------
函数:GetAnInt
功能:从串中读取一个无符号整数
输入:data=输入串
返回:整数
---------------------------------------------------------------------------*/
unsigned int GetAnUint(unsigned char * data)
{
	
	return (*data)+ *(data+1)*256;	
}
///*------------------------------------------------------------------------
//函数:SwitchDetect
//功能:开关量检测,并判断是否需要报警
//方法:对每一路开关量持续采样多次,取次数最多的电平作为当前值
//---------------------------------------------------------------------------*/
//void SwitchDetect(void)
//{
//	int times = 100;
//	int kk;
//	int Hightimes, Lowtimes;
//	
//	
//	/**************检测外部开关量***********************************/
//	//第1路开关量
//	Hightimes = 0;
//	Lowtimes = 0;
//	for(kk=0; kk< times; kk++)
//	{
//		delay_ms(10);
//		if (SWITCH_1 == 1)
//		{
//			Hightimes++;	
//		}
//		else
//		{
//			Lowtimes++;				
//		}			
//	}
//	if (Hightimes>Lowtimes)	
//	{
//		SetBit(SysState.SwitchState[(SWITCH_1_ROUTE-1) / 8], (SWITCH_1_ROUTE-1)%8);
//	}
//	else
//	{
//		ClearBit(SysState.SwitchState[(SWITCH_1_ROUTE-1) / 8], (SWITCH_1_ROUTE-1)%8);	
//	}	
//
//	//第2路开关量
//	Hightimes = 0;
//	Lowtimes = 0;
//	for(kk=0; kk< times; kk++)
//	{
//		delay_s(1);
//		if (SWITCH_2 == 1)
//		{
//			Hightimes++;	
//		}
//		else
//		{
//			Lowtimes++;				
//		}			
//	}
//	if (Hightimes>Lowtimes)	
//	{
//		SetBit(SysState.SwitchState[(SWITCH_2_ROUTE-1) / 8], (SWITCH_2_ROUTE-1)%8);
//	}
//	else
//	{
//		ClearBit(SysState.SwitchState[(SWITCH_2_ROUTE-1) / 8], (SWITCH_2_ROUTE-1)%8);	
//	}	
//	
//	
//	/**************判断是否需要报警***********************************/
//	for(kk = 0; kk < SWITCH_NUM; kk++)
//	{
//		//任意一路开关量处于不正常状态,
//		//并且报警使能,就向中心报警
//		if ((BitCheck(SysState.SwitchState[kk/8], kk%8)) == ((BitCheck(WorkPara.SwitchNomalState[kk/8], kk%8)))
//		{
//			if ((BitCheck(WorkPara.SwitchWarnEnable[kk/8], kk%8))
//			{
//				//通知终端向中心报警
//				//.......	
//				
//				break;
//			}		
//		}				
//	}
//}

/*------------------------------------------------------------------------
函数:StartADC
功能:启动ADC,从0路开始对每一路进行多次转换
注意:具体的转换过程由ADC中断完成
---------------------------------------------------------------------------*/
void ADC_Process(void)
{
	int timeSlot = 50; //等待ADC完成时间,单位10ms
	int Channel, Times;
	uint16_t sum;
	
	StartADC();
	while(timeSlot)
	{
		timeSlot--;
		delay_ms(10);
		if (ADC_data.finished == 1)
		{
			//计算ADC值
			sum = 0;
			for(Channel=0; Channel< ADCHANNELMAX; Channel++)
			{
				//第一次转换无效
				for(Times=1; Times<ADCONVERTTIMES;Times++ )
				{
					sum += ADC_data.AD_Channles[Channel][Times];		
				}
				SysState.SensorsValue[Channel] = sum /8;
				
				dprintf0("\r\n%d:%x", Channel, SysState.SensorsValue[Channel]);
			}
			
			
			break;		
		}	
	}	
	
	if (timeSlot == 0)
	{
		CloseADC();			
	}	
}

/*------------------------------------------------------------------------
函数:StartADC
功能:启动ADC,从0路开始对每一路进行多次转换
注意:具体的转换过程由ADC中断完成
---------------------------------------------------------------------------*/
void StartADC(void)
{
	//初始化AD数据指针
	ADC_data.CurrChannel = 0;
	ADC_data.CurrTimes = 0;
	ADC_data.finished = 0; //开始进行转换
	
	//Vref=AREF,Right Adjust,channel 0
	ADMUX = 0;
	
	//enable AD,enable Int,division factor=64
	ADCSRA=_BV(ADEN)|_BV(ADSC)|_BV(ADFR)|_BV(ADIE)|_BV(ADPS2)|_BV(ADPS1);
}
/*------------------------------------------------------------------------
函数:CloseADC
功能:关闭ADC
---------------------------------------------------------------------------*/
void CloseADC(void)
{
	ADCSRA = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -