diff options
Diffstat (limited to 'src/app/google_rcu/frm_vpk/src/app_custom.c')
-rw-r--r-- | src/app/google_rcu/frm_vpk/src/app_custom.c | 596 |
1 files changed, 596 insertions, 0 deletions
diff --git a/src/app/google_rcu/frm_vpk/src/app_custom.c b/src/app/google_rcu/frm_vpk/src/app_custom.c new file mode 100644 index 0000000..39a1d4f --- /dev/null +++ b/src/app/google_rcu/frm_vpk/src/app_custom.c @@ -0,0 +1,596 @@ +/****************************************************************************** + * @file app_custom.c + * + * @brief for TLSR chips + * + * @author public@telink-semi.com; + * @date Sep. 30, 2010 + * + * @attention + * + * Copyright (C) 2019-2020 Telink Semiconductor (Shanghai) Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *****************************************************************************/ +#include "board.h" +#include "string.h" +#include "app_custom.h" +#include "frm_vpk_log.h" +#include "frm_vpk_hal_sflash.h" +#include "key_handle.h" +#include "rcu_application.h" + +const u8 *pREMOTE_G10 = (u8 *)("RemoteG10"); +const u8 *pREMOTE_G20 = (u8 *)("RemoteG20"); + +#define LAYOUT_MASK_BIT0 0X01 +#define LAYOUT_MASK_BIT1 0X02 +#define LAYOUT_MASK_BIT2 0X04 +#define LAYOUT_MASK_BIT5 0X20 + + +void app_custom_ui_layout(u8 ui_layout) +{ + uint8_t row_id; + uint8_t col_id; + + frm_vpk_print("ui_layout=%x\r\n", ui_layout); + if ((ui_layout == 0xff) || (ui_layout == 0)) + { + return; + } + if (app_global_data.device_type == REMOTE_G10) + { + if ((ui_layout & LAYOUT_MASK_BIT0)) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G10[0] / KEYPAD_MAX_COLUMN_SIZE_G10; + col_id = Kb_Map_devicelayout_Correspend_Index_G10[0] % KEYPAD_MAX_COLUMN_SIZE_G10; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Dashboard; + Ir_Override_Table_Index_G10[Ir_Table_Correspend_Index_G10[0]] = KEY_ID_Dashboard; + } + else + { + row_id = Kb_Map_devicelayout_Correspend_Index_G10[0] / KEYPAD_MAX_COLUMN_SIZE_G10; + col_id = Kb_Map_devicelayout_Correspend_Index_G10[0] % KEYPAD_MAX_COLUMN_SIZE_G10; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Settings; + Ir_Override_Table_Index_G10[Ir_Table_Correspend_Index_G10[0]] = KEY_ID_Settings; + } + + if ((ui_layout & LAYOUT_MASK_BIT1)) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G10[1] / KEYPAD_MAX_COLUMN_SIZE_G10; + col_id = Kb_Map_devicelayout_Correspend_Index_G10[1] % KEYPAD_MAX_COLUMN_SIZE_G10; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Live; + Ir_Override_Table_Index_G10[Ir_Table_Correspend_Index_G10[1]] = KEY_ID_Live; + } + else + { + row_id = Kb_Map_devicelayout_Correspend_Index_G10[1] / KEYPAD_MAX_COLUMN_SIZE_G10; + col_id = Kb_Map_devicelayout_Correspend_Index_G10[1] % KEYPAD_MAX_COLUMN_SIZE_G10; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Guide; + Ir_Override_Table_Index_G10[Ir_Table_Correspend_Index_G10[1]] = KEY_ID_Guide; + } + + if ((ui_layout & 0x18) == 0x08) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G10[2] / KEYPAD_MAX_COLUMN_SIZE_G10; + col_id = Kb_Map_devicelayout_Correspend_Index_G10[2] % KEYPAD_MAX_COLUMN_SIZE_G10; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Profile; + Ir_Override_Table_Index_G10[Ir_Table_Correspend_Index_G10[2]] = KEY_ID_Profile; + } + else if ((ui_layout & 0x18) == 0x10) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G10[2] / KEYPAD_MAX_COLUMN_SIZE_G10; + col_id = Kb_Map_devicelayout_Correspend_Index_G10[2] % KEYPAD_MAX_COLUMN_SIZE_G10; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_AllApps; + Ir_Override_Table_Index_G10[Ir_Table_Correspend_Index_G10[2]] = KEY_ID_AllApps; + } + } + else + { + if ((ui_layout & LAYOUT_MASK_BIT0)) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[0] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[0] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Dashboard; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[0]] = KEY_ID_Dashboard; + } + else + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[0] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[0] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Settings; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[0]] = KEY_ID_Settings; + } + + if ((ui_layout & LAYOUT_MASK_BIT1)) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[1] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[1] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Live; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[1]] = KEY_ID_Live; + } + else + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[1] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[1] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Guide; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[1]] = KEY_ID_Guide; + } + + if ((ui_layout & LAYOUT_MASK_BIT2)) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[2] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[2] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_TEXT; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[2]] = KEY_ID_TEXT; + } + else + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[2] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[2] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Subtitles; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[2]] = KEY_ID_Subtitles; + } + + if ((ui_layout & 0x18) == 0x08) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[3] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[3] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Profile; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[3]] = KEY_ID_Profile; + } + else if ((ui_layout & 0x18) == 0x10) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[3] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[3] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_AllApps; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[3]] = KEY_ID_AllApps; + } + + if ((ui_layout & LAYOUT_MASK_BIT5)) + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[4] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[4] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_FastRewind; + row_id = Kb_Map_devicelayout_Correspend_Index_G20[5] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[5] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Record; + row_id = Kb_Map_devicelayout_Correspend_Index_G20[6] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[6] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_PlayPause; + row_id = Kb_Map_devicelayout_Correspend_Index_G20[7] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[7] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_FastForward; + + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[4]] = KEY_ID_FastRewind; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[5]] = KEY_ID_Record; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[6]] = KEY_ID_PlayPause; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[7]] = KEY_ID_FastForward; + } + else + { + row_id = Kb_Map_devicelayout_Correspend_Index_G20[4] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[4] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Red; + row_id = Kb_Map_devicelayout_Correspend_Index_G20[5] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[5] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Green; + row_id = Kb_Map_devicelayout_Correspend_Index_G20[6] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[6] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Yellow; + row_id = Kb_Map_devicelayout_Correspend_Index_G20[7] / KEYPAD_MAX_COLUMN_SIZE_G20; + col_id = Kb_Map_devicelayout_Correspend_Index_G20[7] % KEYPAD_MAX_COLUMN_SIZE_G20; + key_handle_global_data.cur_key_mapping_table[row_id][col_id] = KEY_ID_Blue; + + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[4]] = KEY_ID_Red; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[5]] = KEY_ID_Green; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[6]] = KEY_ID_Yellow; + Ir_Override_Table_Index_G20[Ir_Table_Correspend_Index_G20[7]] = KEY_ID_Blue; + } + } +} + +void app_custom_set_new_ir_table(void) +{ + IR_KEY_CODE ir_key_code; + u8 dat[192]; + u8 i; + u8 total_loop_cnt; + uint8_t *p_index_table; + + if (app_global_data.device_type == REMOTE_G10) + { + total_loop_cnt = 24; + p_index_table = Ir_Override_Table_Index_G10; + } + else if (app_global_data.device_type == REMOTE_G20) + { + total_loop_cnt = 48; + p_index_table = Ir_Override_Table_Index_G20; + } + else + { + total_loop_cnt = 24; + p_index_table = Ir_Override_Table_Index_G10; + } + + frm_vpk_flash_read_page(APP_NEC_IR_CODE_TABLE, 48 * 4, dat); + + for (i = 0; i < total_loop_cnt; i++) + { + if ((dat[i * 4 + 2] != 0xff) && (p_index_table[i] != KEY_ID_NONE)) + { + ir_key_code.ir_data = + key_handle_global_data.cur_key_code_table[p_index_table[i]].ir_key_code.ir_data; + + ir_key_code.ir_cmd1 = dat[i * 4 + 2]; + if (dat[i * 4 + 3] != 0xff) + { + ir_key_code.ir_cmd2 = dat[i * 4 + 3]; + } + else + { + ir_key_code.ir_cmd2 = ~ir_key_code.ir_cmd1; + } + + if (dat[i * 4] != 0xff) + { + ir_key_code.ir_addr1 = dat[i * 4]; + if (dat[i * 4 + 1] != 0xff) + { + ir_key_code.ir_addr2 = dat[i * 4 + 1]; + } + else + { + ir_key_code.ir_addr2 = ~ir_key_code.ir_addr1; + } + } + + key_handle_global_data.cur_key_code_table[p_index_table[i]].ir_key_code.ir_data = + ir_key_code.ir_data; + } + } +} + +void app_custom_param_init(u8 device_layout) +{ + if (app_global_data.device_type == REMOTE_G10) + { + key_handle_global_data.keyscan_row_size = KEYPAD_MAX_ROW_SIZE_G10; + key_handle_global_data.keyscan_column_size = KEYPAD_MAX_COLUMN_SIZE_G10; + memcpy(key_handle_global_data.cur_key_mapping_table, KEY_MAPPING_TABLE_G10, + sizeof(KEY_MAPPING_TABLE_G10)); + } + else if (app_global_data.device_type == REMOTE_G20) + { + key_handle_global_data.keyscan_row_size = KEYPAD_MAX_ROW_SIZE_G20; + key_handle_global_data.keyscan_column_size = KEYPAD_MAX_COLUMN_SIZE_G20; + memcpy(key_handle_global_data.cur_key_mapping_table, KEY_MAPPING_TABLE_G20, + sizeof(KEY_MAPPING_TABLE_G20)); + } + app_custom_ui_layout(device_layout); + app_custom_set_new_ir_table(); +} + +void app_custom_wakeup_key_load(u16 mask1, u16 mask2) +{ + u8 j = 0, i; + u8 wakeupkey_num = 0; + u8 *p_kb_map; + + if ((mask1 != 0xffff) && (mask2 != 0xffff) && ((mask1 & mask2) == 0)) + { + if (app_global_data.device_type == REMOTE_G10) + { + wakeupkey_num = APP_CUSTOM_WAKEUPKEY_NUM - 4; + p_kb_map = (u8 *)Wakeup_Map_Correspend_Index_G10; + } + else + { + wakeupkey_num = APP_CUSTOM_WAKEUPKEY_NUM; + p_kb_map = (u8 *)Wakeup_Map_Correspend_Index_G20; + } + for (i = 0; i < wakeupkey_num; i++) + { + if (mask1 & 0x01) + { + app_global_data.wakeup_key1[j] = p_kb_map[i]; + j++; + } + mask1 = mask1 >> 1; + } + j = 0; + for (i = 0; i < wakeupkey_num; i++) + { + if (mask2 & 0x01) + { + app_global_data.wakeup_key2[j] = p_kb_map[i]; + j++; + } + mask2 = mask2 >> 1; + } + } +} + +void app_custom_init(void) +{ + u8 buffer[128]; + u8 addr_pos = 0; +// u8 *pREMOTE_B046 = (u8 *)("RemoteB046"); + + frm_vpk_flash_read_page(APP_CUSTOM_ADDR, 128, buffer); + + if (buffer[0] == 0xff) + { + app_global_data.device_ui_layout_type = 0; + frm_vpk_print("default custom info\r\n"); + app_global_data.device_type = REMOTE_G20; + app_global_data.device_name_len = 10; + memcpy(app_global_data.device_name, pREMOTE_G20, 10); + app_custom_param_init(app_global_data.device_ui_layout_type); + app_global_data.fw_version[3] = (app_global_data.device_type) + 0x30; + app_global_data.fw_version[4] = 0x30; + app_global_data.fw_version[5] = 0x30; + app_global_data.wakeup_adv_format = WAKEUP_FORMAT_GOOGLE_ONLY; + return; + } + else + { + memcpy(app_global_data.pnp_id, &buffer[1], 7); + app_global_data.device_name_len = buffer[8]; + app_global_data.device_type = buffer[0]; + if ((app_global_data.device_type != REMOTE_G10) && (app_global_data.device_type != REMOTE_G20)) + { + app_global_data.device_ui_layout_type = 0; + app_global_data.device_type = REMOTE_G20; + app_global_data.device_name_len = 10; + memcpy(app_global_data.device_name, pREMOTE_G20, 10); + app_custom_param_init(app_global_data.device_ui_layout_type); + app_global_data.fw_version[3] = (app_global_data.device_type) + 0x30; + app_global_data.fw_version[4] = 0x30; + app_global_data.fw_version[5] = 0x30; + app_global_data.wakeup_adv_format = WAKEUP_FORMAT_GOOGLE_ONLY; + return; + } + if (app_global_data.device_name_len > 16) + { + memcpy(app_global_data.device_name, &buffer[9], 16); + } + else + { + memcpy(app_global_data.device_name, &buffer[9], app_global_data.device_name_len); + } + + addr_pos = 9 + app_global_data.device_name_len; + app_global_data.device_ui_layout_type = buffer[addr_pos]; + addr_pos = addr_pos + 1; + + //wakeup key + app_global_data.wakeupkey1_mask = (u16)(((u16)buffer[addr_pos] << 8) | ((u16)buffer[addr_pos + 1])); + app_global_data.wakeupkey2_mask = (u16)(((u16)buffer[addr_pos + 2] << 8) | (( + u16)buffer[addr_pos + 3])); + frm_vpk_print("wakeupkey1_mask=%x,wakeupkey2_mask=%x\r\n", app_global_data.wakeupkey1_mask, + app_global_data.wakeupkey2_mask); + app_custom_wakeup_key_load(app_global_data.wakeupkey1_mask, app_global_data.wakeupkey2_mask); + addr_pos += 4; + + if (app_global_data.device_name_len > 16) + { + app_global_data.device_name_len = 16; + } + } + app_custom_param_init(app_global_data.device_ui_layout_type); + app_global_data.fw_version[3] = (app_global_data.device_type) + 0x30; + + uint8_t base_val; + uint8_t char_val; + + char_val = app_global_data.device_ui_layout_type >> 4; + base_val = (char_val > 9) ? ('A' - 10) : 0x30; + app_global_data.fw_version[4] = char_val + base_val; + + char_val = app_global_data.device_ui_layout_type & 0x0F; + base_val = (char_val > 9) ? ('A' - 10) : 0x30; + app_global_data.fw_version[5] = char_val + base_val; + + /* read APP_CUSTOM_ADDR+0xF9 and set 16 bit wakeup_interval value */ + u8 buffer_wakeup_interval[2] = {0, 0}; + frm_vpk_flash_read_page(APP_FMS_WAKEUP_INTERVAL, 2, buffer_wakeup_interval); + BE_ARRAY_TO_UINT16(app_global_data.find_me_wakeup_timeout, buffer_wakeup_interval); + + /* read APP_CUSTOM_ADDR+0xFB and set en_find_me value */ + u8 buffer_find_me[1] = {0}; + frm_vpk_flash_read_page(APP_EN_FIND_ME, 1, buffer_find_me); + if (buffer_find_me[0] == 0) + { + app_global_data.en_find_me = 1; //enable find me + } + if (buffer_find_me[0] == 0xFF) + { + app_global_data.en_find_me = 0; //default:disable find me + } + + /* read APP_CUSTOM_ADDR+0xFC and set en_rpa value */ + u8 buffer_rpa[1] = {0}; + frm_vpk_flash_read_page(APP_EN_RPA, 1, buffer_rpa); + if (buffer_rpa[0] == 0) + { + app_global_data.en_rpa = 1; //enable RPA + } + else if (buffer_rpa[0] == 0xFF) + { + app_global_data.en_rpa = 0; //default:disable RPA + } + + /* read APP_CUSTOM_ADDR+0xFD and set en_ble_feature value */ + u8 buffer_ble_feature[1] = {0}; + frm_vpk_flash_read_page(APP_EN_BLE_FEATURE, 1, buffer_ble_feature); + if (buffer_ble_feature[0] == 0xFF) + { + app_global_data.en_ble_feature = 1; //default:enable BLE + } + else if (buffer_ble_feature[0] == 0) + { + app_global_data.en_ble_feature = 0; //disable BLE, only use IR + } + + /* read APP_CUSTOM_ADDR+0xFE and set en_google_wakeuppack value */ + u8 buffer_wakeuppack[1] = {0}; + frm_vpk_flash_read_page(APP_EN_GOOGLE_WAKEUPPACK, 1, buffer_wakeuppack); + if (buffer_wakeuppack[0] == 0xFF) + { + app_global_data.en_google_wakeuppack = 1; //default:hybrid wakeup format + } + if (buffer_wakeuppack[0] == 0) + { + app_global_data.en_google_wakeuppack = 0; //customized wakeup format + } + + /* read APP_CUSTOM_ADDR+0xFF and set en_powerkey_cache value */ + u8 buffer_cachekey[1] = {0}; + frm_vpk_flash_read_page(APP_EN_CACHEKEY, 1, buffer_cachekey); + if (buffer_cachekey[0] == 0xFF) + { + app_global_data.en_powerkey_cache = 1; //default:cache power key + } + if (buffer_cachekey[0] == 0) + { + app_global_data.en_powerkey_cache = 0; //not cache power key + } + + if ((buffer[addr_pos] == 0) || (buffer[addr_pos] > 31)) + { + app_global_data.wakeup_adv_format = WAKEUP_FORMAT_GOOGLE_ONLY; + } + else + { + if (app_global_data.en_google_wakeuppack == 0) + { + app_global_data.wakeup_adv_format = WAKEUP_FORMAT_CUSTOM_ONLY; + } + else + { + app_global_data.wakeup_adv_format = WAKEUP_FORMAT_CUSTOM_AND_GOOGLE; + } + + memcpy(app_global_data.wakeup_adv_custom_data, &buffer[addr_pos], MAX_WAKE_CUSTOM_DATA_LEN); + } +} + +u8 app_custom_is_wakeup_key(u8 keyid) +{ + u8 i; + + for (i = 0; i < APP_CUSTOM_WAKEUPKEY_NUM; i++) + { + if ((keyid == app_global_data.wakeup_key1[i]) || (keyid == app_global_data.wakeup_key2[i])) + { + frm_vpk_print("wakeup_key =%x\r\n", keyid); + return 1; + } + } + return 0; +} + +u8 app_custom_is_enable_wakeup_key(void) +{ + if ((app_global_data.wakeupkey1_mask != 0xffff) && (app_global_data.wakeupkey2_mask != 0xffff) && + ((app_global_data.wakeupkey1_mask & app_global_data.wakeupkey2_mask) == 0)) + { + return 1; + } + else + { + return 0; + } +} + +u8 app_custom_wakeupkey_packet_index(u8 keyid) +{ + u8 i; + + for (i = 0; i < APP_CUSTOM_WAKEUPKEY_NUM; i++) + { + if (keyid == app_global_data.wakeup_key1[i]) + { + return 1; + } + else if (keyid == app_global_data.wakeup_key2[i]) + { + return 2; + } + } + return 2; +} + +void app_custom_test(void) +{ + u8 buffer[65] = {/* device type */0x02, + /* PnP Id */ 0x02, 0x8a, 0x24, 0x66, 0x82, 0x01, 0x00, + /* device name and length */ 0x09, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x47, 0x32, 0x30, + /* ui layout */ 0x00, + /* wake up key */ 0x00, 0x04, 0x00, 0x70, + /* wake up adv */ 0x08, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + frm_vpk_flash_erase_sector(APP_CUSTOM_ADDR); + frm_vpk_flash_write_page(APP_CUSTOM_ADDR, sizeof(buffer), buffer); + + u8 buffer2[2] = {0x00, 0x05}; + frm_vpk_flash_write_page(APP_FMS_WAKEUP_INTERVAL, 2, buffer2); + + buffer2[0] = 1; + frm_vpk_flash_write_page(APP_EN_FIND_ME, 1, buffer2); + + buffer2[0] = 0; + frm_vpk_flash_write_page(APP_EN_GOOGLE_WAKEUPPACK, 1, buffer2); + frm_vpk_flash_write_page(APP_EN_BLE_FEATURE, 1, buffer2); //test:write 0 to APP_EN_BLE_FEATURE + + u8 buffer_ir_table[48 * 4]; + u8 override_index; + u8 data_buf[4] = {0xFF, 0xFF, 0xFF, 0xFF}; + memset(buffer_ir_table, 0xFF, sizeof(buffer_ir_table)); + + /* override up with case 1 */ + override_index = 30; + data_buf[0] = 0xFF; + data_buf[1] = 0xFF; + data_buf[2] = 0x33; + data_buf[3] = 0xFF; + memcpy(buffer_ir_table + 4 * override_index, data_buf, 4); + /* override down with case 2 */ + override_index = 7; + data_buf[0] = 0x11; + data_buf[1] = 0xFF; + data_buf[2] = 0x33; + data_buf[3] = 0xFF; + memcpy(buffer_ir_table + 4 * override_index, data_buf, 4); + /* override left with case 3 */ + override_index = 36; + data_buf[0] = 0x11; + data_buf[1] = 0x22; + data_buf[2] = 0x33; + data_buf[3] = 0xFF; + memcpy(buffer_ir_table + 4 * override_index, data_buf, 4); + /* override right with case 4 */ + override_index = 1; + data_buf[0] = 0x11; + data_buf[1] = 0x22; + data_buf[2] = 0x33; + data_buf[3] = 0x44; + memcpy(buffer_ir_table + 4 * override_index, data_buf, 4); + + frm_vpk_flash_erase_sector(APP_NEC_IR_CODE_TABLE); + frm_vpk_flash_write_page(APP_NEC_IR_CODE_TABLE, sizeof(buffer_ir_table), buffer_ir_table); +} |