264 lines
6.4 KiB
C
264 lines
6.4 KiB
C
#include "app_config.h"
|
|
#include "syscfg_id.h"
|
|
#include "key_event_deal.h"
|
|
#include "le_smartbox_module.h"
|
|
|
|
#include "smartbox_setting_sync.h"
|
|
#include "smartbox_setting_opt.h"
|
|
|
|
//#if (SMART_BOX_EN && RCSP_SMARTBOX_ADV_EN)
|
|
#if (SMART_BOX_EN)
|
|
#if RCSP_ADV_KEY_SET_ENABLE
|
|
|
|
extern int get_bt_tws_connect_status();
|
|
static u8 rcsp_adv_key_event_flag = 0x0;
|
|
|
|
|
|
static u8 g_key_setting[12] = {
|
|
0x01, 0x01, 0x05, \
|
|
0x02, 0x01, 0x05, \
|
|
0x01, 0x02, 0x08, \
|
|
0x02, 0x02, 0x08
|
|
};
|
|
|
|
static void enable_adv_key_event(void)
|
|
{
|
|
rcsp_adv_key_event_flag = 1;
|
|
}
|
|
|
|
static u8 get_adv_key_event_status(void)
|
|
{
|
|
return rcsp_adv_key_event_flag;
|
|
}
|
|
|
|
static void disable_adv_key_event(void)
|
|
{
|
|
rcsp_adv_key_event_flag = 0;
|
|
}
|
|
|
|
static void set_key_setting(u8 *key_setting_info)
|
|
{
|
|
g_key_setting[3 * 0 + 2] = key_setting_info[0];
|
|
g_key_setting[3 * 2 + 2] = key_setting_info[1];
|
|
g_key_setting[3 * 1 + 2] = key_setting_info[2];
|
|
g_key_setting[3 * 3 + 2] = key_setting_info[3];
|
|
}
|
|
|
|
static int get_key_setting(u8 *key_setting_info)
|
|
{
|
|
key_setting_info[0] = g_key_setting[3 * 0 + 2];
|
|
key_setting_info[1] = g_key_setting[3 * 2 + 2];
|
|
key_setting_info[2] = g_key_setting[3 * 1 + 2];
|
|
key_setting_info[3] = g_key_setting[3 * 3 + 2];
|
|
return 0;
|
|
}
|
|
|
|
static void update_key_setting_vm_value(u8 *key_setting_info)
|
|
{
|
|
syscfg_write(CFG_RCSP_ADV_KEY_SETTING, key_setting_info, 4);
|
|
}
|
|
|
|
static void key_setting_sync(u8 *key_setting_info)
|
|
{
|
|
#if TCFG_USER_TWS_ENABLE
|
|
if (get_bt_tws_connect_status()) {
|
|
update_smartbox_setting(ATTR_TYPE_KEY_SETTING);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
static void deal_key_setting(u8 *key_setting_info, u8 write_vm, u8 tws_sync)
|
|
{
|
|
u8 key_setting[4];
|
|
if (!key_setting_info) {
|
|
get_key_setting(key_setting);
|
|
} else {
|
|
memcpy(key_setting, key_setting_info, 4);
|
|
}
|
|
// 1、写入VM
|
|
if (write_vm) {
|
|
update_key_setting_vm_value(key_setting);
|
|
}
|
|
// 2、同步对端
|
|
if (tws_sync) {
|
|
key_setting_sync(key_setting);
|
|
}
|
|
// 3、更新状态
|
|
enable_adv_key_event();
|
|
}
|
|
|
|
#define ADV_POWER_ON_OFF 0
|
|
enum ADV_KEY_TYPE {
|
|
ADV_KEY_TYPE_NULL = 0x0,
|
|
#if ADV_POWER_ON_OFF
|
|
ADV_KEY_TYPE_POWER_ON,
|
|
ADV_KEY_TYPE_POWER_OFF,
|
|
#endif
|
|
ADV_KEY_TYPE_PREV = 0x3,
|
|
ADV_KEY_TYPE_NEXT,
|
|
ADV_KEY_TYPE_PP,
|
|
ADV_KEY_TYPE_ANSWER_CALL,
|
|
ADV_KEY_TYPE_HANG_UP,
|
|
ADV_KEY_TYPE_CALL_BACK,
|
|
ADV_KEY_TYPE_INC_VOICE,
|
|
ADV_KEY_TYPE_DESC_VOICE,
|
|
ADV_KEY_TYPE_TAKE_PHOTO,
|
|
};
|
|
|
|
static u8 get_adv_key_opt(u8 key_action, u8 channel)
|
|
{
|
|
u8 opt;
|
|
for (opt = 0; opt < sizeof(g_key_setting); opt += 3) {
|
|
if (g_key_setting[opt] == channel &&
|
|
g_key_setting[opt + 1] == key_action) {
|
|
break;
|
|
}
|
|
}
|
|
if (sizeof(g_key_setting) == opt) {
|
|
return -1;
|
|
}
|
|
|
|
switch (g_key_setting[opt + 2]) {
|
|
case ADV_KEY_TYPE_NULL:
|
|
//opt = KEY_NULL;
|
|
opt = ADV_KEY_TYPE_NULL;
|
|
break;
|
|
#if ADV_POWER_ON_OFF
|
|
case ADV_KEY_TYPE_POWER_ON:
|
|
opt = KEY_POWER_ON;
|
|
break;
|
|
case ADV_KEY_TYPE_POWER_OFF:
|
|
opt = KEY_RCSP_POWEROFF;
|
|
break;
|
|
#endif
|
|
case ADV_KEY_TYPE_PREV:
|
|
opt = KEY_MUSIC_PREV;
|
|
break;
|
|
case ADV_KEY_TYPE_NEXT:
|
|
opt = KEY_MUSIC_NEXT;
|
|
break;
|
|
case ADV_KEY_TYPE_PP:
|
|
opt = KEY_MUSIC_PP;
|
|
break;
|
|
case ADV_KEY_TYPE_ANSWER_CALL:
|
|
opt = KEY_CALL_ANSWER;
|
|
break;
|
|
case ADV_KEY_TYPE_HANG_UP:
|
|
opt = KEY_CALL_HANG_UP;
|
|
break;
|
|
case ADV_KEY_TYPE_CALL_BACK:
|
|
opt = KEY_CALL_LAST_NO;
|
|
break;
|
|
case ADV_KEY_TYPE_INC_VOICE:
|
|
opt = KEY_VOL_UP;
|
|
break;
|
|
case ADV_KEY_TYPE_DESC_VOICE:
|
|
opt = KEY_VOL_DOWN;
|
|
break;
|
|
case ADV_KEY_TYPE_TAKE_PHOTO:
|
|
opt = KEY_HID_CONTROL;
|
|
break;
|
|
}
|
|
return opt;
|
|
}
|
|
|
|
void set_key_event_by_rcsp_info(struct sys_event *event, u8 *key_event)
|
|
{
|
|
if (0 == get_adv_key_event_status()) {
|
|
return;
|
|
}
|
|
|
|
u8 key_action = 0;
|
|
struct key_event *key = &event->u.key;
|
|
switch (key->event) {
|
|
case 0:
|
|
// 单击
|
|
key_action = 0x1;
|
|
break;
|
|
case 4:
|
|
// 双击
|
|
key_action = 0x2;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
#if (TCFG_CHARGESTORE_ENABLE && TCFG_USER_TWS_ENABLE)
|
|
u8 channel = tws_api_get_local_channel();
|
|
|
|
if (get_bt_tws_connect_status()) {
|
|
channel = tws_api_get_local_channel();
|
|
}
|
|
#else
|
|
u8 channel = 'U';
|
|
#endif
|
|
|
|
switch (channel) {
|
|
case 'U':
|
|
case 'L':
|
|
channel = (u32) event->arg == KEY_EVENT_FROM_TWS ? 2 : 1;
|
|
break;
|
|
case 'R':
|
|
channel = (u32) event->arg == KEY_EVENT_FROM_TWS ? 1 : 2;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
key_action = get_adv_key_opt(key_action, channel);
|
|
if ((u8) - 1 != key_action) {
|
|
*key_event = key_action ? key_action : KEY_NULL;
|
|
}
|
|
}
|
|
|
|
static int key_set_setting_extra_handle(void *setting_data, void *param)
|
|
{
|
|
u8 dlen = *((u8 *)param);
|
|
u8 *key_setting_data = (u8 *) setting_data;
|
|
while (dlen >= 3) {
|
|
if (key_setting_data[0] == 0x01) {
|
|
if (key_setting_data[1] == 0x01) {
|
|
g_key_setting[2] = key_setting_data[2];
|
|
} else if (key_setting_data[1] == 0x02) {
|
|
g_key_setting[8] = key_setting_data[2];
|
|
}
|
|
} else if (key_setting_data[0] == 0x02) {
|
|
if (key_setting_data[1] == 0x01) {
|
|
g_key_setting[5] = key_setting_data[2];
|
|
} else if (key_setting_data[1] == 0x02) {
|
|
g_key_setting[11] = key_setting_data[2];
|
|
}
|
|
}
|
|
dlen -= 3;
|
|
key_setting_data += 3;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int key_get_setting_extra_handle(void *setting_data, void *param)
|
|
{
|
|
int **setting_data_ptr = (int **)setting_data;
|
|
*setting_data_ptr = g_key_setting;
|
|
return sizeof(g_key_setting);
|
|
}
|
|
|
|
static SMARTBOX_SETTING_OPT adv_key_opt = {
|
|
.data_len = 4,
|
|
.setting_type = ATTR_TYPE_KEY_SETTING,
|
|
.syscfg_id = CFG_RCSP_ADV_KEY_SETTING,
|
|
.deal_opt_setting = deal_key_setting,
|
|
.set_setting = set_key_setting,
|
|
.get_setting = get_key_setting,
|
|
.custom_setting_init = NULL,
|
|
.custom_vm_info_update = NULL,
|
|
.custom_setting_update = NULL,
|
|
.custom_sibling_setting_deal = NULL,
|
|
.custom_setting_release = NULL,
|
|
.set_setting_extra_handle = key_set_setting_extra_handle,
|
|
.get_setting_extra_handle = key_get_setting_extra_handle,
|
|
};
|
|
REGISTER_APP_SETTING_OPT(adv_key_opt);
|
|
|
|
#endif
|
|
#endif
|