1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 
5 #include "py/builtin.h"
6 #include "py/mperrno.h"
7 #include "py/obj.h"
8 #include "py/runtime.h"
9 #include "py/stackctrl.h"
10 
11 #include "ulog/ulog.h"
12 
13 #if PY_BUILD_BLE
14 
15 #define LOG_TAG "bleNetconfig"
16 
17 typedef enum {
18     BLECFG_WIFIINFO  = 0x1,
19     BLECFG_DEVINFO = 0x2,
20 } blecfg_info_params_t;
21 
ble_init(void)22 STATIC mp_obj_t ble_init(void)
23 {
24     mp_int_t ret = BleCfg_run();
25     return MP_OBJ_NEW_SMALL_INT(ret);
26 }
27 MP_DEFINE_CONST_FUN_OBJ_0(ble_init_obj, ble_init);
28 
29 // STATIC mp_obj_t ble_recovery_wifi(void)
30 // {
31 //     mp_int_t ret = BleCfg_recovery_wifi();
32 //     return MP_OBJ_NEW_SMALL_INT(ret);
33 // }
34 // MP_DEFINE_CONST_FUN_OBJ_0(ble_recovery_wifi_obj, ble_recovery_wifi);
35 
36 // STATIC mp_obj_t ble_recovery_devinfo(void)
37 // {
38 //     mp_int_t ret = BleCfg_recovery_devinfo();
39 //     return MP_OBJ_NEW_SMALL_INT(ret);
40 // }
41 // MP_DEFINE_CONST_FUN_OBJ_0(ble_recovery_devinfo_obj, ble_recovery_devinfo);
42 
43 // mp_int_t ble_config_get_wifi_info(amp_wifi_info_t *wifi_info)
44 // {
45 //     netmgr_config_t config = { 0 };
46 //     netmgr_ifconfig_info_t info = { 0 };
47 //     mp_int_t ap_num;
48 //     mp_int_t used_ap; /**< ap that is used in the array */
49 
50 //     netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH);
51 //     if (hdl == -1) {
52 //         LOGE(LOG_TAG, "get wifi info failed!, netmgr_hdl_t = %d", hdl);
53 //         return BLE_ERR_NET_DEV;
54 //     }
55 
56 //     memset(&info, 0, sizeof(info));
57 //     if (netmgr_get_ifconfig(hdl, &info) == -1) {
58 //         return BLE_ERR_NET_IFCONFIG;
59 //     }
60 
61 //     memset(&config, 0, sizeof(config));
62 //     if (netmgr_get_config(hdl, &config) == -1) {
63 //         return BLE_ERR_NET_CONFIG;
64 //     }
65 //     ap_num = config.config.wifi_config.ap_num;
66 //     used_ap = config.config.wifi_config.used_ap;
67 
68 //     if ((ap_num < MAX_AP_CONFIG_NUM) && (used_ap < ap_num)) {
69 //         memset(wifi_info->ssid, 0, sizeof(wifi_info->ssid));
70 //         strncpy(wifi_info->ssid, config.config.wifi_config.config[used_ap].ssid, sizeof(wifi_info->ssid) - 1);
71 //     } else {
72 //         return BLE_ERROR_NET_AP_CNT_INVALID;
73 //     }
74 
75 //     snprintf(wifi_info->ip, sizeof(wifi_info->ip), "%s", info.ip_addr);
76 //     memcpy(wifi_info->mac, info.mac, sizeof(wifi_info->mac));
77 //     wifi_info->rssi = info.rssi;
78 
79 //     return BLE_ERR_NONE;
80 // }
81 
82 // STATIC mp_obj_t ble_info(void)
83 // {
84 //     amp_wifi_info_t wifi_info = { 0 };
85 //     mp_int_t ret = ble_config_get_wifi_info(&wifi_info);
86 //     if (ret != BLE_ERR_NONE) {
87 //         LOGE(LOG_TAG, "Failed to get wifi info, ret = %d", ret);
88 //     }
89 
90 //     mp_obj_t dict = mp_obj_new_dict(4);
91 //     mp_obj_dict_store(MP_OBJ_FROM_PTR(dict), mp_obj_new_str("SSID", 4),
92 //                       mp_obj_new_str(wifi_info.ssid, strlen(wifi_info.ssid)));
93 //     mp_obj_dict_store(MP_OBJ_FROM_PTR(dict), mp_obj_new_str("MAC", 3), mp_obj_new_str(wifi_info.mac, 6));
94 //     mp_obj_dict_store(MP_OBJ_FROM_PTR(dict), mp_obj_new_str("IP", 2),
95 //                       mp_obj_new_str(wifi_info.ip, strlen(wifi_info.ip)));
96 //     mp_obj_dict_store(MP_OBJ_FROM_PTR(dict), mp_obj_new_str("RSSI", 4), mp_obj_new_int(wifi_info.rssi));
97 
98 //     return dict;
99 // }
100 // MP_DEFINE_CONST_FUN_OBJ_0(ble_info_obj, ble_info);
101 
102 // STATIC mp_obj_t ble_status(void)
103 // {
104 //     netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH);
105 //     if (hdl == -1) {
106 //         LOGE(LOG_TAG, "get wifi info failed!, netmgr_hdl_t = %d", hdl);
107 //         return MP_OBJ_NEW_SMALL_INT(BLE_ERR_NET_DEV);
108 //     }
109 
110 //     mp_int_t ret = netmgr_get_state(hdl);
111 //     return MP_OBJ_NEW_SMALL_INT(ret);
112 // }
113 // MP_DEFINE_CONST_FUN_OBJ_0(ble_status_obj, ble_status);
114 
blecfg_restore(size_t n_args,const mp_obj_t * args)115 STATIC mp_obj_t blecfg_restore(size_t n_args, const mp_obj_t *args)
116 {
117     mp_int_t ret = -1;
118 
119     uint32_t params = (uint32_t)mp_obj_get_int(args[0]);
120 
121     if (BLECFG_WIFIINFO == params) {
122         ret = BleCfg_recovery_wifi();
123     } else if (BLECFG_DEVINFO == params) {
124         ret = BleCfg_recovery_devinfo();
125     } else {
126         LOGE(LOG_TAG, "error, recovery params abnormal!\n");
127     }
128 
129     return MP_OBJ_NEW_SMALL_INT(ret);
130 }
131 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(blecfg_restore_obj, 1, blecfg_restore);
132 
blecfg_get(size_t n_args,const mp_obj_t * args)133 STATIC mp_obj_t blecfg_get(size_t n_args, const mp_obj_t *args)
134 {
135     mp_int_t ret = 0;
136     // wait C interface finish
137     return MP_OBJ_NEW_SMALL_INT(ret);
138 }
139 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR(blecfg_get_obj, 1, blecfg_get);
140 
blecfg_clear(void)141 STATIC mp_obj_t blecfg_clear(void)
142 {
143     mp_int_t ret = 0;
144     // wait C interface finish
145     return MP_OBJ_NEW_SMALL_INT(ret);
146 }
147 MP_DEFINE_CONST_FUN_OBJ_0(blecfg_clear_obj, blecfg_clear);
148 
149 STATIC const mp_rom_map_elem_t blecfg_module_globals_table[] = {
150     { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_blecfg) },
151     { MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&ble_init_obj) },
152     // { MP_ROM_QSTR(MP_QSTR_recovery_wifi), MP_ROM_PTR(&ble_recovery_wifi_obj) },
153     // { MP_ROM_QSTR(MP_QSTR_recovery_devinfo), MP_ROM_PTR(&ble_recovery_devinfo_obj) },
154     // { MP_ROM_QSTR(MP_QSTR_info), MP_ROM_PTR(&ble_info_obj) },
155     // { MP_ROM_QSTR(MP_QSTR_status), MP_ROM_PTR(&ble_status_obj) },
156     { MP_ROM_QSTR(MP_QSTR_restore), MP_ROM_PTR(&blecfg_restore_obj) },
157     { MP_ROM_QSTR(MP_QSTR_get), MP_ROM_PTR(&blecfg_get_obj) },
158     { MP_ROM_QSTR(MP_QSTR_clear), MP_ROM_PTR(&blecfg_clear_obj) },
159 
160     { MP_ROM_QSTR(MP_QSTR_WifiInfo), MP_ROM_INT(BLECFG_WIFIINFO) },
161     { MP_ROM_QSTR(MP_QSTR_DevInfo), MP_ROM_INT(BLECFG_DEVINFO) },
162 };
163 STATIC MP_DEFINE_CONST_DICT(blecfg_module_globals, blecfg_module_globals_table);
164 
165 const mp_obj_module_t mp_module_blecfg = {
166     .base = { &mp_type_module },
167     .globals = (mp_obj_dict_t *)&blecfg_module_globals,
168 };
169 
170 MP_REGISTER_MODULE(MP_QSTR_blecfg, mp_module_blecfg, PY_BUILD_BLE);
171 
172 #endif
173