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




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);



//自定义按键事件
#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 == KEY_PRESS_2S)
		{
			SR_LOG(INFO, "key0 pressed, time = %d", time);
		}
		else if(evt == KEY_PRESS_5S)
		{
			SR_LOG(INFO, "key0 pressed, time = %d", time);
		}
		else if(evt == KEY_RLS_1)
		{
			SR_LOG(INFO, "key0 release, time = %d", time);
		}
		else if(evt == KEY_RLS_2)
		{
			SR_LOG(INFO, "key0 release, 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(2 * sizeof(SR_KEY_PRES_T)); // 如果不用malloc, 则需要声明全局变量

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

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


	// 注意：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 = 2;
	rlsEvt[0].endTime = 5;

	rlsEvt[1].evtId = KEY_RLS_2;
	rlsEvt[1].startTime = 5;
	rlsEvt[1].endTime = 10;

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

	return 0;
}
SR_SHELL_CMD_EXPORT(n32Key, N32KeyExmp);
