#include "sr_log.h"
#include "sr_shell.h"
#include "sr_gpio.h"
#include "sr_osal.h"
//#include "sr_led.h"
#include "sr_key.h"

#include "lcd/app/app_lcd.h"


#if  0

static int N32LedExmp(int argc, char *argv[])
{
  SR_LedSwitch(LED0, SR_LED_ON);  //LED0亮
  SR_Delay(1000);
  SR_LedSwitch(LED0, SR_LED_OFF); //LED0灭
  SR_Delay(1000);

  SR_LedSwitch(LED1, SR_LED_ON);  //LED1亮
  SR_Delay(1000);
  SR_LedSwitch(LED1, SR_LED_OFF); //LED1灭
  SR_Delay(1000);

  //LED0 闪烁10次，每次亮500ms，灭500ms
  SR_LedBlink(LED0, 10, 500, 500, 0);
  //LED1 闪烁10次，每次亮200ms，灭200ms
  SR_LedBlink(LED1, 10, 300, 300, 0);


  return 0;
}
SR_SHELL_CMD_EXPORT(n32Led, N32LedExmp);
#endif




//自定义按键状态
typedef enum _USER_KEY_EVT
{
  KEY_PRESS_2S = 0 ,
  KEY_PRESS_3S   ,
  KEY_PRESS_6S   ,
  KEY_PRESS_14S  ,
  KEY_RLS_1S     ,
  KEY_RLS_3S     ,
  KEY_RLS_6S     ,

}_USER_KEY_EVT_E;




// 用户事件回调
static void UserKeyEventCb(SR_KEY_ID_E id, SR_KEY_EVT_E evt, uint16_t time, void *args)
{
	switch (id)
	{
	case KEY0:	
		if(evt == KEY_PRESS_2S)
		{
			SR_LOG(INFO, "key0 pressed1, time = %d", time);
		}
		else if(evt == KEY_PRESS_3S)
		{
			SR_LOG(INFO, "key0 pressed2, time = %d", time);
		}
                else if(evt == KEY_PRESS_6S)
		{
			SR_LOG(INFO, "key0 pressed3, time = %d", time);
		}
                else if(evt == KEY_PRESS_14S)
		{
			SR_LOG(INFO, "key0 pressed4, time = %d", time);
		}
		else if(evt == KEY_RLS_1S)
		{
			SR_LOG(INFO, "key0 release1, time = %d", time);
                        Svc_Lcd_Switch_Display();
		}
		else if(evt == KEY_RLS_3S)
		{
			SR_LOG(INFO, "key0 release2, time = %d", time);
		}
                else if(evt == KEY_RLS_6S)
		{
			SR_LOG(INFO, "key0 release3, time = %d", time);
		}

		break;

	default:
		break;
	}
}


static int N32KeyExmp(int argc, char *argv[])
{
	//1、设置按键状态事件通知回调
	SR_KeySetEvtCb(UserKeyEventCb, SR_NULL);


	/* 注册自定义事件事件，可选*/
	//2、注册按下不松的回调事件
	SR_KEY_PRES_T *pressEvt;
	pressEvt = SR_OsMalloc(4 * sizeof(SR_KEY_PRES_T)); // 如果不用malloc, 则需要声明全局变量

	pressEvt[0].evtId = KEY_PRESS_2S;
	pressEvt[0].time = 2000;

	pressEvt[1].evtId = KEY_PRESS_3S;
	pressEvt[1].time = 3000;
        
        pressEvt[2].evtId = KEY_PRESS_6S;
	pressEvt[2].time = 6000;

        pressEvt[3].evtId = KEY_PRESS_14S;
	pressEvt[3].time = 14000;


	// 注意：evtNum需要与上述结构体匹配，否则事件会被跳过
	SR_KeyPressEvtReg(KEY0, pressEvt, 4);

	//3、注册按键释放触发的回调事件
	SR_KEY_RLS_T *rlsEvt;
	rlsEvt = SR_OsMalloc(3 * sizeof(SR_KEY_RLS_T)); // 如果不用malloc, 则需要声明全局变量

	rlsEvt[0].evtId = KEY_RLS_1S;
	rlsEvt[0].startTime = 0;
	rlsEvt[0].endTime = 3000;

	rlsEvt[1].evtId = KEY_RLS_3S;
	rlsEvt[1].startTime = 3000;
	rlsEvt[1].endTime = 6000;
        
        rlsEvt[2].evtId = KEY_RLS_6S;
	rlsEvt[2].startTime = 6000;
	rlsEvt[2].endTime = 14000;

	// 注意：evtNum需要与上述结构体匹配，否则事件会被跳过
	SR_KeyRlsEvtReg(KEY0, rlsEvt, 3);

	return 0;
}
SR_SHELL_CMD_EXPORT(n32Key, N32KeyExmp);
