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