blob: f9eb52b7a594362fc9c2078aedbac0a193c0bfda [file] [log] [blame]
/*
* Copyright (c) 2020 Gerson Fernando Budke <nandojve@gmail.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/logging/log.h>
LOG_MODULE_DECLARE(tagoio_http_post, CONFIG_TAGOIO_HTTP_POST_LOG_LEVEL);
#include <zephyr/net/wifi_mgmt.h>
static int connected;
static struct net_mgmt_event_callback wifi_shell_mgmt_cb;
static void handle_wifi_connect_result(struct net_mgmt_event_callback *cb)
{
const struct wifi_status *status = (const struct wifi_status *)
cb->info;
if (status->status) {
LOG_ERR("Connection request failed (%d)", status->status);
} else {
LOG_INF("WIFI Connected");
connected = 1;
}
}
static void wifi_mgmt_event_handler(struct net_mgmt_event_callback *cb,
uint32_t mgmt_event, struct net_if *iface)
{
switch (mgmt_event) {
case NET_EVENT_WIFI_CONNECT_RESULT:
handle_wifi_connect_result(cb);
break;
default:
break;
}
}
void wifi_connect(void)
{
int nr_tries = 10;
int ret = 0;
net_mgmt_init_event_callback(&wifi_shell_mgmt_cb,
wifi_mgmt_event_handler,
NET_EVENT_WIFI_CONNECT_RESULT);
net_mgmt_add_event_callback(&wifi_shell_mgmt_cb);
struct net_if *iface = net_if_get_default();
static struct wifi_connect_req_params cnx_params = {
.ssid = CONFIG_TAGOIO_HTTP_WIFI_SSID,
.ssid_length = 0,
.psk = CONFIG_TAGOIO_HTTP_WIFI_PSK,
.psk_length = 0,
.channel = 0,
.security = WIFI_SECURITY_TYPE_PSK,
};
cnx_params.ssid_length = strlen(CONFIG_TAGOIO_HTTP_WIFI_SSID);
cnx_params.psk_length = strlen(CONFIG_TAGOIO_HTTP_WIFI_PSK);
connected = 0;
LOG_INF("WIFI try connecting to %s...", CONFIG_TAGOIO_HTTP_WIFI_SSID);
/* Let's wait few seconds to allow wifi device be on-line */
while (nr_tries-- > 0) {
ret = net_mgmt(NET_REQUEST_WIFI_CONNECT, iface, &cnx_params,
sizeof(struct wifi_connect_req_params));
if (ret == 0) {
break;
}
LOG_INF("Connect request failed %d. Waiting iface be up...", ret);
k_msleep(500);
}
while (connected == 0) {
k_msleep(100);
}
}