-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
wfa-qt-control-app: Handle supplicant event
Implement imperative check for supplicant readiness prior to QT thread initiation. Signed-off-by: Triveni Danda <[email protected]>
- Loading branch information
Showing
4 changed files
with
104 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* Copyright (c) 2024 Nordic Semiconductor ASA | ||
* | ||
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause | ||
*/ | ||
|
||
/** @file | ||
* @brief WPA SUPP events | ||
*/ | ||
|
||
#include <stdio.h> | ||
#include <zephyr/net/net_event.h> | ||
#include <ctrl_iface_zephyr.h> | ||
#include <supp_events.h> | ||
#include <utils.h> | ||
#include <supp_main.h> | ||
#include <zephyr/logging/log.h> | ||
#include <zephyr/kernel.h> | ||
LOG_MODULE_REGISTER(wpas_event, CONFIG_WFA_QT_LOG_LEVEL); | ||
|
||
#define WPA_SUPP_EVENTS (NET_EVENT_WPA_SUPP_READY) | ||
|
||
static struct net_mgmt_event_callback net_wpa_supp_cb; | ||
|
||
K_SEM_DEFINE(wpa_supp_ready_sem, 0, 1); | ||
|
||
#define DEFAULT_WIFI_IFACE "wlan0" | ||
|
||
static void handle_wpa_supp_ready(struct net_mgmt_event_callback *cb) | ||
{ | ||
k_sem_give(&wpa_supp_ready_sem); | ||
} | ||
|
||
static void wpa_supp_event_handler(struct net_mgmt_event_callback *cb, | ||
uint32_t mgmt_event, struct net_if *iface) | ||
{ | ||
/* TODO: Handle other events */ | ||
switch (mgmt_event) { | ||
case NET_EVENT_WPA_SUPP_READY: | ||
handle_wpa_supp_ready(cb); | ||
break; | ||
default: | ||
LOG_DBG("Unhandled event (%d)", mgmt_event); | ||
break; | ||
} | ||
} | ||
|
||
int wait_for_wpa_s_ready(void) | ||
{ | ||
struct wpa_supplicant *wpa_s = z_wpas_get_handle_by_ifname(DEFAULT_WIFI_IFACE); | ||
|
||
if (wpa_s) { | ||
LOG_INF("Supplicant is ready"); | ||
return 0; | ||
} | ||
|
||
k_sem_take(&wpa_supp_ready_sem, K_MSEC(CONFIG_WPAS_READY_TIMEOUT_MS)); | ||
|
||
wpa_s = z_wpas_get_handle_by_ifname(DEFAULT_WIFI_IFACE); | ||
if (!wpa_s) { | ||
LOG_INF("Supplicant is not ready"); | ||
return -1; | ||
} | ||
|
||
/* Belts and braces: Check for ctrl_iface initialization */ | ||
if (wpa_s->ctrl_iface->sock_pair[0] < 0) { | ||
LOG_INF("Control iface is not ready"); | ||
return -1; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
int wpa_supp_events_register(void) | ||
{ | ||
net_mgmt_init_event_callback(&net_wpa_supp_cb, wpa_supp_event_handler, WPA_SUPP_EVENTS); | ||
net_mgmt_add_event_callback(&net_wpa_supp_cb); | ||
|
||
return 0; | ||
} |