| /* |
| * Copyright (c) 2017 Intel Corporation. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief WiFi L2 stack public header |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_NET_WIFI_MGMT_H_ |
| #define ZEPHYR_INCLUDE_NET_WIFI_MGMT_H_ |
| |
| #include <net/net_mgmt.h> |
| #include <net/wifi.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* Management part definitions */ |
| |
| #define _NET_WIFI_LAYER NET_MGMT_LAYER_L2 |
| #define _NET_WIFI_CODE 0x156 |
| #define _NET_WIFI_BASE (NET_MGMT_IFACE_BIT | \ |
| NET_MGMT_LAYER(_NET_WIFI_LAYER) | \ |
| NET_MGMT_LAYER_CODE(_NET_WIFI_CODE)) |
| #define _NET_WIFI_EVENT (_NET_WIFI_BASE | NET_MGMT_EVENT_BIT) |
| |
| enum net_request_wifi_cmd { |
| NET_REQUEST_WIFI_CMD_SCAN = 1, |
| NET_REQUEST_WIFI_CMD_CONNECT, |
| NET_REQUEST_WIFI_CMD_DISCONNECT, |
| NET_REQUEST_WIFI_CMD_AP_ENABLE, |
| NET_REQUEST_WIFI_CMD_AP_DISABLE, |
| }; |
| |
| #define NET_REQUEST_WIFI_SCAN \ |
| (_NET_WIFI_BASE | NET_REQUEST_WIFI_CMD_SCAN) |
| |
| NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_WIFI_SCAN); |
| |
| #define NET_REQUEST_WIFI_CONNECT \ |
| (_NET_WIFI_BASE | NET_REQUEST_WIFI_CMD_CONNECT) |
| |
| NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_WIFI_CONNECT); |
| |
| #define NET_REQUEST_WIFI_DISCONNECT \ |
| (_NET_WIFI_BASE | NET_REQUEST_WIFI_CMD_DISCONNECT) |
| |
| NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_WIFI_DISCONNECT); |
| |
| #define NET_REQUEST_WIFI_AP_ENABLE \ |
| (_NET_WIFI_BASE | NET_REQUEST_WIFI_CMD_AP_ENABLE) |
| |
| NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_WIFI_AP_ENABLE); |
| |
| #define NET_REQUEST_WIFI_AP_DISABLE \ |
| (_NET_WIFI_BASE | NET_REQUEST_WIFI_CMD_AP_DISABLE) |
| |
| NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_WIFI_AP_DISABLE); |
| |
| enum net_event_wifi_cmd { |
| NET_EVENT_WIFI_CMD_SCAN_RESULT = 1, |
| NET_EVENT_WIFI_CMD_SCAN_DONE, |
| NET_EVENT_WIFI_CMD_CONNECT_RESULT, |
| NET_EVENT_WIFI_CMD_DISCONNECT_RESULT, |
| }; |
| |
| #define NET_EVENT_WIFI_SCAN_RESULT \ |
| (_NET_WIFI_EVENT | NET_EVENT_WIFI_CMD_SCAN_RESULT) |
| |
| #define NET_EVENT_WIFI_SCAN_DONE \ |
| (_NET_WIFI_EVENT | NET_EVENT_WIFI_CMD_SCAN_DONE) |
| |
| #define NET_EVENT_WIFI_CONNECT_RESULT \ |
| (_NET_WIFI_EVENT | NET_EVENT_WIFI_CMD_CONNECT_RESULT) |
| |
| #define NET_EVENT_WIFI_DISCONNECT_RESULT \ |
| (_NET_WIFI_EVENT | NET_EVENT_WIFI_CMD_DISCONNECT_RESULT) |
| |
| |
| /* Each result is provided to the net_mgmt_event_callback |
| * via its info attribute (see net_mgmt.h) |
| */ |
| struct wifi_scan_result { |
| uint8_t ssid[WIFI_SSID_MAX_LEN]; |
| uint8_t ssid_length; |
| |
| uint8_t channel; |
| enum wifi_security_type security; |
| int8_t rssi; |
| }; |
| |
| struct wifi_connect_req_params { |
| uint8_t *ssid; |
| uint8_t ssid_length; /* Max 32 */ |
| |
| uint8_t *psk; |
| uint8_t psk_length; /* Min 8 - Max 64 */ |
| |
| uint8_t channel; |
| enum wifi_security_type security; |
| }; |
| |
| struct wifi_status { |
| int status; |
| }; |
| |
| #include <net/net_if.h> |
| |
| typedef void (*scan_result_cb_t)(struct net_if *iface, int status, |
| struct wifi_scan_result *entry); |
| |
| struct net_wifi_mgmt_offload { |
| /** |
| * Mandatory to get in first position. |
| * A network device should indeed provide a pointer on such |
| * net_if_api structure. So we make current structure pointer |
| * that can be casted to a net_if_api structure pointer. |
| */ |
| struct net_if_api iface_api; |
| |
| /* cb parameter is the cb that should be called for each |
| * result by the driver. The wifi mgmt part will take care of |
| * raising the necessary event etc... |
| */ |
| int (*scan)(const struct device *dev, scan_result_cb_t cb); |
| int (*connect)(const struct device *dev, |
| struct wifi_connect_req_params *params); |
| int (*disconnect)(const struct device *dev); |
| int (*ap_enable)(const struct device *dev, |
| struct wifi_connect_req_params *params); |
| int (*ap_disable)(const struct device *dev); |
| }; |
| |
| /* Make sure that the network interface API is properly setup inside |
| * Wifi mgmt offload API struct (it is the first one). |
| */ |
| BUILD_ASSERT(offsetof(struct net_wifi_mgmt_offload, iface_api) == 0); |
| |
| #ifdef CONFIG_WIFI_OFFLOAD |
| |
| void wifi_mgmt_raise_connect_result_event(struct net_if *iface, int status); |
| void wifi_mgmt_raise_disconnect_result_event(struct net_if *iface, int status); |
| |
| #endif /* CONFIG_WIFI_OFFLOAD */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_INCLUDE_NET_WIFI_MGMT_H_ */ |