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