• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  *
15  * Description: hilink function mapping. \n
16  *
17  * History: \n
18  * 2024-01-27, Create file. \n
19  */
20 
21 #include "hilink_function_mapping.h"
22 #include "func_call_list.h"
23 #include "hilink.h"
24 #include "hilink_log_manage.h"
25 #include "hilink_device.h"
26 #include "ble_cfg_net_api.h"
27 #include "hilink_bt_function.h"
28 #include "hilink_network_adapter.h"
29 #include "hilink_socket_adapter.h"
30 
31 static int *g_app_tbl;
32 const void *g_hilink_call_tbl[HILINK_CALL_MAX] __attribute__ ((section(".hilink_tbl"))) = {
33     [HILINK_CALL_HILINK_REGISTER_BASE_CALLBACK]         = HILINK_RegisterBaseCallback,
34     [HILINK_CALL_HILINK_MAIN]                           = HILINK_Main,
35     [HILINK_CALL_HILINK_RESET]                          = HILINK_Reset,
36     [HILINK_CALL_HILINK_SET_SDK_ATTR]                   = HILINK_SetSdkAttr,
37     [HILINK_CALL_HILINK_GET_SDK_ATTR]                   = HILINK_GetSdkAttr,
38     [HILINK_CALL_HILINK_RESTORE_FACTORY_SETTINGS]       = HILINK_RestoreFactorySettings,
39     [HILINK_CALL_HILINK_GET_DEV_STATUS]                 = HILINK_GetDevStatus,
40     [HILINK_CALL_HILINK_GET_SDK_VERSION]                = HILINK_GetSdkVersion,
41     [HILINK_CALL_HILINK_REPORT_CHAR_STATE]              = HILINK_ReportCharState,
42     [HILINK_CALL_HILINK_IS_REGISTER]                    = HILINK_IsRegister,
43     [HILINK_CALL_HILINK_GET_NETWORKING_MODE]            = HILINK_GetNetworkingMode,
44     [HILINK_CALL_HILINK_GET_REGISTER_STATUS]            = HILINK_GetRegisterStatus,
45     [HILINK_CALL_HILINK_SET_SCHEDULE_INTERVAL]          = HILINK_SetScheduleInterval,
46     [HILINK_CALL_HILINK_SET_MONITOR_SCHEDULE_INTERVAL]  = HILINK_SetMonitorScheduleInterval,
47     [HILINK_CALL_HILINK_SET_NET_CONFIG_MODE]            = HILINK_SetNetConfigMode,
48     [HILINK_CALL_HILINK_GET_NET_CONFIG_MODE]            = HILINK_GetNetConfigMode,
49     [HILINK_CALL_HILINK_SET_NET_CONFIG_TIMEOUT]         = HILINK_SetNetConfigTimeout,
50     [HILINK_CALL_HILINK_SET_OTA_BOOT_TIME]              = HILINK_SetOtaBootTime,
51     [HILINK_CALL_HILINK_ENABLE_KITFRAMEWORK]            = HILINK_EnableKitframework,
52     [HILINK_CALL_HILINK_ENABLE_BATCH_CONTROL]           = HILINK_EnableBatchControl,
53     [HILINK_CALL_HILINK_ENABLE_PROCESS_DEL_ERR_CODE]    = HILINK_EnableProcessDelErrCode,
54     [HILINK_CALL_HILINK_UNBIND_DEVICE]                  = HILINK_UnbindDevice,
55     [HILINK_CALL_HILINK_SET_DEVICE_INSTALL_TYPE]        = HILINK_SetDeviceInstallType,
56     [HILINK_CALL_HILINK_GET_DEV_SETUP_TYPE]             = HILINK_GetDevSetupType,
57     [HILINK_CALL_HILINK_ENABLE_DEV_ID_INHERIT]          = HILINK_EnableDevIdInherit,
58     [HILINK_CALL_HILINK_NOTIFY_NETWORK_AVAILABLE]       = HILINK_NotifyNetworkAvailable,
59     [HILINK_CALL_HILINK_SET_LOG_LEVEL]                  = HILINK_SetLogLevel,
60     [HILINK_CALL_HILINK_GET_LOG_LEVEL]                  = HILINK_GetLogLevel,
61     [HILINK_CALL_HILINK_REGISTER_GET_AC_V2_FUNC]        = HILINK_RegisterGetAcV2Func,
62     [HILINK_CALL_BLE_CFG_NET_INIT]                      = BLE_CfgNetInit,
63     [HILINK_CALL_BLE_CFG_NET_DE_INIT]                   = BLE_CfgNetDeInit,
64     [HILINK_CALL_BLE_CFG_NET_ADV_CTRL]                  = BLE_CfgNetAdvCtrl,
65     [HILINK_CALL_BLE_CFG_NET_ADV_UPDATE]                = BLE_CfgNetAdvUpdate,
66     [HILINK_CALL_BLE_CFG_NET_DIS_CONNECT]               = BLE_CfgNetDisConnect,
67     [HILINK_CALL_BLE_SEND_CUSTOM_DATA]                  = BLE_SendCustomData,
68     [HILINK_CALL_BLE_GET_ADV_TYPE]                      = BLE_GetAdvType,
69     [HILINK_CALL_BLE_SET_ADV_TYPE]                      = BLE_SetAdvType,
70     [HILINK_CALL_BLE_SET_ADV_NAME_MPP]                  = BLE_SetAdvNameMpp,
71     [HILINK_CALL_BLE_NEAR_DISCOVERY_INIT]               = BLE_NearDiscoveryInit,
72     [HILINK_CALL_BLE_NEAR_DISCOVERY_ENABLE]             = BLE_NearDiscoveryEnable,
73     [HILINK_CALL_HILINK_BT_GET_TASK_STACK_SIZE]         = HILINK_BT_GetTaskStackSize,
74     [HILINK_CALL_HILINK_BT_SET_TASK_STACK_SIZE]         = HILINK_BT_SetTaskStackSize,
75     [HILINK_CALL_HILINK_BT_SET_SDK_EVENT_CALLBACK]      = HILINK_BT_SetSdkEventCallback,
76     [HILINK_CALL_HILINK_REG_WIFI_RECOVERY_CALLBACK]     = HILINK_RegWiFiRecoveryCallback,
77     [HILINK_CALL_HILINK_REG_ERRNO_CALLBACK]             = HILINK_RegisterErrnoCallback,
78 };
79 
get_app_tbl(void)80 int *get_app_tbl(void)
81 {
82     return g_app_tbl;
83 }
84 
85 /* copy ram */
copy_bin_to_ram(unsigned int * start_addr,const unsigned int * const load_addr,unsigned int size)86 static void copy_bin_to_ram(unsigned int *start_addr,
87     const unsigned int *const load_addr, unsigned int size)
88 {
89     unsigned int i;
90 
91     for (i = 0; i < size / sizeof(unsigned int); i++) {
92         *(start_addr + i) = *(load_addr + i);
93     }
94 }
95 
96 /* init ram value */
init_mem_value(unsigned int * start_addr,const unsigned int * const end_addr,unsigned int init_val)97 static void init_mem_value(unsigned int *start_addr,
98     const unsigned int *const end_addr, unsigned int init_val)
99 {
100     unsigned int *dest = start_addr;
101 
102     while (dest < end_addr) {
103         *dest = init_val;
104         dest++;
105     }
106 }
107 
hilink_info_entry(void ** hilink_call_tbl,void * app_call_tbl)108 static void hilink_info_entry(void **hilink_call_tbl, void *app_call_tbl)
109 {
110 #ifndef CHIP_EDA
111     /* copy sram_text from flash to SRAM */
112     copy_bin_to_ram(&__sram_text_begin__, &__sram_text_load__, (unsigned int)&__sram_text_size__);
113     /* copy data from flash to SRAM */
114     copy_bin_to_ram(&__data_begin__, &__data_load__, (unsigned int)&__data_size__);
115     /* clear bss on SRAM */
116     init_mem_value(&__bss_begin__, &__bss_end__, 0);
117 #endif
118 
119     *hilink_call_tbl = g_hilink_call_tbl;
120     g_app_tbl = app_call_tbl;
121 }
122 
123 __attribute__ ((used, section(".hilink_info"))) struct hilink_info_stru hilink_info = {
124     hilink_info_entry,
125 };
126