/*************************** (C) COPYRIGHT 2017 YNHB ****************************
 * 文件名  ：disinfection.c
 * 描  述  ：消毒控制程序
 * 版  本  ：V1.0
 * 作  者  ：XuZhongPing
 * 日  期  ：2020/04/17
*********************************************************************************/
#include "disinfection.h"
#include "timer.h"
#include "ElectronicLock.h"
#include "motor.h"

uint8_t disinfectionStatus = 0;
uint8_t disinfectingMark = 0;							//消毒状态
uint8_t sprayDisinfectionStatus = 0;
uint8_t sprayDisinfectingMark = 0;				//喷淋消毒状态标志

/*
***********************************************************************
*	函 数 名: StartUpDisinfection
*	功能说明: 启动消毒
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void StartUpDisinfection(void)
{
	Unlock(5);
	
	printf("\r\n启动消毒除臭！\r\n");
	disinfectionStatus = 1;											//标志当前正在消毒状态
}

/*
***********************************************************************
*	函 数 名: StopDisinfection
*	功能说明: 停止消毒
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void StopDisinfection(void)
{
	Locked(5);
	
	printf("\r\n停止消毒除臭！\r\n");
	disinfectionStatus = 0;											//标志当前消毒处于停止状态
}

/*
***********************************************************************
*	函 数 名: DisinfectingTask
*	功能说明: 消毒处理任务
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void DisinfectingTask(void)
{
	static uint8_t executeSteps = 0;

	static timer disinfectingTimer;							//消毒开启时间
	static timer sleepTimer;										//消毒装置休眠时间
	static timer waitingTimer;
	
	static uint8_t timer_ok = 0;
	
	if(timer_ok == 0)
	{
		timer_ok = 1;
		timer_set(&disinfectingTimer, CLOCK_SECOND*60*30);		//消毒工作时间定时器
		timer_set(&sleepTimer, CLOCK_SECOND*60*30);						//消毒装置休眠时间
		timer_set(&waitingTimer, CLOCK_SECOND*2);							//创建1个定时器
	}
	
	
	switch(executeSteps)
	{
		case 0x00:
			if(disinfectingMark == 1)
			{
				StartUpDisinfection();
				printf("\r\n启动消毒！\r\n");
				timer_restart(&disinfectingTimer);
				executeSteps = 0x01;
				break;
			}
			break;
		
		case 0x01:		//消毒进行中
			if(timer_expired(&disinfectingTimer))
			{
				StopDisinfection();													//消毒时间到停止消毒
				
				printf("\r\n消毒完成！\r\n");
				disinfectingMark = 0;
				executeSteps = 0x03;
				break;
			}
			
			//消毒过程中如果有投放，则暂停消毒
			if(disinfectingMark == 2)
			{
				StopDisinfection();
				printf("\r\n暂停消毒！\r\n");
				executeSteps = 0x02;
				break;
			}
			
// 			//消毒过程中如果有投放或者打开收运门，则中断消毒
// 			if(disinfectingMark == 0)
// 			{
// 				StopDisinfection();
// 				printf("\r\n中断消毒！\r\n");
// 				executeSteps = 0x03;
// 				break;
// 			}
			break;
			
		case 0x02:		//暂停消毒
			if(timer_expired(&disinfectingTimer))
			{
				StopDisinfection();													//消毒时间到停止消毒
				
				printf("\r\n消毒时间到！\r\n");
				disinfectingMark = 0;
				executeSteps = 0x03;
				break;
			}
			
			if(disinfectingMark == 1)
			{
				StartUpDisinfection();
				printf("\r\n重新启动消毒！\r\n");
				executeSteps = 0x01;
				break;
			}
			break;
			
		case 0x03:		//消毒装置启动休眠定时
			printf("\r\n消毒装置进入休眠！\r\n");
			timer_restart(&sleepTimer);
			executeSteps = 0x04;
			break;
			
		case 0x04:		//消毒装置进入休眠
			if(timer_expired(&sleepTimer))
			{
				printf("\r\n消毒装置休眠时间到！\r\n");
				executeSteps = 0x00;
			}
			break;
			
		default:
			StopDisinfection();
			disinfectingMark = 0;
			executeSteps = 0x00;
			break;
	}
}


/*
***********************************************************************
*	函 数 名: StartUpDisinfection
*	功能说明: 启动消毒
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void StartUpSprayDisinfection(void)
{
	DoorClose(3);
	
	printf("\r\n启动喷淋消毒除臭！\r\n");
	sprayDisinfectionStatus = 1;											//标志当前正在消毒状态
}

/*
***********************************************************************
*	函 数 名: StopDisinfection
*	功能说明: 停止消毒
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void StopSprayDisinfection(void)
{
	DoorStop(3);
	
	printf("\r\n停止喷淋消毒除臭！\r\n");
	sprayDisinfectionStatus = 0;											//标志当前消毒处于停止状态
}

/*
***********************************************************************
*	函 数 名: SprayDisinfectingTask
*	功能说明: 喷淋消毒处理任务
*	形    参：无
*	返 回 值: 无
***********************************************************************
*/
void SprayDisinfectingTask(void)
{
	static uint8_t executeSteps = 0;

	static timer disinfectingTimer;							//消毒开启时间
	static timer sleepTimer;										//消毒装置休眠时间
	static timer waitingTimer;
	
	static uint8_t timer_ok = 0;
	
	if(timer_ok == 0)
	{
		timer_ok = 1;
		timer_set(&disinfectingTimer, CLOCK_SECOND*3);		//消毒工作时间定时器
// 		timer_set(&sleepTimer, CLOCK_SECOND*60*30);						//消毒装置休眠时间
		timer_set(&sleepTimer, CLOCK_SECOND*1);								//消毒装置休眠时间
		timer_set(&waitingTimer, CLOCK_SECOND*2);							//创建1个定时器
	}
	
	
	switch(executeSteps)
	{
		case 0x00:
			if(sprayDisinfectingMark == 1)
			{
				StartUpSprayDisinfection();
				printf("\r\n启动消毒！\r\n");
				timer_restart(&disinfectingTimer);
				executeSteps = 0x01;
				break;
			}
			break;
		
		case 0x01:		//消毒进行中
			if(timer_expired(&disinfectingTimer))
			{
				StopSprayDisinfection();													//消毒时间到停止消毒
				
				printf("\r\n消毒完成！\r\n");
				sprayDisinfectingMark = 0;
				executeSteps = 0x03;
				break;
			}
			
			//消毒过程中如果有投放，则暂停消毒
			if(sprayDisinfectingMark == 2)
			{
				StopSprayDisinfection();
				printf("\r\n暂停消毒！\r\n");
				executeSteps = 0x02;
				break;
			}
			
// 			//消毒过程中如果有投放或者打开收运门，则中断消毒
// 			if(disinfectingMark == 0)
// 			{
// 				StopDisinfection();
// 				printf("\r\n中断消毒！\r\n");
// 				executeSteps = 0x03;
// 				break;
// 			}
			break;
			
		case 0x02:		//暂停消毒
			if(timer_expired(&disinfectingTimer))
			{
				StopSprayDisinfection();													//消毒时间到停止消毒
				
				printf("\r\n消毒时间到！\r\n");
				sprayDisinfectingMark = 0;
				executeSteps = 0x03;
				break;
			}
			
			if(sprayDisinfectingMark == 1)
			{
				StartUpSprayDisinfection();
				printf("\r\n重新启动消毒！\r\n");
				executeSteps = 0x01;
				break;
			}
			break;
			
		case 0x03:		//消毒装置启动休眠定时
			printf("\r\n消毒装置进入休眠！\r\n");
			timer_restart(&sleepTimer);
			executeSteps = 0x04;
			break;
			
		case 0x04:		//消毒装置进入休眠
			if(timer_expired(&sleepTimer))
			{
				printf("\r\n消毒装置休眠时间到！\r\n");
				executeSteps = 0x00;
			}
			break;
			
		default:
			StopSprayDisinfection();
			sprayDisinfectingMark = 0;
			executeSteps = 0x00;
			break;
	}
}

/******************** (C) COPYRIGHT 2017 YNHB *****END OF FILE*******************/
