dc11ee3fc4
2、修复sensorhub低功耗越界问题; 3、修复rcsp传输相关问题; 4、更新flash_params_v3.bin; 5、修复摄像头、科大讯飞相关问题;
258 lines
7.3 KiB
C
258 lines
7.3 KiB
C
#include "app_config.h"
|
|
#include "system/includes.h"
|
|
#include "app_msg.h"
|
|
#include "app_mode.h"
|
|
#include "app_main.h"
|
|
#include "key_driver.h"
|
|
#include "ui_key_remap.h"
|
|
#include "ui_api.h"
|
|
#include "jlui_app/ui_style.h"
|
|
|
|
#define LOG_TAG_CONST UI
|
|
#define LOG_TAG "[UI_KEY]"
|
|
#define LOG_ERROR_ENABLE
|
|
#define LOG_DEBUG_ENABLE
|
|
#define LOG_INFO_ENABLE
|
|
#define LOG_CLI_ENABLE
|
|
#include "debug.h"
|
|
|
|
/***********************************************************************************
|
|
JL框架
|
|
***********************************************************************************/
|
|
#if (defined(CONFIG_UI_STYLE_JL_PUBLIC_MODLS_ENABLE)) ||(defined(CONFIG_UI_STYLE_JL_CSC_PUBLIC_MODLS_ENABLE))
|
|
struct ui_key_remap_handler {
|
|
void (*send_event_cb)(int key_event);
|
|
};
|
|
struct ui_jlui_key_remap_table {
|
|
u8 key_value;
|
|
const int *remap_table;
|
|
};
|
|
static struct ui_key_remap_handler hdl;
|
|
#define __this (&hdl)
|
|
|
|
|
|
/*lvgl只需要down up事件*/
|
|
#ifdef CONFIG_UI_STYLE_JL_CSC_PUBLIC_MODLS_ENABLE
|
|
#define JLUI_KEY_EVENT_MAX 4
|
|
#else
|
|
#define JLUI_KEY_EVENT_MAX 3
|
|
#endif
|
|
#define JLUI_KEY_EVENT_TABLE_MAX 6
|
|
|
|
static const int key_io_num0_event_table[JLUI_KEY_EVENT_MAX] = {
|
|
KEY_UI_HOME, KEY_UI_POWEROFF, KEY_UI_MENU_LIST,
|
|
};
|
|
|
|
static const int key_ad_num0_event_table[JLUI_KEY_EVENT_MAX] = {
|
|
#ifdef CONFIG_UI_STYLE_JL_CSC_PUBLIC_MODLS_ENABLE
|
|
KEY_UI_HOME, KEY_UI_POWEROFF, KEY_UI_MENU_LIST, KEY_UI_TRIPLE_CLICK,
|
|
#else
|
|
KEY_UI_HOME, KEY_UI_POWEROFF, KEY_UI_MENU_LIST,
|
|
#endif
|
|
};
|
|
|
|
static const int key_ad_num1_event_table[JLUI_KEY_EVENT_MAX] = {
|
|
KEY_UI_SHORTCUT,
|
|
};
|
|
|
|
const struct ui_jlui_key_remap_table jlui_key_watch_event_table[JLUI_KEY_EVENT_TABLE_MAX ] = {
|
|
{ .key_value = KEY_IO_NUM0, .remap_table = key_io_num0_event_table },
|
|
{ .key_value = KEY_AD_NUM0, .remap_table = key_ad_num0_event_table },
|
|
{ .key_value = KEY_AD_NUM1, .remap_table = key_ad_num1_event_table },
|
|
{ .key_value = 0xff }
|
|
};
|
|
|
|
|
|
/*将key_event进行映射成具体的按键事件*/
|
|
u16 jlui_key_event_remap(struct key_event *key, const struct ui_jlui_key_remap_table *table)
|
|
{
|
|
u16 key_event = -1;
|
|
int key_value;
|
|
|
|
if (key->event == KEY_ACTION_RDEC_ROTATE) { // 旋转编码器
|
|
key_value = key->value;
|
|
if (key_value > 0) {
|
|
key_event = KEY_UI_PLUS; // 正转
|
|
} else if (key_value < 0) {
|
|
key_event = KEY_UI_MINUS; // 反转
|
|
}
|
|
return key_event;
|
|
}
|
|
|
|
for (int i = 0; table[i].key_value != 0xff; i++) {
|
|
if (jlui_key_watch_event_table[i].key_value == key->value) {
|
|
if (table[i].remap_table) {
|
|
if (key->event == KEY_ACTION_CLICK) {
|
|
key_event = table[i].remap_table[0];
|
|
} else if (key->event == KEY_ACTION_HOLD) {
|
|
key_event = table[i].remap_table[1];
|
|
} else if (key->event == KEY_ACTION_DOUBLE_CLICK) {
|
|
key_event = table[i].remap_table[2];
|
|
} else if (key->event == KEY_ACTION_TRIPLE_CLICK) {
|
|
key_event = table[i].remap_table[3];
|
|
} else {
|
|
key_event = KEY_WATCH_NO_KEY;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return key_event;
|
|
}
|
|
|
|
void ui_key_set_send_event_cb(void (*cb)(int key_event))
|
|
{
|
|
if (cb) {
|
|
__this->send_event_cb = cb;
|
|
}
|
|
}
|
|
|
|
static int ui_key_event_prob_handle(void *arg)
|
|
{
|
|
struct key_event *key = (struct key_event *)arg;
|
|
u16 key_event;
|
|
log_debug("[%s] key->event:%d, key->value:%d", __func__, key->event, key->value);
|
|
if (app_get_current_mode_name() == APP_MODE_UPDATE ||
|
|
app_get_current_mode_name() == APP_MODE_RCSP) {
|
|
log_info("%s return", __func__);
|
|
return 0; // 传输的时候不处理
|
|
}
|
|
key_event = jlui_key_event_remap(key, jlui_key_watch_event_table);
|
|
|
|
if (__this->send_event_cb) {
|
|
__this->send_event_cb(key_event);
|
|
return 1; /*接管事件*/
|
|
}
|
|
|
|
return 0; /*不接管事件*/
|
|
}
|
|
/*拦截key_driver产生的key_event*/
|
|
REGISTER_KEY_DET_CALLBACK(jlui_key) = {
|
|
.name = NULL,
|
|
.arg = NULL,
|
|
.cb_deal = ui_key_event_prob_handle,
|
|
};
|
|
|
|
|
|
#endif
|
|
/***********************************************************************************
|
|
lvgl
|
|
***********************************************************************************/
|
|
|
|
//LVGL框架
|
|
struct lvgl_key_remap_handler {
|
|
int (*send_event_cb)(struct key_event *event);
|
|
};
|
|
|
|
static struct lvgl_key_remap_handler lv_hdl;
|
|
#define __lv_this (&lv_hdl)
|
|
|
|
void lvgl_ui_key_set_send_event_cb(int (*cb)(struct key_event *key))
|
|
{
|
|
if (cb) {
|
|
__lv_this->send_event_cb = cb;
|
|
}
|
|
}
|
|
|
|
#if ((defined CONFIG_LVGL_UI_ENABLE) && (CONFIG_LVGL_UI_ENABLE))
|
|
|
|
enum {
|
|
KEY_IO_NUM0_DOWN,
|
|
KEY_IO_NUM0_UP,
|
|
KEY_AD_NUM0_DOWN,
|
|
KEY_AD_NUM0_UP,
|
|
KEY_AD_NUM1_DOWN,
|
|
KEY_AD_NUM1_UP,
|
|
};
|
|
enum {
|
|
LV_KEY_UI_MINUS,
|
|
LV_KEY_UI_PLUS,
|
|
};
|
|
|
|
|
|
/*lvgl只需要down up事件*/
|
|
#define LVGL_KEY_EVENT_MAX 2
|
|
#define LVGL_KEY_EVENT_TABLE_MAX 6
|
|
|
|
static const int key_io_num0_event_table[LVGL_KEY_EVENT_MAX] = {
|
|
KEY_IO_NUM0_DOWN, KEY_IO_NUM0_UP,
|
|
};
|
|
|
|
static const int key_ad_num0_event_table[LVGL_KEY_EVENT_MAX] = {
|
|
KEY_AD_NUM0_DOWN, KEY_IO_NUM0_UP,
|
|
};
|
|
|
|
static const int key_ad_num1_event_table[LVGL_KEY_EVENT_MAX] = {
|
|
KEY_AD_NUM1_DOWN, KEY_AD_NUM1_UP,
|
|
};
|
|
|
|
const struct ui_lvgl_key_remap_table lvgl_key_watch_event_table[LVGL_KEY_EVENT_TABLE_MAX] = {
|
|
{ .key_value = KEY_IO_NUM0, .remap_table = key_io_num0_event_table },
|
|
{ .key_value = KEY_AD_NUM0, .remap_table = key_ad_num0_event_table },
|
|
{ .key_value = KEY_AD_NUM1, .remap_table = key_ad_num1_event_table },
|
|
{ .key_value = 0xff }
|
|
};
|
|
|
|
|
|
/*将key_event进行映射成具体的按键事件*/
|
|
u16 ui_lvgl_key_event_remap(struct key_event *key, const struct ui_lvgl_key_remap_table *table)
|
|
{
|
|
u16 key_event = -1;
|
|
int key_value;
|
|
|
|
if (key->event == KEY_ACTION_RDEC_ROTATE) {// 旋转编码器
|
|
key_value = key->value;
|
|
if (key_value > 0) {
|
|
key_event = LV_KEY_UI_PLUS; // 正转
|
|
} else if (key_value < 0) {
|
|
key_event = LV_KEY_UI_MINUS; // 反转
|
|
}
|
|
return key_event;
|
|
}
|
|
|
|
for (int i = 0; table[i].key_value != 0xff; i++) {
|
|
if (lvgl_key_watch_event_table[i].key_value == key->value) {
|
|
if (table[i].remap_table) {
|
|
if (key->event == KEY_ACTION_LVGL_DOWN) {
|
|
key_event = table[i].remap_table[0];
|
|
} else if (key->event == KEY_ACTION_UP) {
|
|
key_event = table[i].remap_table[1];
|
|
} else {
|
|
key_event = KEY_WATCH_NO_KEY;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return key_event;
|
|
}
|
|
|
|
u16 lvgl_key_event_remap_default(struct key_event *key)
|
|
{
|
|
|
|
return ui_lvgl_key_event_remap(key, lvgl_key_watch_event_table);
|
|
}
|
|
|
|
|
|
static int ui_key_event_prob_handle(void *arg)
|
|
{
|
|
struct key_event *key = (struct key_event *)arg;
|
|
log_debug("[%s] key->event:%d, key->value:%d", __func__, key->event, key->value);
|
|
|
|
if (__lv_this->send_event_cb) {
|
|
return (__lv_this->send_event_cb(key));
|
|
//return 1; /*接管事件*/
|
|
}
|
|
return 0; /*不接管事件*/
|
|
}
|
|
/*拦截key_driver产生的key_event*/
|
|
REGISTER_KEY_DET_CALLBACK(lvgl_key) = {
|
|
.name = NULL,
|
|
.arg = NULL,
|
|
.cb_deal = ui_key_event_prob_handle,
|
|
};
|
|
|
|
#endif
|
|
|
|
|