#include "sr_sunrise.h"

//自定义按键事件
#define  KEY_PRESS_2S   3
#define  KEY_PRESS_5S   4
#define  KEY_RLS_1      5
#define  KEY_RLS_2      6


// 用户事件回调
static void UserKeyEventCb(SR_KEY_ID_E id, SR_KEY_EVT_E evt, uint16_t time, void *args)
{
	switch (id)
	{
	case KEY0:
		if (evt == SR_KEY_SHORT_PRESS) // 短按
		{
			SR_LOG(INFO, "key0 short pressed.");
		}
		else if (evt == SR_KEY_DOUBLE_PRESS) // 双击
		{
			SR_LOG(INFO, "key0 double pressed.");
		}
		else if (evt == SR_KEY_LONG_PRESS) // 长按
		{
			SR_LOG(INFO, "key0 long pressed,time=%d", time);
		}
		else if(evt == KEY_PRESS_2S)
		{
			SR_LOG(INFO, "key0 pressed1, time = %d", time);
		}
		else if(evt == KEY_PRESS_5S)
		{
			SR_LOG(INFO, "key0 pressed2, time = %d", time);
		}
		else if(evt == KEY_RLS_1)
		{
			SR_LOG(INFO, "key0 release1, time = %d", time);
		}
		else if(evt == KEY_RLS_2)
		{
			SR_LOG(INFO, "key0 release2, time = %d", time);
		}

		break;

	default:
		break;
	}
}


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


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

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

	pressEvt[1].evtId = KEY_PRESS_5S;
	pressEvt[1].time = 5000;


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

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

	rlsEvt[0].evtId = KEY_RLS_1;
	rlsEvt[0].startTime = 2000;
	rlsEvt[0].endTime = 5000;

	rlsEvt[1].evtId = KEY_RLS_2;
	rlsEvt[1].startTime = 5000;
	rlsEvt[1].endTime = 30000;

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

	return 0;
}
SR_SHELL_CMD_EXPORT(key_exmp, KeyExample);

