#include "sr_sunrise.h"

osTimerId_t  timer1Id = SR_NULL;
osTimerId_t  timer2Id = SR_NULL;

//周期定时器1回调函数
static void Timer1Cb(void *argv)
{
	SR_LOG(INFO,"timer1 entry\r\n");
}

//单次定时器2回调函数
static void Timer2Cb(void *argv)
{  
	SR_LOG(INFO,"timer2 entry\r\n");
}


static void TimerThread(void *argv)
{
   int result=0;

   //创建周期定时器1
   timer1Id = osTimerNew(Timer1Cb, osTimerPeriodic , SR_NULL, SR_NULL);
   if(SR_NULL == timer1Id) goto _EXIT;

   //创建单次定时器2
   timer2Id = osTimerNew(Timer2Cb, osTimerOnce, SR_NULL, SR_NULL);
   if(SR_NULL == timer2Id) goto _EXIT;  
   SR_LOG(INFO,"thread:timer creat ok\r\n");

   //启动周期定时器1,周期定时2000 tick
   result =  osTimerStart(timer1Id, 2000);
   if(osOK != result) goto _TIMER1_START_FAIL;

   //启动单次定时器2,定时4000 tick
   result =  osTimerStart (timer2Id, 4000);	
   if(osOK != result) goto _TIMER2_START_FAIL;

   while(gShellThreadRun)
	{
	   osDelay(1000);	
	}
	
	osTimerStop (timer2Id);   //定时器停止
_TIMER2_START_FAIL:
	osTimerStop (timer1Id);	  //定时器停止
_TIMER1_START_FAIL:
_EXIT:
	SR_LOG(INFO,"timer thread exit\r\n");
	if(SR_NULL != timer1Id) osTimerDelete (timer1Id);  //定时器删除
	if(SR_NULL != timer2Id) osTimerDelete (timer2Id); 
	osThreadExit(); //退出线程
}



static int TimerExample(int argc, char *argv[])
{
	gShellThreadRun =1;

	//创建线程
	osThreadNew(TimerThread, SR_NULL,SR_NULL);  

	return 0;
}
SR_SHELL_CMD_EXPORT(timer_exmp, TimerExample);


