按键
一、简介
系统内置了两个按键位:LVSF_KEY_TYPE_HOME 和 LVSF_KEY_TYPE_ESC。需要用户自行去对接硬件相关引脚。
系统支持按下、抬起、短按、连按、10秒以内长按的事件响应。页面创建的时候注册对应的按键事件,销毁页面的时候注销按键事件。当按键触发时,框架会优先运行高优先级的注册函数,如果函数中不返回未处理的结果,那么低优先级的注册函数也会收到该事件。\
二、按键事件注册
#define LV_KEY_REGESTER(key, prio, handle) (lv_key_manager_regester(key, prio,handle, strrchr(FILE, ‘\’) ? strrchr(FILE, ‘\’) + 1 : FILE))\
key: 按键键值
prio: 按键处理的优先级,值越大,优先级越高
handle: 按键处理回调函数\
通过此宏定义进行按键事件注册的时候,会将调用接口的文件名同时保存,以避免相同文件进行重复注册。一个页面只能给每个按键注册一个处理函数。\
int32_t key_goback_cb(lv_key_manager_type_t key, keypad_key_state_t event)
{
/*如果按键为HOME,并且事件为短按,处理该事件*/
if (LVSF_KEY_TYPE_HOME == key && KEYPAD_KEY_STATE_SHORT_CLICK == event)
{
/*返回上一页*/
gui_app_goback();
/*返回TREAT, 后续低优先级的处理函数不会再接收到此短按事件*/
return LV_KEY_EVENT_TREAT;
}
/*返回UNTREAT, 后续低优先级的处理函数会再接收到此短按事件,再去执行相应处理*/
return LV_KEY_EVENT_UNTREAT;
}
int32_t key_poweroff_cb(lv_key_manager_type_t key, keypad_key_state_t event)
{
/*如果按键为ESC,并且事件为长按,处理该事件长按8.5秒*/
if (LVSF_KEY_TYPE_HOME == key && KEYPAD_KEY_STATE_LONG_PRESS_8S | KEYPAD_KEY_STATE_LONG_PRESS_05S == event)
{
/*关机*/
app_power_off_action(POWER_OFF);
/*返回TREAT, 后续低优先级的处理函数不会再接收到此长按事件*/
return LV_KEY_EVENT_TREAT;
}
/*返回UNTREAT, 后续低优先级的处理函数会再接收到此长按事件,再去执行相应处理*/
return LV_KEY_EVENT_UNTREAT;
}
static void on_start(void)
{
/*给当前页面的HOME键注册一个优先级为15的按键事件,用于按键放回上一页*/
LV_KEY_REGESTER(LVSF_KEY_TYPE_HOME, 15, key_goback_cb);
/*给当前页面的ESC键注册一个优先级为20的按键事件, 用于长按关机*/
LV_KEY_REGESTER(LVSF_KEY_TYPE_ESC, 15, key_poweroff_cb);
}
三、按键事件注销
#define LV_KEY_UNREGESTER(key) (lv_key_manager_unregester(key, strrchr(FILE, ‘\’) ? strrchr(FILE, ‘\’) + 1 : FILE))\
key: 按键键值\
static void on_stop(void)
{
/*将当前页面的HOME键的事件注销*/
LV_KEY_UNREGESTER(LVSF_KEY_TYPE_HOME);
/*将当前页面的ESC键的事件注销*/
LV_KEY_UNREGESTER(LVSF_KEY_TYPE_ESC);
}