|  | /* | 
|  | * 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_ */ |