wifi/wifi_scan/main.c

/*
* EVALUATION AND USE OF THIS SOFTWARE IS SUBJECT TO THE TERMS AND
* CONDITIONS OF THE CONTROLLING LICENSE AGREEMENT FOUND AT LICENSE.md
* IN THIS SDK. IF YOU DO NOT AGREE TO THE LICENSE TERMS AND CONDITIONS,
* PLEASE RETURN ALL SOURCE FILES TO SILICON LABORATORIES.
* (c) Copyright 2018, Silicon Laboratories Inc. All rights reserved.
*/
/* Documentation for this app is available online.
* See https://docs.silabs.com/gecko-os/4/standard/latest/sdk/examples/wifi/scan
*/
#include "gos.h"
#define SCAN_PERIOD_MS (15000) // ms
#define SCAN_INITIAL_DELAY_MS (100) //ms
#define APPLICATION_START_LINE "\r\nWifi Scan example starting ..."
/*************************************************************************************************/
void gos_app_init(void)
{
GOS_LOG(APPLICATION_START_LINE);
gos_rtos_delay_milliseconds(SCAN_INITIAL_DELAY_MS);
gos_event_register_periodic(scan_event_handler, NULL, SCAN_PERIOD_MS, GOS_EVENT_FLAGS1(RUN_NOW));
}
/*************************************************************************************************/
static void scan_event_handler(void *arg)
{
gos_scan_result_t *scan_results;
const uint32_t start_time = gos_rtos_get_time();
int i = 0;
GOS_LOG( "Scanning for Wi-Fi networks ..." );
if (GOS_FAILED(ret, gos_network_scan(&scan_results, 0, NULL)))
{
GOS_LOG("Failed to issue scan: %d", ret);
return;
}
GOS_LOG(" # Type BSSID RSSI Rate Chan Security SSID" );
GOS_LOG("--------------------------------------------------------------------" );
for (const gos_scan_result_t *result = scan_results; result != NULL; result = result->next, ++i)
{
print_scan_result(i, result);
}
GOS_LOG("Scan complete in %lu milliseconds\r\n", gos_rtos_get_time() - start_time);
}
/*************************************************************************************************/
static void print_scan_result(int index, const gos_scan_result_t* record )
{
char buffer[196], mac[32];
gos_fpi_str_buffer_t data_rate_str;
char *ptr = buffer;
fpi_int_to_str(data_rate_str, record->max_data_rate, 1000.0, 3);
ptr += sprintf(ptr, " %2d", index);
ptr += sprintf(ptr, " %5s", ( record->bss_type == GOS_BSS_TYPE_ADHOC ) ? "Adhoc" : "Infra");
ptr += sprintf(ptr, " %s", mac_to_str(&record->BSSID, mac));
ptr += sprintf(ptr, " %3d", record->signal_strength);
ptr += sprintf(ptr, " %-5s", data_rate_str);
ptr += sprintf(ptr, " %3d", record->channel);
ptr += sprintf(ptr, " %-10s", ( record->security == GOS_SECURITY_OPEN ) ? "Open" :
( record->security == GOS_SECURITY_WEP_PSK ) ? "WEP" :
( record->security == GOS_SECURITY_WPA_TKIP_PSK ) ? "WPA TKIP" :
( record->security == GOS_SECURITY_WPA_AES_PSK ) ? "WPA AES" :
( record->security == GOS_SECURITY_WPA2_AES_PSK ) ? "WPA2 AES" :
( record->security == GOS_SECURITY_WPA2_TKIP_PSK ) ? "WPA2 TKIP" :
( record->security == GOS_SECURITY_WPA2_MIXED_PSK ) ? "WPA2 Mixed" :
"Unknown" );
ptr += sprintf(ptr, " ");
if (record->SSID.length > 0)
{
ssid_to_str(ptr, &record->SSID);
}
else
{
strcpy(ptr, "<ssid hidden>");
}
GOS_LOG("%s", buffer);
}