mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
WINC1500: Add netinfo function.
* Returns connection RSSI, security type, remote MAC address and IP.
This commit is contained in:
parent
750eb01e54
commit
684614946e
@ -219,6 +219,34 @@ static mp_obj_t py_winc_ifconfig(size_t n_args, const mp_obj_t *args)
|
||||
}
|
||||
}
|
||||
|
||||
static mp_obj_t py_winc_netinfo(mp_obj_t self_in)
|
||||
{
|
||||
winc_netinfo_t netinfo;
|
||||
winc_netinfo(&netinfo);
|
||||
|
||||
// Format MAC address
|
||||
VSTR_FIXED(mac_vstr, 18);
|
||||
vstr_printf(&mac_vstr, "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||
netinfo.mac_addr[0], netinfo.mac_addr[1], netinfo.mac_addr[2],
|
||||
netinfo.mac_addr[3], netinfo.mac_addr[4], netinfo.mac_addr[5]);
|
||||
|
||||
// Format IP address
|
||||
VSTR_FIXED(ip_vstr, 16);
|
||||
vstr_printf(&ip_vstr, "%d.%d.%d.%d", netinfo.ip_addr[0],
|
||||
netinfo.ip_addr[1], netinfo.ip_addr[2], netinfo.ip_addr[3]);
|
||||
|
||||
// Add connection info
|
||||
|
||||
mp_obj_t tuple[5] = {
|
||||
mp_obj_new_int(netinfo.rssi),
|
||||
mp_obj_new_int(netinfo.security),
|
||||
mp_obj_new_str(netinfo.ssid, strlen(netinfo.ssid)),
|
||||
mp_obj_new_str(mac_vstr.buf, mac_vstr.len),
|
||||
mp_obj_new_str(ip_vstr.buf, ip_vstr.len),
|
||||
};
|
||||
return mp_obj_new_tuple(5, tuple);
|
||||
}
|
||||
|
||||
static int winc_scan_callback(winc_scan_result_t *scan_result, void *arg)
|
||||
{
|
||||
mp_obj_t scan_list = (mp_obj_t) arg;
|
||||
@ -502,6 +530,7 @@ static MP_DEFINE_CONST_FUN_OBJ_1(py_winc_isconnected_obj, py_winc_isconnected)
|
||||
static MP_DEFINE_CONST_FUN_OBJ_1(py_winc_connected_sta_obj, py_winc_connected_sta);
|
||||
static MP_DEFINE_CONST_FUN_OBJ_2(py_winc_wait_for_sta_obj, py_winc_wait_for_sta);
|
||||
static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(py_winc_ifconfig_obj, 1, 2, py_winc_ifconfig);
|
||||
static MP_DEFINE_CONST_FUN_OBJ_1(py_winc_netinfo_obj, py_winc_netinfo);
|
||||
static MP_DEFINE_CONST_FUN_OBJ_1(py_winc_scan_obj, py_winc_scan);
|
||||
static MP_DEFINE_CONST_FUN_OBJ_1(py_winc_get_rssi_obj, py_winc_get_rssi);
|
||||
static MP_DEFINE_CONST_FUN_OBJ_1(py_winc_fw_version_obj, py_winc_fw_version);
|
||||
@ -516,6 +545,7 @@ static const mp_map_elem_t winc_locals_dict_table[] = {
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_connected_sta), (mp_obj_t)&py_winc_connected_sta_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_wait_for_sta), (mp_obj_t)&py_winc_wait_for_sta_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_ifconfig), (mp_obj_t)&py_winc_ifconfig_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_netinfo), (mp_obj_t)&py_winc_netinfo_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_scan), (mp_obj_t)&py_winc_scan_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_rssi), (mp_obj_t)&py_winc_get_rssi_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_fw_version), (mp_obj_t)&py_winc_fw_version_obj },
|
||||
|
||||
@ -346,6 +346,7 @@ Q(isconnected)
|
||||
Q(connected_sta)
|
||||
Q(wait_for_sta)
|
||||
Q(ifconfig)
|
||||
Q(netinfo)
|
||||
Q(fw_version)
|
||||
Q(fw_dump)
|
||||
Q(fw_update)
|
||||
|
||||
@ -65,6 +65,14 @@ typedef struct {
|
||||
char ssid[WINC_MAX_SSID_LEN];
|
||||
} winc_scan_result_t;
|
||||
|
||||
typedef struct {
|
||||
int8_t rssi;
|
||||
uint8_t security;
|
||||
char ssid[WINC_MAX_SSID_LEN];
|
||||
uint8_t ip_addr[WINC_IPV4_ADDR_LEN];
|
||||
uint8_t mac_addr[WINC_MAC_ADDR_LEN];
|
||||
} winc_netinfo_t;
|
||||
|
||||
typedef int (*winc_scan_callback_t) (winc_scan_result_t *, void *);
|
||||
|
||||
typedef struct {
|
||||
@ -100,6 +108,7 @@ int winc_isconnected();
|
||||
int winc_connected_sta(uint32_t *sta_ip);
|
||||
int winc_wait_for_sta(uint32_t *sta_ip, uint32_t timeout);
|
||||
int winc_ifconfig(winc_ifconfig_t *ifconfig, bool set);
|
||||
int winc_netinfo(winc_netinfo_t *netinfo);
|
||||
int winc_scan(winc_scan_callback_t cb, void *arg);
|
||||
int winc_get_rssi();
|
||||
int winc_fw_version(winc_fwver_t *wfwver);
|
||||
|
||||
@ -324,6 +324,23 @@ static void wifi_callback_sta(uint8_t msg_type, void *msg)
|
||||
}
|
||||
|
||||
case M2M_WIFI_RESP_CONN_INFO: {
|
||||
// Connection info
|
||||
tstrM2MConnInfo *con_info = (tstrM2MConnInfo*) msg;
|
||||
winc_netinfo_t *netinfo = (winc_netinfo_t *) async_request_data;
|
||||
|
||||
// Set rssi and security
|
||||
netinfo->rssi = con_info->s8RSSI;
|
||||
netinfo->security = con_info->u8SecType;
|
||||
|
||||
// Copy IP address.
|
||||
memcpy(netinfo->ip_addr, con_info->au8IPAddr, WINC_IPV4_ADDR_LEN);
|
||||
|
||||
// Get MAC Address.
|
||||
memcpy(netinfo->mac_addr, con_info->au8MACAddress, WINC_MAC_ADDR_LEN);
|
||||
|
||||
// Copy SSID.
|
||||
strncpy(netinfo->ssid, con_info->acSSID, WINC_MAX_SSID_LEN-1);
|
||||
|
||||
async_request_done = true;
|
||||
break;
|
||||
}
|
||||
@ -572,6 +589,22 @@ int winc_ifconfig(winc_ifconfig_t *rifconfig, bool set)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int winc_netinfo(winc_netinfo_t *netinfo)
|
||||
{
|
||||
async_request_done = false;
|
||||
async_request_data = netinfo;
|
||||
|
||||
// Request connection info
|
||||
m2m_wifi_get_connection_info();
|
||||
|
||||
while (async_request_done == false) {
|
||||
// Handle pending events from network controller.
|
||||
m2m_wifi_handle_events(NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int winc_scan(winc_scan_callback_t cb, void *arg)
|
||||
{
|
||||
scan_arg_t scan_arg = {arg, cb};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user