155 lines
4.0 KiB
C
155 lines
4.0 KiB
C
/*
|
|
* 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_ */
|