4148 lines
146 KiB
C
4148 lines
146 KiB
C
/*******************************************************************************
|
|
File Name:
|
|
m2m_wifi.h
|
|
|
|
Summary:
|
|
WINC3400 WLAN Application Interface
|
|
|
|
Description:
|
|
WINC3400 WLAN Application Interface
|
|
*******************************************************************************/
|
|
|
|
//DOM-IGNORE-BEGIN
|
|
/*******************************************************************************
|
|
* Copyright (C) 2021 Microchip Technology Inc. and its subsidiaries.
|
|
*
|
|
* Subject to your compliance with these terms, you may use Microchip software
|
|
* and any derivatives exclusively with Microchip products. It is your
|
|
* responsibility to comply with third party license terms applicable to your
|
|
* use of third party software (including open source software) that may
|
|
* accompany Microchip software.
|
|
*
|
|
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
|
* EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
|
|
* WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
|
|
* PARTICULAR PURPOSE.
|
|
*
|
|
* IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
|
* INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
|
* WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
|
|
* BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
|
|
* FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN
|
|
* ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
|
|
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
|
|
*******************************************************************************/
|
|
//DOM-IGNORE-END
|
|
|
|
/** @defgroup m2m_wifi WLAN
|
|
@{
|
|
@defgroup WLANCallbacks Callbacks
|
|
@brief
|
|
Provides detail on the available callbacks for the Wlan APIs.
|
|
@defgroup WlanDefines Defines
|
|
@brief
|
|
Specifies the macros and defines used by the Wlan APIs.
|
|
@defgroup WlanEnums Enumerations and Typedefs
|
|
@brief
|
|
Specifies the enums and Data Structures used by the Wlan APIs.
|
|
@defgroup WLANAPI Functions
|
|
@brief
|
|
Here are listed all the functions that implement the Wlan APIs.
|
|
@{
|
|
@defgroup WLANINIT Initialization
|
|
@brief
|
|
Here are listed all the functions that implement the Wlan Initialization APIs.
|
|
@defgroup WLANEVTS Wlan Events
|
|
@brief
|
|
Here are listed all the functions that implement the Wlan Events APIs.
|
|
@defgroup WLANCONNECT Connection
|
|
@brief
|
|
Here are listed all the functions that implement the Wifi Connection APIs.
|
|
@defgroup WLANSCAN Scanning
|
|
@brief
|
|
Here are listed all the functions that implement the Wifi Scanning APIs.
|
|
@defgroup WLANAP Hot-Spot (Access-Point)
|
|
@brief
|
|
Here are listed all the functions that implement the Wifi Hot-Spot (Access-Point) APIs.
|
|
@defgroup WLANETH Bypass Mode
|
|
@brief
|
|
Here are listed all the functions that implement the Bypass Mode APIs.
|
|
@defgroup WLANROAMING Roaming
|
|
@brief
|
|
Here are listed all the functions that implement the Wifi Roaming APIs.
|
|
@defgroup WLANPS Power Save
|
|
@brief
|
|
Here are listed all the functions that implement the Power-Save APIs.
|
|
@defgroup WLANCONF Configuration
|
|
@brief
|
|
Here are listed all the functions that implement the Wlan Configuration APIs.
|
|
@defgroup WLANTIME System Time
|
|
@brief
|
|
Here are listed all the functions that implement the System Time APIs.
|
|
@defgroup WLANPROVISION Provisioning
|
|
@brief
|
|
Here are listed all the functions that implement the Wifi Provisioning APIs.
|
|
@defgroup WLANCRYPTO Crypto
|
|
@brief
|
|
Here are listed all the functions that implement the Wifi Crypto APIs.
|
|
@cond P2P_DOC
|
|
@defgroup WLANP2P P2P
|
|
@brief
|
|
Here are listed all the functions that implement the Wifi P2P APIs.
|
|
@endcond
|
|
@cond MON_DOC
|
|
@defgroup WLANMON Monitoring Mode
|
|
@brief
|
|
Here are listed all the functions that implement the Wifi Monitoring Mode APIs.
|
|
@endcond
|
|
@defgroup BLEAPI BLE
|
|
@brief
|
|
Here are listed all the functions that implement the BLE APIs.
|
|
@}
|
|
@}
|
|
*/
|
|
|
|
#ifndef __M2M_WIFI_H__
|
|
#define __M2M_WIFI_H__
|
|
|
|
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
|
|
INCLUDES
|
|
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
|
|
|
|
#include "nm_common.h"
|
|
#include "m2m_types.h"
|
|
#include "nmdrv.h"
|
|
|
|
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
|
|
Callbacks
|
|
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
|
|
|
|
/**@addtogroup WLANCallbacks
|
|
* @{
|
|
*/
|
|
/*!
|
|
@typedef void (*tpfAppWifiCb)(uint8_t u8MsgType, void* pvMsg);
|
|
|
|
@brief
|
|
This is the main callback function for the Wi-Fi driver and is responsible for processing
|
|
any M2M_WIFI events that are received on the Wi-Fi interface.
|
|
These events (notifications) are usually received in response to earlier Wi-Fi requests such
|
|
as @ref m2m_wifi_request_scan, @ref m2m_wifi_connect_open, @ref m2m_wifi_get_connection_info
|
|
@ref m2m_wifi_req_curr_rssi, @ref m2m_wifi_get_system_time, etc.
|
|
|
|
Most Wi-Fi APIs are implemented in an asynchronous mode and calling them generates information
|
|
that is then passed back to the application via this callback. For instance, a set of detected
|
|
networks to be passed back as a result to a call to @ref m2m_wifi_request_scan.
|
|
|
|
Applications must ensure a callback function is registered with the Wi-Fi driver by
|
|
calling @ref m2m_wifi_init.
|
|
@param[in] u8MsgType
|
|
Type of notification. Possible types are:
|
|
- @ref M2M_WIFI_RESP_CON_STATE_CHANGED
|
|
- @ref M2M_WIFI_RESP_CONN_INFO
|
|
- @ref M2M_WIFI_REQ_DHCP_CONF
|
|
- @ref M2M_WIFI_REQ_WPS
|
|
- @ref M2M_WIFI_RESP_IP_CONFLICT
|
|
- @ref M2M_WIFI_RESP_SCAN_DONE
|
|
- @ref M2M_WIFI_RESP_SCAN_RESULT
|
|
- @ref M2M_WIFI_RESP_CURRENT_RSSI
|
|
- @ref M2M_WIFI_RESP_CLIENT_INFO
|
|
- @ref M2M_WIFI_RESP_PROVISION_INFO
|
|
- @ref M2M_WIFI_RESP_DEFAULT_CONNECT
|
|
- @ref M2M_WIFI_RESP_ETHERNET_RX_PACKET (If Bypass mode is active)
|
|
- @ref M2M_WIFI_RESP_WIFI_RX_PACKET (If monitoring mode is active)
|
|
|
|
@param[in] pvMsg
|
|
A pointer to a buffer containing the notification parameters (if any).
|
|
It should be cast to the correct data type corresponding to the notification type.
|
|
|
|
@see
|
|
tstrM2mWifiStateChanged
|
|
tstrM2MWPSInfo
|
|
tstrM2mScanDone
|
|
tstrM2mWifiscanResult
|
|
m2m_wifi_init
|
|
*/
|
|
typedef void (*tpfAppWifiCb)(uint8_t u8MsgType, const void *const pvMsg);
|
|
|
|
/*!
|
|
@typedef void (*tpfAppEthCb)(uint8_t u8MsgType, void* pvMsg, void* pvCtrlBuf);
|
|
|
|
@brief
|
|
Ethernet (Bypass mode) notification callback function receiving Bypass mode events as
|
|
defined in the Wi-Fi responses enumeration @ref tenuM2mStaCmd.
|
|
|
|
If bypass mode is enabled, applications must ensure this callback function is registered
|
|
with the Wi-Fi driver by calling @ref m2m_wifi_init.
|
|
|
|
@param[in] u8MsgType
|
|
Type of notification. Possible types are:
|
|
- @ref M2M_WIFI_RESP_ETHERNET_RX_PACKET
|
|
|
|
@param[in] pvMsg
|
|
A pointer to a buffer containing the notification parameters (if any).
|
|
It should be cast to the correct data type corresponding to the notification type.
|
|
|
|
For example, it could be a pointer to the buffer holding the received frame in case
|
|
a @ref M2M_WIFI_RESP_ETHERNET_RX_PACKET event is received.
|
|
|
|
@param[in] pvControlBuf
|
|
A pointer to control buffer describing the accompanied message.
|
|
This must be cast to the data type @ref tstrM2mIpCtrlBuf in case of @ref M2M_WIFI_RESP_ETHERNET_RX_PACKET event.
|
|
|
|
@warning
|
|
Make sure that the application defines ETH_MODE.
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
*/
|
|
typedef void (*tpfAppEthCb) (uint8_t u8MsgType, const void *const pvMsg,const void *const pvCtrlBuf);
|
|
|
|
/**@cond MON_DOC
|
|
*/
|
|
/*!
|
|
@typedef void (*tpfAppMonCb)(tstrM2MWifiRxPacketInfo* pstrWifiRxPacket, uint8_t* pu8Payload, uint16_t u16PayloadSize);
|
|
|
|
@brief
|
|
Wi-Fi monitoring mode callback function. This function delivers all received wi-Fi packets
|
|
to the application. Applications requiring to operate in monitoring mode need to call the
|
|
function @ref m2m_wifi_enable_monitoring_mode, in which, each Wi-Fi frame received will invoke
|
|
a single call to this callback function.
|
|
Monitoring mode may be disabled by calling @ref m2m_wifi_disable_monitoring_mode.
|
|
|
|
@param[in] pstrWifiRxPacket
|
|
Pointer to a structure holding the Wi-Fi packet header parameters.
|
|
|
|
@param[in] pu8Payload
|
|
Pointer to the buffer holding the Wi-Fi packet payload information required by the application
|
|
starting from the defined OFFSET by the application (when calling @ref m2m_wifi_enable_monitoring_mode).
|
|
Could hold a value of NULL, if the application does not need any data from the payload.
|
|
|
|
@param[in] u16PayloadSize
|
|
The size of the payload in bytes.
|
|
|
|
@see
|
|
m2m_wifi_enable_monitoring_mode,
|
|
m2m_wifi_init
|
|
|
|
@warning
|
|
u16PayloadSize should not exceed the buffer size given through m2m_wifi_enable_monitoring_mode.
|
|
*/
|
|
typedef void (*tpfAppMonCb)(tstrM2MWifiRxPacketInfo *pstrWifiRxPacket, uint8_t *pu8Payload, uint16_t u16PayloadSize);
|
|
/**@endcond*/ //MON_DOC
|
|
/**@}*/ //WLANCallbacks
|
|
|
|
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
|
|
Enums and Data structures
|
|
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
|
|
|
|
/**@addtogroup WlanEnums
|
|
* @{
|
|
*/
|
|
/*!
|
|
@enum \
|
|
tenuWifiState
|
|
@brief
|
|
Enumeration for Wi-Fi state
|
|
The following is used to track the state of the wifi (not initialized, initialized or started)
|
|
|
|
@remarks
|
|
This is useful when putting the WINC in "download mode" to access the flash via SPI. By using
|
|
@ref m2m_wifi_get_state and checking against the desired state, it is possible to validate if
|
|
the Application can proceed with the WINC flash access or not.
|
|
*/
|
|
typedef enum {
|
|
WIFI_STATE_DEINIT,
|
|
/*!< Wifi is not initialized */
|
|
WIFI_STATE_INIT,
|
|
/*!< Wifi has been initialized. WINC flash access is possible via m2m_flash APIs. */
|
|
WIFI_STATE_START,
|
|
/*!< Wifi has started */
|
|
} tenuWifiState;
|
|
|
|
/*!
|
|
@enum \
|
|
tenuCredStoreOption
|
|
@brief
|
|
|
|
@remarks
|
|
|
|
*/
|
|
typedef enum {
|
|
WIFI_CRED_DONTSAVE,
|
|
/*!< Credentials will not be stored in WINC flash. */
|
|
WIFI_CRED_SAVE_UNENCRYPTED,
|
|
/*!< Credentials will be stored unencrypted in WINC flash. */
|
|
WIFI_CRED_SAVE_ENCRYPTED
|
|
/*!< Credentials will be stored encrypted in WINC flash.
|
|
The encryption is not secure; it is merely intended to prevent sensitive information
|
|
being leaked by an opportunistic read of WINC flash contents.
|
|
The encryption keys involve WINC efuse contents, so WINC efuses should not be written
|
|
while this option is in use. */
|
|
} tenuCredStoreOption;
|
|
|
|
/*!
|
|
@enum \
|
|
tenuTlsCertExpSettings
|
|
|
|
@brief TLS Certificate Expiry Validation Options
|
|
|
|
@remarks
|
|
*/
|
|
typedef enum {
|
|
TLS_CERT_EXP_CHECK_DISABLE,
|
|
/*!<
|
|
Certificate expiry is not checked.
|
|
Server authentication does not depend on expiry of certificates.
|
|
*/
|
|
TLS_CERT_EXP_CHECK_ENABLE,
|
|
/*!<
|
|
Certificate expiry is checked and current time is required.
|
|
Server authentication fails if a certificate has expired or the current time is unknown.
|
|
*/
|
|
TLS_CERT_EXP_CHECK_EN_IF_SYS_TIME
|
|
/*!<
|
|
Certificate expiry is only checked if current time is known.
|
|
Server authentication fails if a certificate has expired; passes if the current time is unknown.
|
|
*/
|
|
} tenuTlsCertExpSettings;
|
|
|
|
/*!
|
|
@enum \
|
|
tenu1xOption
|
|
@brief
|
|
|
|
@remarks
|
|
|
|
*/
|
|
typedef enum {
|
|
WIFI_1X_BYPASS_SERVER_AUTH,
|
|
/*!< Server authentication for 802.1x connections. Values are of type int.\n
|
|
0: Authenticate server; Default, Recommended.\n
|
|
1: Bypass server authentication.\n
|
|
*/
|
|
WIFI_1X_TIME_VERIF_MODE,
|
|
/*!< Mode for checking expiry of server certificate chain.
|
|
Values are of type @ref tenuTlsCertExpSettings.
|
|
Default is @ref TLS_CERT_EXP_CHECK_EN_IF_SYS_TIME.
|
|
*/
|
|
WIFI_1X_SESSION_CACHING,
|
|
/*!< TLS session caching on/off for 802.1x connections. Values are of type int.\n
|
|
0: Session caching off.\n
|
|
1: Session caching on; Default.\n
|
|
Note that the WINC implementation of PEAPv0 does not support session caching; this setting is ignored for PEAPv0 methods.
|
|
*/
|
|
WIFI_1X_SPECIFIC_ROOTCERT,
|
|
/*!< SHA1 digest of subject name of the root certificate to be used during server authentication. Values are:\n
|
|
20-byte arrays: authentication is limited to this particular root certificate; Recommended\n
|
|
0-byte array: authentication can succeed with any certificate in the WINC root certificate store; Default.\n
|
|
*/
|
|
} tenu1xOption;
|
|
|
|
/*!
|
|
@struct \
|
|
tstrEthInitParam
|
|
|
|
@brief
|
|
Structure to hold Ethernet interface parameters.
|
|
Structure is to be defined and have its attributes set, based on the application's functionality
|
|
before a call is made to initialize the wi-fi operations by calling the
|
|
@ref m2m_wifi_init function.
|
|
Part of the wi-fi configuration structure @ref tstrWifiInitParam.
|
|
Applications shouldn't need to define this structure, if the bypass mode is not defined.
|
|
|
|
@see
|
|
tpfAppEthCb
|
|
tpfAppWifiCb
|
|
m2m_wifi_init
|
|
|
|
@warning
|
|
Make sure that application defines ETH_MODE before using @ref tstrEthInitParam.
|
|
*/
|
|
typedef struct {
|
|
tpfAppEthCb pfAppEthCb; /*!< Callback for Ethernet interface. */
|
|
uint8_t *au8ethRcvBuf; /*!< Pointer to Receive Buffer of Ethernet Packet */
|
|
uint16_t u16ethRcvBufSize; /*!< Size of Receive Buffer for Ethernet Packet */
|
|
uint8_t u8EthernetEnable; /*!< Enable Ethernet mode flag */
|
|
} tstrEthInitParam;
|
|
|
|
/*!
|
|
@struct \
|
|
tstrM2mIpCtrlBuf
|
|
|
|
@brief
|
|
Structure holding the incoming buffer's data size information, indicating the data size of the
|
|
buffer and the remaining buffer's data size. The data of the buffer which holds the packet sent
|
|
to the host when in the bypass mode, is placed in the @ref tstrEthInitParam::au8ethRcvBuf attribute.
|
|
This following information is retrieved in the host when an event
|
|
@ref M2M_WIFI_RESP_ETHERNET_RX_PACKET is received in the Wi-Fi callback function
|
|
@ref tpfAppWifiCb.
|
|
|
|
The application is expected to use this structure's information to determine if there is still incoming data to be received from the firmware.
|
|
|
|
@see
|
|
tpfAppWifiCb
|
|
tpfAppEthCb
|
|
tstrEthInitParam
|
|
|
|
@warning
|
|
Make sure that ETHERNET/bypass mode is defined before using @ref tstrM2mIpCtrlBuf
|
|
|
|
*/
|
|
typedef struct {
|
|
uint16_t u16DataSize; /*!< Size of the received data in bytes. */
|
|
uint16_t u16RemainingDataSize; /*!< Size of the remaining data bytes to be delivered to host. */
|
|
} tstrM2mIpCtrlBuf;
|
|
|
|
/**
|
|
@struct \
|
|
tstrWifiInitParam
|
|
|
|
@brief
|
|
Structure, holding the Wi-fi configuration attributes such as the wi-fi callback , monitoring mode callback and Ethernet parameter initialization structure.
|
|
Such configuration parameters are required to be set before calling the wi-fi initialization function @ref m2m_wifi_init.
|
|
@ref pfAppWifiCb attribute must be set to handle the wi-fi callback operations.
|
|
@ref pfAppMonCb attribute, is optional based on whether the application requires the monitoring mode configuration, and can there not
|
|
be set before the initialization.
|
|
@ref strEthInitParam structure, is another optional configuration based on whether the bypass mode is set.
|
|
|
|
@see
|
|
tpfAppEthCb
|
|
tpfAppMonCb
|
|
tstrEthInitParam
|
|
*/
|
|
typedef struct {
|
|
tpfAppWifiCb pfAppWifiCb; /*!< Callback for Wi-Fi notifications. */
|
|
tpfAppMonCb pfAppMonCb; /*!< Callback for monitoring interface. */
|
|
tstrEthInitParam strEthInitParam ; /*!< Structure to hold Ethernet interface parameters. */
|
|
uint8_t GainTableIndex; /*!< Gain Table index to be used to configure the WiFi and BLE gains. */
|
|
} tstrWifiInitParam;
|
|
|
|
typedef struct {
|
|
uint8_t *pu8Bssid;
|
|
/*!< Pointer to BSSID (6 bytes). Optional (may be NULL).
|
|
If present, this restricts the connection attempt to APs that have a matching BSSID. */
|
|
uint8_t *pu8Ssid;
|
|
/*!< Pointer to SSID. Required. */
|
|
uint8_t u8SsidLen;
|
|
/*!< Length of SSID in bytes. Permitted values are between 0 and 32. */
|
|
tenuM2mScanCh enuChannel;
|
|
/*!< Wi-Fi channel to connect on.
|
|
If an appropriate AP cannot be found on this channel then connection fails.
|
|
@ref M2M_WIFI_CH_ALL may be used to allow scanning of all channels. */
|
|
} tstrNetworkId;
|
|
|
|
/* Legacy Wep param structure. */
|
|
typedef struct {
|
|
uint8_t u8KeyIndx;
|
|
uint8_t u8KeySz;
|
|
uint8_t au8WepKey[WEP_104_KEY_STRING_SIZE + 1]; // NULL terminated
|
|
uint8_t __PAD24__[3];
|
|
} tstrM2mWifiWepParams;
|
|
|
|
/* Legacy 802.1x MsChapv2 param structure. */
|
|
typedef struct {
|
|
uint8_t au8UserName[21]; // NULL terminated
|
|
uint8_t au8Passwd[41]; // NULL terminated
|
|
} tstr1xAuthCredentials;
|
|
|
|
typedef struct {
|
|
uint8_t *pu8Psk;
|
|
/*!< Pointer to PSK, represented as an ASCII string (64 characters, representing 32 bytes).
|
|
Must be NULL if Passphrase is provided instead. */
|
|
uint8_t *pu8Passphrase;
|
|
/*!< Pointer to Passphrase (Printable ASCII).
|
|
Must be NULL if PSK is provided instead. */
|
|
uint8_t u8PassphraseLen;
|
|
/*!< Length of Passphrase. Permitted values are between 8 and 63.
|
|
This field is ignored if pu8Passphrase == NULL. */
|
|
} tstrAuthPsk;
|
|
|
|
typedef struct {
|
|
uint8_t *pu8WepKey;
|
|
/*!< Pointer to WEP Key, represented as an ASCII string.
|
|
(10 or 26 characters, representing 5 or 13 bytes.) */
|
|
uint8_t u8KeySz;
|
|
/*!< Size of WEP Key string.
|
|
Permitted values are @ref WEP_40_KEY_STRING_SIZE or @ref WEP_104_KEY_STRING_SIZE. */
|
|
uint8_t u8KeyIndx;
|
|
/*!< WEP Key Index in the range 1 to 4. */
|
|
} tstrAuthWep;
|
|
|
|
typedef struct {
|
|
uint8_t *pu8Domain;
|
|
/*!< Pointer to Domain of authentication server (printable ASCII), including '@' or '\'
|
|
separator character as appropriate. Use NULL if there is no domain information.
|
|
The Domain will be either prepended or appended to the UserName, depending on the
|
|
setting of field bPrependDomain. \n
|
|
Example 1: if [Domain] is "@my_domain" and bPrependDomain is false, then the EAP
|
|
identity response is "[UserName]@my_domain". \n
|
|
Example 2: if [Domain] is "my_domain\" and bPrependDomain is true, then the EAP
|
|
identity response is "my_domain\[UserName]". */
|
|
uint8_t *pu8UserName;
|
|
/*!< Pointer to UserName (ASCII).
|
|
This will be sent (encrypted) in the tunneled EAP identity response (if applicable)
|
|
and used during MSCHAPv2 authentication. If bUnencryptedUserName is true then it will
|
|
also be sent (unencrypted) in the initial EAP identity response. */
|
|
uint8_t *pu8Password;
|
|
/*!< Pointer to MSCHAPv2 Password (ASCII).
|
|
This will be used during MSCHAPv2 authentication. */
|
|
uint16_t u16DomainLen;
|
|
/*!< Length of Domain (in ASCII characters), including '@' or '\' separator character as
|
|
appropriate.
|
|
Permitted values are such that u16DomainLen + u16UserNameLen is between 0 and
|
|
@ref M2M_AUTH_1X_USER_LEN_MAX. */
|
|
uint16_t u16UserNameLen;
|
|
/*!< Length of UserName (in ASCII characters).
|
|
Permitted values are such that u16DomainLen + u16UserNameLen is between 0 and
|
|
@ref M2M_AUTH_1X_USER_LEN_MAX. */
|
|
uint16_t u16PasswordLen;
|
|
/*!< Length of Password (in ASCII characters).
|
|
Permitted values are between 0 and @ref M2M_AUTH_1X_PASSWORD_LEN_MAX. */
|
|
bool bUnencryptedUserName;
|
|
/*!< Determines whether UserName or "anonymous" is sent (unencrypted) in the initial EAP
|
|
identity response. Domain is sent in both cases. \n
|
|
true: UserName is sent in the initial EAP identity response (not recommended).
|
|
false: "anonymous" is sent in the initial EAP identity response. This setting is
|
|
recommended for tunneled methods. MSCHAPv2 is always a tunneled method. */
|
|
bool bPrependDomain;
|
|
/*!< Determines whether Domain is prepended or appended to UserName in EAP identity responses.
|
|
true: Domain is prepended to UserName - [Domain][UserName].
|
|
false: Domain is appended to UserName - [UserName][Domain]. */
|
|
} tstrAuth1xMschap2;
|
|
|
|
typedef struct {
|
|
uint8_t *pu8Domain;
|
|
/*!< Pointer to Domain of authentication server (printable ASCII), including '@' or '\'
|
|
separator character as appropriate. Use NULL if there is no domain information.
|
|
The Domain will be either prepended or appended to the UserName, depending on the
|
|
setting of field bPrependDomain. \n
|
|
Example 1: if [Domain] is "@my_domain" and bPrependDomain is false, then the EAP
|
|
identity response is "[UserName]@my_domain". \n
|
|
Example 2: if [Domain] is "my_domain\" and bPrependDomain is true, then the EAP
|
|
identity response is "my_domain\[UserName]". */
|
|
uint8_t *pu8UserName;
|
|
/*!< Pointer to UserName (ASCII).
|
|
This will be sent (encrypted) in the tunneled EAP identity response.
|
|
If bUnencryptedUserName is true then it will also be sent (unencrypted) in the initial
|
|
EAP identity response. */
|
|
uint8_t *pu8PrivateKey_Mod;
|
|
/*!< Pointer to PrivateKey modulus (raw data).
|
|
This will be used during TLS client authentication. */
|
|
uint8_t *pu8PrivateKey_Exp;
|
|
/*!< Pointer to PrivateKey exponent (raw data).
|
|
This will be used during TLS client authentication. */
|
|
uint8_t *pu8Certificate;
|
|
/*!< Pointer to TLS client certificate corresponding to PrivateKey.
|
|
This will be used during TLS client authentication. */
|
|
uint16_t u16DomainLen;
|
|
/*!< Length of Domain (in ASCII characters), including '@' or '\' separator character as
|
|
appropriate.
|
|
Permitted values are such that u16DomainLen + u16UserNameLen is between 0 and
|
|
@ref M2M_AUTH_1X_USER_LEN_MAX. */
|
|
uint16_t u16UserNameLen;
|
|
/*!< Length of UserName (in ASCII characters).
|
|
Permitted values are such that u16DomainLen + u16UserNameLen is between 0 and
|
|
@ref M2M_AUTH_1X_USER_LEN_MAX. */
|
|
uint16_t u16PrivateKeyLen;
|
|
/*!< Length of PrivateKey_Mod (in bytes).
|
|
Permitted values are between 0 and @ref M2M_AUTH_1X_PRIVATEKEY_LEN_MAX, typically 128 or 256.
|
|
PrivateKey_Exp must be the same length as modulus, pre-padded with 0s if necessary. */
|
|
uint16_t u16CertificateLen;
|
|
/*!< Length of Certificate (in bytes).
|
|
Permitted values are between 0 and @ref M2M_AUTH_1X_CERT_LEN_MAX. */
|
|
bool bUnencryptedUserName;
|
|
/*!< Determines whether UserName or "anonymous" is sent (unencrypted) in the initial EAP
|
|
identity response. Domain is sent in both cases. \n
|
|
true: UserName is sent in the initial EAP identity response (required for EAP-TLS).
|
|
false: "anonymous" is sent in the initial EAP identity response. This setting is
|
|
recommended for tunneled methods such as EAP-PEAP/TLS. */
|
|
bool bPrependDomain;
|
|
/*!< Determines whether Domain is prepended or appended to UserName in EAP identity responses.
|
|
true: Domain is prepended to UserName - [Domain][UserName].
|
|
false: Domain is appended to UserName - [UserName][Domain]. */
|
|
} tstrAuth1xTls;
|
|
/**@}*/ //WlanEnums
|
|
|
|
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
|
|
FUNCTION PROTOTYPES
|
|
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
void m2m_wifi_download_mode(void);
|
|
|
|
@brief
|
|
Prepares the WINC before downloading any data (Firmware, Certificates, etc).
|
|
|
|
@details
|
|
This function should be called before attempting to download any data to the WINC.
|
|
Performs the appropriate WINC driver initialization, this includes bus initialization,
|
|
interrupt enabling and it halts the chip to allow for the firmware downloads. Firmware
|
|
can be downloaded through a number of interfaces, UART, I2C and SPI.
|
|
|
|
@pre
|
|
Prior to call m2m_wifi_download_mode, the Application should ensure that the wifi is not
|
|
initialized. This can be done by calling @ref m2m_wifi_get_state and in case the wifi state
|
|
differs from @ref WIFI_STATE_DEINIT, a @ref m2m_wifi_deinit needs to be issued.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_download_mode(void);
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
int8_t m2m_wifi_init(tstrWifiInitParam * pWifiInitParam);
|
|
|
|
@brief
|
|
Synchronous API to initialize the WINC driver.
|
|
|
|
@details
|
|
This function initializes the WINC driver by registering the callback function for the M2M_WIFI layer
|
|
(also the callback function for bypass mode/monitoring mode if defined), initializing the host
|
|
interface layer and the bus interfaces. Wi-Fi callback registering is essential to allow the
|
|
handling of the events received, in response to the asynchronous Wi-Fi operations.
|
|
|
|
The possible Wi-Fi events that are expected to be received through the callback
|
|
function (provided by the application) to the M2M_WIFI layer are listed below:
|
|
|
|
- @ref M2M_WIFI_RESP_CON_STATE_CHANGED
|
|
- @ref M2M_WIFI_RESP_CONN_INFO
|
|
- @ref M2M_WIFI_REQ_DHCP_CONF
|
|
- @ref M2M_WIFI_REQ_WPS
|
|
- @ref M2M_WIFI_RESP_IP_CONFLICT
|
|
- @ref M2M_WIFI_RESP_SCAN_DONE
|
|
- @ref M2M_WIFI_RESP_SCAN_RESULT
|
|
- @ref M2M_WIFI_RESP_CURRENT_RSSI
|
|
- @ref M2M_WIFI_RESP_CLIENT_INFO
|
|
- @ref M2M_WIFI_RESP_PROVISION_INFO
|
|
- @ref M2M_WIFI_RESP_DEFAULT_CONNECT
|
|
- @ref M2M_WIFI_RESP_ETHERNET_RX_PACKET (if bypass mode is enabled)
|
|
- @ref M2M_WIFI_RESP_WIFI_RX_PACKET (if monitoring mode is enabled)
|
|
|
|
Any application using the WINC driver must call this function at the start of its main function.
|
|
|
|
@param[in] pWifiInitParam
|
|
This is a pointer to a variable of type @ref tstrWifiInitParam which contains pointers to the
|
|
application WIFI layer callback function, monitoring mode callback and @ref tstrEthInitParam
|
|
structure (which contains initialization settings for bypass mode).
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
|
|
|
|
@pre
|
|
Prior to this function call, the application should initialize the BSP using @ref nm_bsp_init.
|
|
Also, the application must provide a callback function responsible for receiving all the
|
|
wi-fi events that are received on the M2M_WIFI layer.
|
|
|
|
@warning
|
|
Failure to successfully complete indicates that the driver could not be initialized and
|
|
a fatal error will prevent the application from proceeding, proper error handling should be
|
|
implemented by the application.
|
|
|
|
@see
|
|
m2m_wifi_deinit
|
|
m2m_wifi_init_hold
|
|
m2m_wifi_init_start
|
|
m2m_wifi_reinit
|
|
m2m_wifi_reinit_hold
|
|
m2m_wifi_reinit_start
|
|
m2m_wifi_download_mode
|
|
tstrWifiInitParam
|
|
tenuM2mStaCmd
|
|
*/
|
|
int8_t m2m_wifi_init(tstrWifiInitParam *pWifiInitParam);
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
int8_t m2m_wifi_deinit(void * arg);
|
|
|
|
@brief
|
|
Synchronous API to de-initialize the WINC driver and host interface.
|
|
|
|
@details
|
|
De-initialization function for the WINC driver.
|
|
De-initializes the host interface and frees any resources used by the M2M_WIFI layer.
|
|
This function must be called in the application closing phase to ensure that all
|
|
resources have been correctly released.
|
|
|
|
@param[in] arg
|
|
Opaque argument, not used in current implementation. Application should use null.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC,
|
|
and a negative value otherwise.
|
|
|
|
@note
|
|
This function must be called at the de-initialization stage of the application.
|
|
Generally this function should be the last function before switching off the chip
|
|
and it should be followed only by @ref nm_bsp_deinit function call.
|
|
Every function call of @ref m2m_wifi_init should be matched with a call to m2m_wifi_deinit.
|
|
|
|
@see
|
|
nm_bsp_deinit
|
|
m2m_wifi_init
|
|
m2m_wifi_init_hold
|
|
m2m_wifi_init_start
|
|
m2m_wifi_reinit
|
|
m2m_wifi_reinit_hold
|
|
m2m_wifi_reinit_start
|
|
m2m_wifi_download_mode
|
|
m2m_wifi_download_mode
|
|
*/
|
|
int8_t m2m_wifi_deinit(void *arg);
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
int8_t m2m_wifi_init_hold(void);
|
|
|
|
@brief
|
|
First part of @ref m2m_wifi_init, up to the point of initializing SPI for flash access.
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
m2m_wifi_deinit
|
|
m2m_wifi_init_start
|
|
m2m_wifi_reinit
|
|
m2m_wifi_reinit_hold
|
|
m2m_wifi_reinit_start
|
|
m2m_wifi_download_mode
|
|
*/
|
|
int8_t m2m_wifi_init_hold(void);
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
int8_t m2m_wifi_init_start(tstrWifiInitParam *pWifiInitParam);
|
|
|
|
@brief
|
|
Second part of @ref m2m_wifi_init, continuing from where @ref m2m_wifi_init_hold left off.
|
|
|
|
@param[in] pWifiInitParam
|
|
This is a pointer to a variable of type @ref tstrWifiInitParam which contains pointers to the
|
|
application WIFI layer callback function (see @ref tpfAppWifiCb), monitoring mode callback
|
|
(see @ref tpfAppEthCb) and @ref tstrEthInitParam structure (which contains initialization
|
|
settings for bypass mode).
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
m2m_wifi_deinit
|
|
m2m_wifi_init_hold
|
|
m2m_wifi_reinit
|
|
m2m_wifi_reinit_hold
|
|
m2m_wifi_reinit_start
|
|
m2m_wifi_download_mode
|
|
tstrWifiInitParam
|
|
*/
|
|
int8_t m2m_wifi_init_start(tstrWifiInitParam *pWifiInitParam);
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
int8_t m2m_wifi_reinit(tstrWifiInitParam *pWifiInitParam);
|
|
|
|
@brief
|
|
De-initialize and then initialize wifi. Resets the WINC.
|
|
|
|
@param[in] pWifiInitParam
|
|
This is a pointer to a variable of type @ref tstrWifiInitParam which contains pointers to the
|
|
application WIFI layer callback function (see @ref tpfAppWifiCb), monitoring mode callback
|
|
(see @ref tpfAppEthCb) and @ref tstrEthInitParam structure (which contains initialization
|
|
settings for bypass mode).
|
|
|
|
@note
|
|
m2m_wifi_reinit wraps a call to @ref m2m_wifi_deinit and to @ref m2m_wifi_init.
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
m2m_wifi_deinit
|
|
m2m_wifi_init_hold
|
|
m2m_wifi_init_start
|
|
m2m_wifi_reinit_hold
|
|
m2m_wifi_reinit_start
|
|
m2m_wifi_download_mode
|
|
tstrWifiInitParam
|
|
*/
|
|
int8_t m2m_wifi_reinit(tstrWifiInitParam *pWifiInitParam);
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
int8_t m2m_wifi_reinit_hold(void);
|
|
|
|
@brief
|
|
First part of @ref m2m_wifi_reinit, up to the point of initializing SPI for flash access.
|
|
|
|
@note
|
|
m2m_wifi_reinit_hold wraps a call to @ref m2m_wifi_deinit and to @ref m2m_wifi_init_hold.
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
m2m_wifi_deinit
|
|
m2m_wifi_init_hold
|
|
m2m_wifi_init_start
|
|
m2m_wifi_reinit
|
|
m2m_wifi_reinit_start
|
|
m2m_wifi_download_mode
|
|
*/
|
|
int8_t m2m_wifi_reinit_hold(void);
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
int8_t m2m_wifi_reinit_start(tstrWifiInitParam *pWifiInitParam);
|
|
|
|
@brief
|
|
Second part of @ref m2m_wifi_reinit, continuing from where m2m_wifi_reinit_hold left off.
|
|
|
|
@param[in] pWifiInitParam
|
|
This is a pointer to the @ref tstrWifiInitParam structure which contains pointers to the
|
|
application WIFI layer callback function (see @ref tpfAppWifiCb), monitoring mode callback
|
|
(see @ref tpfAppEthCb) and @ref tstrEthInitParam structure (which contains initialization
|
|
settings for bypass mode).
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
m2m_wifi_deinit
|
|
m2m_wifi_init_hold
|
|
m2m_wifi_init_start
|
|
m2m_wifi_reinit
|
|
m2m_wifi_reinit_hold
|
|
m2m_wifi_download_mode
|
|
tstrWifiInitParam
|
|
*/
|
|
int8_t m2m_wifi_reinit_start(tstrWifiInitParam *pWifiInitParam);
|
|
|
|
/*!
|
|
@ingroup WLANEVTS
|
|
@fn \
|
|
int8_t m2m_wifi_handle_events(void);
|
|
|
|
@brief
|
|
Synchronous M2M event handler function.
|
|
|
|
@details
|
|
This function is responsible for handling interrupts received from the WINC firmware.
|
|
Applications should call this function periodically in-order to receive the events that are to
|
|
be handled by the callback functions implemented by the application.
|
|
|
|
Handle the various events received from the WINC.
|
|
Whenever an event happens in the WINC (e.g. Connection, Disconnection, DHCP, etc),
|
|
the WINC will interrupt the host to let it know that a new event has occurred. The host driver
|
|
will attempt to handle these events whenever the application decides to do so by calling
|
|
the m2m_wifi_handle_events function.
|
|
It is mandatory to call this function periodically and independently of any other condition.
|
|
It is ideal to include this function in the main and the most frequent loop of the
|
|
host application.
|
|
|
|
@pre
|
|
Prior to receiving events, the WINC driver should have been successfully initialized by calling the @ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
Failure to successfully complete this function indicates bus errors and hence a fatal error that will prevent the application from proceeding.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful interrupt handling and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_handle_events(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_delete_sc(char *pcSsid, uint8_t u8SsidLen);
|
|
|
|
@brief
|
|
Asynchronous API that deletes connection credentials (PSK, WEP key, 802.1X password) from WINC
|
|
flash. Either deletes all credentials, or for a specific SSID.
|
|
|
|
@details
|
|
Causes WINC to delete connection credentials. If the parameter is NULL, then WINC will delete
|
|
all credentials from flash. Otherwise WINC will only delete credentials for matching SSID.
|
|
Callback will report the status of the operation (success or not).
|
|
|
|
@param[in] pcSsid
|
|
SSID to match on when deleting credentials.
|
|
SSID must not contain '\0'.
|
|
NULL is a valid argument here, in which case all credentials are deleted.
|
|
|
|
@param[in] u8SsidLen
|
|
Length of SSID provided in pcSsid. Must be less than @ref M2M_MAX_SSID_LEN.
|
|
This parameter is ignored if pcSsid is NULL.
|
|
|
|
@pre
|
|
Prior to deleting credentials, the WINC driver should have been successfully initialized by calling the
|
|
@ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
The option to delete for a specific SSID is currently not supported; all credentials are
|
|
deleted regardless of the input parameters.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_delete_sc(char *pcSsid, uint8_t u8SsidLen);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_default_connect(void);
|
|
|
|
@brief
|
|
Asynchronous API that attempts to reconnect to the last-associated access point.
|
|
|
|
@details
|
|
Asynchronous Wi-Fi connection function. An application calling this function will cause
|
|
the firmware to attempt to reconnect to the access point with which it had last successfully connected.
|
|
A failure to connect will result in a response of @ref M2M_WIFI_RESP_DEFAULT_CONNECT
|
|
indicating a connection error as defined in the structure @ref tstrM2MDefaultConnResp.
|
|
|
|
Possible errors are:
|
|
@ref M2M_DEFAULT_CONN_EMPTY_LIST indicating that the connection list is empty, or
|
|
@ref M2M_DEFAULT_CONN_SCAN_MISMATCH indicating a mismatch for the saved AP name.
|
|
|
|
@pre
|
|
Prior to connecting, the WINC driver should have been successfully initialized by calling the
|
|
@ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
This function must be called in station mode only.
|
|
It is important to note that successful completion of a call to m2m_wifi_default_connect
|
|
does not guarantee success of the WIFI connection; a negative return value indicates only
|
|
locally-detected errors.
|
|
|
|
@see
|
|
m2m_wifi_connect
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_default_connect(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_connect_open(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId);
|
|
|
|
@brief
|
|
Asynchronous API to connect to an access point using open authentication.
|
|
|
|
@details
|
|
Asynchronous Wi-Fi connection function. An application calling this function will cause the
|
|
firmware to attempt to connect to an access point matching the details in pstrNetworkId, with
|
|
open authentication.
|
|
On successful connection, the connection details may be saved in WINC flash, according to
|
|
the option selected in enuCredStoreOption.
|
|
Once connection has been attempted (whether successful or otherwise), a response event
|
|
@ref M2M_WIFI_RESP_CON_STATE_CHANGED will be sent to the callback function @ref tpfAppWifiCb
|
|
provided during initialization @ref m2m_wifi_init.
|
|
|
|
Possible results indicated by the response event are:
|
|
- @ref M2M_WIFI_DISCONNECTED if the connection attempt failed.
|
|
- @ref M2M_WIFI_CONNECTED if the connection attempt succeeded.
|
|
|
|
@pre
|
|
Prior to attempting connection, the WINC driver must have been initialized by calling the
|
|
@ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
This function is handled in station mode only.
|
|
|
|
@param[in] enuCredStoreOption
|
|
Option to specify whether connection details (i.e. the contents of pstrNetworkId) are stored in
|
|
WINC flash and, if so, whether they are encrypted before storing.
|
|
|
|
@param[in] pstrNetworkId
|
|
Structure specifying SSID/BSSID and Wi-Fi channel.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the connect request has been successfully passed to the firmware and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_connect_open(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_connect_wep(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId, tstrAuthWep *pstrAuthWep);
|
|
|
|
@brief
|
|
Asynchronous API to connect to an access point using WEP authentication.
|
|
|
|
@details
|
|
Asynchronous Wi-Fi connection function. An application calling this function will cause the
|
|
firmware to attempt to connect to an access point matching the details in pstrNetworkId, with
|
|
the WEP key provided in pstrAuthWep.
|
|
On successful connection, the connection details may be saved in WINC flash, according to
|
|
the option selected in enuCredStoreOption.
|
|
Once connection has been attempted (whether successful or otherwise), a response event
|
|
@ref M2M_WIFI_RESP_CON_STATE_CHANGED will be sent to the callback function @ref tpfAppWifiCb
|
|
provided during initialization @ref m2m_wifi_init.
|
|
|
|
Possible results indicated by the response event are:
|
|
- @ref M2M_WIFI_DISCONNECTED if the connection attempt failed.
|
|
- @ref M2M_WIFI_CONNECTED if the connection attempt succeeded.
|
|
|
|
@pre
|
|
Prior to attempting connection, the WINC driver must have been initialized by calling the
|
|
@ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
This function is handled in station mode only.
|
|
|
|
@param[in] enuCredStoreOption
|
|
Option to specify whether connection details (i.e. the contents of pstrNetworkId and pstrAuthWep) are stored in
|
|
WINC flash and, if so, whether they are encrypted before storing.
|
|
|
|
@param[in] pstrNetworkId
|
|
Structure specifying SSID/BSSID and Wi-Fi channel.
|
|
|
|
@param[in] pstrAuthWep
|
|
Structure specifying the WEP key.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the connect request has been successfully passed to the firmware and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_connect_wep(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId, tstrAuthWep *pstrAuthWep);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_connect_psk(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId, tstrAuthPsk *pstrAuthPsk);
|
|
|
|
@brief
|
|
Asynchronous API to connect to an access point using WPA(2) PSK authentication.
|
|
|
|
@details
|
|
Asynchronous Wi-Fi connection function. An application calling this function will cause the
|
|
firmware to attempt to connect to an access point matching the details in pstrNetworkId, with
|
|
the PSK passphrase provided in pstrAuthPsk.
|
|
On successful connection, the connection details may be saved in WINC flash, according to
|
|
the option selected in enuCredStoreOption.
|
|
Once connection has been attempted (whether successful or otherwise), a response event
|
|
@ref M2M_WIFI_RESP_CON_STATE_CHANGED will be sent to the callback function @ref tpfAppWifiCb
|
|
provided during initialization @ref m2m_wifi_init.
|
|
|
|
Possible results indicated by the response event are:
|
|
- @ref M2M_WIFI_DISCONNECTED if the connection attempt failed.
|
|
- @ref M2M_WIFI_CONNECTED if the connection attempt succeeded.
|
|
|
|
@pre
|
|
Prior to attempting connection, the WINC driver must have been initialized by calling the
|
|
@ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
This function is handled in station mode only.
|
|
|
|
@param[in] enuCredStoreOption
|
|
Option to specify whether connection details (i.e. the contents of pstrNetworkId and pstrAuthPsk) are stored in
|
|
WINC flash and, if so, whether they are encrypted before storing.
|
|
|
|
@param[in] pstrNetworkId
|
|
Structure specifying SSID/BSSID and Wi-Fi channel.
|
|
|
|
@param[in] pstrAuthPsk
|
|
Structure specifying the Passphrase/PSK.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the connect request has been successfully passed to the firmware and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_connect_psk(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId, tstrAuthPsk *pstrAuthPsk);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_1x_set_option(tenu1xOption enuOptionName, const void *pOptionValue, size_t OptionLen);
|
|
|
|
@brief
|
|
API to set (write) options relating to Wi-Fi connection using WPA(2) Enterprise authentication.
|
|
|
|
@details
|
|
The following options can be set:\n
|
|
@ref WIFI_1X_BYPASS_SERVER_AUTH\n
|
|
@ref WIFI_1X_TIME_VERIF_MODE\n
|
|
@ref WIFI_1X_SESSION_CACHING\n
|
|
@ref WIFI_1X_SPECIFIC_ROOTCERT\n
|
|
The setting applies to all subsequent connection attempts via @ref m2m_wifi_connect_1x_mschap2
|
|
or @ref m2m_wifi_connect_1x_tls.\n
|
|
Connection attempts via @ref m2m_wifi_default_connect use the
|
|
settings which were in place at the time of the original connection.
|
|
|
|
@param[in] enuOptionName
|
|
The option to set.
|
|
|
|
@param[in] pOptionValue
|
|
Pointer to a buffer containing the value to set. The buffer must be at least as long as OptionLen.
|
|
If OptionLen is 0, then pOptionValue may be NULL.
|
|
|
|
@param[in] OptionLen
|
|
The length of the option value being set.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the parameters are valid and @ref M2M_ERR_INVALID_ARG otherwise.
|
|
*/
|
|
int8_t m2m_wifi_1x_set_option(tenu1xOption enuOptionName, const void *pOptionValue, size_t OptionLen);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_1x_get_option(tenu1xOption enuOptionName, void *pOptionValue, size_t *pOptionLen);
|
|
|
|
@brief
|
|
API to get (read) options relating to Wi-Fi connection using WPA(2) Enterprise authentication.
|
|
|
|
@details
|
|
The following options can be read:\n
|
|
@ref WIFI_1X_BYPASS_SERVER_AUTH\n
|
|
@ref WIFI_1X_TIME_VERIF_MODE\n
|
|
@ref WIFI_1X_SESSION_CACHING\n
|
|
@ref WIFI_1X_SPECIFIC_ROOTCERT\n
|
|
|
|
@param[in] enuOptionName
|
|
The option to get.
|
|
|
|
@param[out] pOptionValue
|
|
Pointer to a buffer to be filled with the value being read. The buffer must be at least as long as the length in pOptionLen
|
|
|
|
@param[inout] pOptionLen
|
|
Pointer to a length.
|
|
When calling the function, this length must be the length of the buffer available for reading the option value.
|
|
When the function returns, this length is the length of the data that has been populated by the function.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the parameters are valid and @ref M2M_ERR_INVALID_ARG otherwise.
|
|
*/
|
|
int8_t m2m_wifi_1x_get_option(tenu1xOption enuOptionName, void *pOptionValue, size_t *pOptionLen);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_connect_1x_mschap2(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId, tstrAuth1xMschap2 *pstrAuth1xMschap2);
|
|
|
|
@brief
|
|
Asynchronous API to connect to an access point using WPA(2) Enterprise authentication with
|
|
MS-CHAP-V2 credentials.
|
|
|
|
@details
|
|
Asynchronous Wi-Fi connection function. An application calling this function will cause the
|
|
firmware to attempt to connect to an access point matching the details in pstrNetworkId, with
|
|
the Enterprise MS-CHAP-V2 credentials provided in pstrAuth1xMschap2.
|
|
On successful connection, the connection details may be saved in WINC flash, according to
|
|
the option selected in enuCredStoreOption.
|
|
Once connection has been attempted (whether successful or otherwise), a response event
|
|
@ref M2M_WIFI_RESP_CON_STATE_CHANGED will be sent to the callback function tpfAppWifiCb
|
|
provided during initialization @ref m2m_wifi_init.
|
|
|
|
Possible results indicated by the response event are:
|
|
- @ref M2M_WIFI_DISCONNECTED if the connection attempt failed.
|
|
- @ref M2M_WIFI_CONNECTED if the connection attempt succeeded.
|
|
|
|
@pre
|
|
Prior to attempting connection, the WINC driver must have been initialized by calling the
|
|
@ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
This function is handled in station mode only.
|
|
|
|
@param[in] enuCredStoreOption
|
|
Option to specify whether connection details (i.e. the contents of pstrNetworkId and pstrAuth1xMschap2) are stored
|
|
in WINC flash and, if so, whether they are encrypted before storing.
|
|
|
|
@param[in] pstrNetworkId
|
|
Structure specifying SSID/BSSID and Wi-Fi channel.
|
|
|
|
@param[in] pstrAuth1xMschap2
|
|
Structure specifying the MS-CHAP-V2 credentials.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the connect request has been successfully passed to the firmware and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_connect_1x_mschap2(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId, tstrAuth1xMschap2 *pstrAuth1xMschap2);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_connect_1x_tls(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId, tstrAuth1xTls *pstrAuth1xTls);
|
|
|
|
@brief
|
|
Asynchronous API to connect to an access point using WPA(2) Enterprise authentication with
|
|
MS-CHAP-V2 credentials.
|
|
|
|
@details
|
|
Asynchronous Wi-Fi connection function. An application calling this function will cause the
|
|
firmware to attempt to connect to an access point matching the details in pstrNetworkId, with
|
|
the Enterprise TLS credentials provided in pstrAuth1xTls.
|
|
On successful connection, the connection details may be saved in WINC flash, according to
|
|
the option selected in enuCredStoreOption.
|
|
Once connection has been attempted (whether successful or otherwise), a response event
|
|
@ref M2M_WIFI_RESP_CON_STATE_CHANGED will be sent to the callback function @ref tpfAppWifiCb
|
|
provided during initialization @ref m2m_wifi_init.
|
|
|
|
Possible results indicated by the response event are:
|
|
- @ref M2M_WIFI_DISCONNECTED if the connection attempt failed.
|
|
- @ref M2M_WIFI_CONNECTED if the connection attempt succeeded.
|
|
|
|
@pre
|
|
Prior to attempting connection, the WINC driver must have been initialized by calling the
|
|
@ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
This function is handled in station mode only.
|
|
|
|
@param[in] enuCredStoreOption
|
|
Option to specify whether connection details (i.e. the contents of pstrNetworkId and pstrAuth1xTls) are stored in
|
|
WINC flash and, if so, whether they are encrypted before storing.
|
|
|
|
@param[in] pstrNetworkId
|
|
Structure specifying SSID/BSSID and Wi-Fi channel.
|
|
|
|
@param[in] pstrAuth1xTls
|
|
Structure specifying the EAP-TLS credentials.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the connect request has been successfully passed to the firmware and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_connect_1x_tls(tenuCredStoreOption enuCredStoreOption, tstrNetworkId *pstrNetworkId, tstrAuth1xTls *pstrAuth1xTls);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_connect(char *pcSsid, uint8_t u8SsidLen, uint8_t u8SecType, void *pvAuthInfo, uint16_t u16Ch);
|
|
|
|
@brief
|
|
Legacy asynchronous API to request connection to a specified access point.
|
|
|
|
@details
|
|
This API is maintained for purposes of compatibility with legacy applications. It is
|
|
implemented as a wrapper for the following new APIs:
|
|
@ref m2m_wifi_connect_open
|
|
@ref m2m_wifi_connect_wep
|
|
@ref m2m_wifi_connect_psk
|
|
@ref m2m_wifi_connect_1x_mschap2
|
|
@ref m2m_wifi_connect_1x_tls
|
|
These new APIs allow more flexibility and it is recommended that applications use them instead.
|
|
|
|
@param[in] pcSsid
|
|
A buffer holding the SSID corresponding to the requested AP.
|
|
SSID must not contain '\0'.
|
|
|
|
@param[in] u8SsidLen
|
|
Length of the given SSID (not including any NULL termination).
|
|
A length greater than or equal to @ref M2M_MAX_SSID_LEN will result in a negative error
|
|
@ref M2M_ERR_FAIL.
|
|
|
|
@param[in] u8SecType
|
|
Wi-Fi security type security for the network. It can be one of the following types:
|
|
-@ref M2M_WIFI_SEC_OPEN
|
|
-@ref M2M_WIFI_SEC_WEP
|
|
-@ref M2M_WIFI_SEC_WPA_PSK
|
|
-@ref M2M_WIFI_SEC_802_1X
|
|
A value outside these possible values will result in a negative return error @ref M2M_ERR_FAIL.
|
|
|
|
@param[in] pvAuthInfo
|
|
Authentication parameters required for completing the connection. Its type is based on the
|
|
security type. If the authentication parameters are NULL or are greater than the maximum length
|
|
of the authentication parameters length as defined by @ref M2M_MAX_PSK_LEN a negative error will
|
|
return @ref M2M_ERR_FAIL indicating connection failure.
|
|
|
|
@param[in] u16Ch
|
|
Wi-Fi channel number as defined in @ref tenuM2mScanCh enumeration. Specifying a channel number
|
|
greater than @ref M2M_WIFI_CH_14 returns a negative error @ref M2M_ERR_FAIL, unless
|
|
the value is @ref M2M_WIFI_CH_ALL, since this indicates that the firmware should scan all channels
|
|
to find the SSID specified in parameter pcSsid.
|
|
|
|
Failure to find the connection match will return a negative error
|
|
@ref M2M_DEFAULT_CONN_SCAN_MISMATCH.
|
|
|
|
@pre
|
|
Prior to a successful connection request, the wi-fi driver must have been successfully initialized
|
|
through the call of the @ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
If there is a '\0' character within the first u8SsidLen characters, then this function will assume
|
|
that the input u8SsidLen was incorrect, set length to strlen(pcSsid) and continue.\n
|
|
It is recommended that the following Wi-Fi connect APIs are used instead:
|
|
@ref m2m_wifi_connect_open
|
|
@ref m2m_wifi_connect_wep
|
|
@ref m2m_wifi_connect_psk
|
|
@ref m2m_wifi_connect_1x_mschap2
|
|
@ref m2m_wifi_connect_1x_tls
|
|
|
|
Additionally:
|
|
- This function must be called in station mode only.
|
|
- Successful completion of this function does not guarantee success of the WIFI connection, and
|
|
a negative return value indicates only locally-detected errors.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tuniM2MWifiAuth
|
|
tstr1xAuthCredentials
|
|
tstrM2mWifiWepParams
|
|
*/
|
|
int8_t m2m_wifi_connect(char *pcSsid, uint8_t u8SsidLen, uint8_t u8SecType, void *pvAuthInfo, uint16_t u16Ch);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_connect_sc(char *pcSsid, uint8_t u8SsidLen, uint8_t u8SecType, void *pvAuthInfo, uint16_t u16Ch, uint8_t u8NoSaveCred);
|
|
|
|
@brief
|
|
Legacy asynchronous API to request connection to a specific AP with the option to save credentials in Flash.
|
|
|
|
@details
|
|
This API is maintained for purposes of compatibility with legacy applications. It is
|
|
implemented as a wrapper for the following new APIs:
|
|
@ref m2m_wifi_connect_open
|
|
@ref m2m_wifi_connect_wep
|
|
@ref m2m_wifi_connect_psk
|
|
@ref m2m_wifi_connect_1x_mschap2
|
|
@ref m2m_wifi_connect_1x_tls
|
|
These new APIs allow more flexibility and it is recommended that applications use them instead.
|
|
|
|
@param[in] pcSsid
|
|
A buffer holding the SSID corresponding to the requested AP.
|
|
SSID must not contain '\0'.
|
|
|
|
@param[in] u8SsidLen
|
|
Length of the given SSID (not including any NULL termination).
|
|
A length greater than or equal to @ref M2M_MAX_SSID_LEN will result in a negative error
|
|
@ref M2M_ERR_FAIL.
|
|
|
|
@param[in] u8SecType
|
|
Wi-Fi security type security for the network (see @ref tenuM2mSecType). It can be one of the following types:
|
|
-@ref M2M_WIFI_SEC_OPEN
|
|
-@ref M2M_WIFI_SEC_WEP
|
|
-@ref M2M_WIFI_SEC_WPA_PSK
|
|
-@ref M2M_WIFI_SEC_802_1X
|
|
A value outside these possible values will result in a negative return error @ref M2M_ERR_FAIL.
|
|
|
|
@param[in] pvAuthInfo
|
|
Authentication parameters required for completing the connection. Its type is based on the
|
|
security type. If the authentication parameters are NULL or are greater than the maximum length
|
|
of the authentication parameters length as defined by @ref M2M_MAX_PSK_LEN a negative error will
|
|
return @ref M2M_ERR_FAIL indicating connection failure.
|
|
|
|
@param[in] u16Ch
|
|
Wi-Fi channel number as defined in @ref tenuM2mScanCh enumeration. Specification of a channel
|
|
number greater than @ref M2M_WIFI_CH_14 returns a negative error @ref M2M_ERR_FAIL unless
|
|
the value is @ref M2M_WIFI_CH_ALL. A channel number of @ref M2M_WIFI_CH_ALL indicates that the
|
|
firmware should scan all channels to find the SSID specified in parameter pcSsid.
|
|
|
|
Failure to find the connection match will return a negative error
|
|
@ref M2M_DEFAULT_CONN_SCAN_MISMATCH.
|
|
|
|
@param[in] u8SaveCred
|
|
Option to store the access point SSID and password into the WINC flash memory or not.
|
|
|
|
@pre
|
|
Prior to a successful connection request, the wi-fi driver must have been successfully initialized through the call of the @ref m2m_wifi_init function.
|
|
|
|
@warning
|
|
If there is a '\0' character within the first u8SsidLen characters, then this function will assume
|
|
that the input u8SsidLen was incorrect, set length to strlen(pcSsid) and continue.\n
|
|
It is recommended that the following Wi-Fi connect APIs are used instead:
|
|
@ref m2m_wifi_connect_open
|
|
@ref m2m_wifi_connect_wep
|
|
@ref m2m_wifi_connect_psk
|
|
@ref m2m_wifi_connect_1x_mschap2
|
|
@ref m2m_wifi_connect_1x_tls
|
|
|
|
Additionally:
|
|
- This function must be called in station mode only.
|
|
- Successful completion of this function does not guarantee success of the WIFI connection, and
|
|
a negative return value indicates only locally-detected errors.
|
|
|
|
@see
|
|
tuniM2MWifiAuth
|
|
tenuM2mSecType
|
|
tstr1xAuthCredentials
|
|
tstrM2mWifiWepParams
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_connect_sc(char *pcSsid, uint8_t u8SsidLen, uint8_t u8SecType, void *pvAuthInfo, uint16_t u16Ch, uint8_t u8NoSaveCred);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_disconnect(void);
|
|
|
|
@brief
|
|
Synchronous API to request disconnection from a network.
|
|
|
|
@details
|
|
Request a Wi-Fi disconnect from the currently connected AP.
|
|
The connection status will be indicated to the application via a @ref M2M_WIFI_RESP_CON_STATE_CHANGED event.
|
|
The status will be one of those defined in @ref tenuM2mConnState, with @ref M2M_WIFI_DISCONNECTED indicating
|
|
a successful disconnection.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@pre
|
|
Disconnection request must be made to a successfully connected AP. If the WINC is not in the connected state, a call to this function will hold insignificant.
|
|
|
|
@warning
|
|
This function must be called in station mode only.
|
|
|
|
@see
|
|
m2m_wifi_connect
|
|
m2m_wifi_connect_sc
|
|
m2m_wifi_default_connect
|
|
m2m_wifi_connect_open
|
|
m2m_wifi_connect_wep
|
|
m2m_wifi_connect_psk
|
|
m2m_wifi_connect_1x_mschap2
|
|
m2m_wifi_connect_1x_tls
|
|
*/
|
|
int8_t m2m_wifi_disconnect(void);
|
|
|
|
/*!
|
|
@ingroup WLANPROVISION
|
|
@fn \
|
|
int8_t m2m_wifi_start_provision_mode(tstrM2MAPConfig *pstrAPConfig, char *pcHttpServerDomainName, uint8_t bEnableHttpRedirect);
|
|
|
|
@brief
|
|
Asynchronous API for control of Wi-Fi provisioning functionality.
|
|
|
|
@details
|
|
This function allows the application to start the WINC in 'provisioning mode', a special mode
|
|
that triggers the WINC to create a Wi-Fi access point, DHCP server, and HTTP server.
|
|
|
|
The HTTP server presents a provisioning page to a connected client which lists the access points
|
|
detected in the vicinity of the WINC, and allows one of these to be selected and any appropriate
|
|
credentials to be entered. This allows a headless system to be provisioned (configured to
|
|
connect with an access point).
|
|
|
|
Provisioning status is returned in an event @ref M2M_WIFI_RESP_PROVISION_INFO.
|
|
|
|
@param[in] pstrAPConfig
|
|
AP configuration parameters as defined in @ref tstrM2MAPConfig configuration structure.
|
|
If a NULL value is passed in, the call will result in a negative error @ref M2M_ERR_FAIL.
|
|
|
|
@param[in] pcHttpServerDomainName
|
|
Domain name of the HTTP Provision WEB server which others will use to load the provisioning Home page.
|
|
The domain name can have one of the following 3 forms:
|
|
- 1. "wincprov.com"
|
|
- 2. "http://wincprov.com"
|
|
- 3. "https://wincprov.com"
|
|
|
|
Forms 1 and 2 are equivalent, they will both start a plain http server, while form 3
|
|
will start a secure HTTP provisioning Session (HTTP over SSL connection).
|
|
|
|
@param[in] bEnableHttpRedirect
|
|
A flag to enable/disable the HTTP redirect feature. If Secure provisioning is enabled (i.e. the server
|
|
domain name uses "https" prefix) this flag is ignored (no meaning for redirect in HTTPS).
|
|
Possible values are:
|
|
- Zero: DO NOT use HTTP Redirect. In this case, the associated device could open the provisioning
|
|
page ONLY when the HTTP Provision URL of the WINC HTTP Server is correctly written on the browser.
|
|
- Non-Zero: Use HTTP Redirect. In this case, all http traffic (http://URL) from the associated
|
|
device (Phone, PC, etc) will be redirected to the WINC HTTP Provisioning Home page.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at startup.
|
|
Registering the callback is done through passing it to the initialization @ref m2m_wifi_init function.
|
|
- The event @ref M2M_WIFI_RESP_CONN_INFO must be handled in the callback to receive the requested connection info.
|
|
|
|
@warning
|
|
Do not use ".local" in the pcHttpServerDomainName.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tpfAppWifiCb
|
|
m2m_wifi_init
|
|
M2M_WIFI_RESP_PROVISION_INFO
|
|
m2m_wifi_stop_provision_mode
|
|
tstrM2MAPConfig
|
|
|
|
@section WIFIExample1 Example
|
|
The example demonstrates a code snippet for how provisioning is triggered and the response event
|
|
received accordingly.
|
|
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_PROVISION_INFO:
|
|
{
|
|
tstrM2MProvisionInfo *pstrProvInfo = (tstrM2MProvisionInfo*)pvMsg;
|
|
if(pstrProvInfo->u8Status == M2M_SUCCESS)
|
|
{
|
|
tstrNetworkId strNetworkId = {NULL, pstrProvInfo->au8SSID, (uint8_t)strlen((char*)(pstrProvInfo->au8SSID)), M2M_WIFI_CH_ALL};
|
|
tstrAuthPsk strAuthPsk = {NULL, pstrProvInfo->au8Password, (uint8_t)strlen((char*)(pstrProvInfo->au8Password))};
|
|
m2m_wifi_connect_psk(WIFI_CRED_SAVE_ENCRYPTED, &strNetworkId, &strAuthPsk);
|
|
|
|
printf("PROV SSID : %s\n",pstrProvInfo->au8SSID);
|
|
printf("PROV PSK : %s\n",pstrProvInfo->au8Password);
|
|
}
|
|
else
|
|
{
|
|
printf("(ERR) Provisioning Failed\n");
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
tstrM2MAPConfig apConfig;
|
|
uint8_t bEnableRedirect = 1;
|
|
|
|
strcpy(apConfig.au8SSID, "WINC_SSID");
|
|
apConfig.u8ListenChannel = 1;
|
|
apConfig.u8SecType = M2M_WIFI_SEC_OPEN;
|
|
apConfig.u8SsidHide = 0;
|
|
|
|
// IP Address
|
|
apConfig.au8DHCPServerIP[0] = 192;
|
|
apConfig.au8DHCPServerIP[1] = 168;
|
|
apConfig.au8DHCPServerIP[2] = 1;
|
|
apConfig.au8DHCPServerIP[3] = 1;
|
|
|
|
m2m_wifi_start_provision_mode(&apConfig, "atmelwincconf.com", bEnableRedirect);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_start_provision_mode(tstrM2MAPConfig *pstrAPConfig, char *pcHttpServerDomainName, uint8_t bEnableHttpRedirect);
|
|
|
|
/*!
|
|
@ingroup WLANPROVISION
|
|
@fn \
|
|
int8_t m2m_wifi_start_provision_mode_ext(tstrM2MAPModeConfig *pstrAPModeConfig, char *pcHttpServerDomainName, uint8_t bEnableHttpRedirect);
|
|
|
|
@brief
|
|
Asynchronous API for control of Wi-Fi provisioning functionality with extended options.
|
|
|
|
@details
|
|
This function allows the application to start the WINC in 'provisioning mode', a special mode
|
|
that triggers the WINC to create a Wi-Fi access point, DHCP server, and HTTP server.
|
|
|
|
The HTTP server presents a provisioning page to a connected client which lists the access points
|
|
detected in the vicinity of the WINC, and allows one of these to be selected and any appropriate
|
|
credentials to be entered. This allows a headless system to be provisioned (configured to
|
|
connect with an access point).
|
|
|
|
Provisioning status is returned in an event @ref M2M_WIFI_RESP_PROVISION_INFO.
|
|
|
|
@param[in] pstrAPModeConfig
|
|
AP configuration parameters as defined in @ref tstrM2MAPModeConfig configuration structure.
|
|
A NULL value passed in, will result in a negative error @ref M2M_ERR_FAIL.
|
|
|
|
@param[in] pcHttpServerDomainName
|
|
Domain name of the HTTP Provision WEB server which others will use to load the provisioning Home page.
|
|
The domain name can have one of the following 3 forms:
|
|
- 1. "wincprov.com"
|
|
- 2. "http://wincprov.com"
|
|
- 3. "https://wincprov.com"
|
|
|
|
The forms 1 and 2 are equivalent, they both will start a plain http server, while form 3
|
|
will start a secure HTTP provisioning Session (HTTP over SSL connection).
|
|
|
|
@param[in] bEnableHttpRedirect
|
|
A flag to enable/disable the HTTP redirect feature. If Secure provisioning is enabled (i.e. the server
|
|
domain name uses "https" prefix) this flag is ignored (no meaning for redirect in HTTPS).
|
|
Possible values are:
|
|
- Zero: DO NOT use HTTP Redirect. In this case the associated device could open the
|
|
provisioning page ONLY when the HTTP Provision URL of the WINC HTTP Server is
|
|
correctly written on the browser.
|
|
- Non-Zero: Use HTTP Redirect. In this case, all http traffic (http://URL) from the
|
|
associated device (Phone, PC, ...etc) will be redirected to the WINC HTTP
|
|
Provisioning Home page.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at startup.
|
|
Registering the callback is done through passing it to the initialization @ref m2m_wifi_init function.
|
|
- The event @ref M2M_WIFI_RESP_CONN_INFO must be handled in the callback to receive the requested connection info.
|
|
|
|
@warning
|
|
Do not use ".local" in the pcHttpServerDomainName.
|
|
|
|
@see
|
|
tpfAppWifiCb
|
|
m2m_wifi_init
|
|
M2M_WIFI_RESP_PROVISION_INFO
|
|
m2m_wifi_stop_provision_mode
|
|
tstrM2MAPModeConfig
|
|
|
|
@section WIFIExample12 Example
|
|
The example demonstrates a code snippet for how provisioning is triggered and the response event
|
|
received accordingly.
|
|
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_PROVISION_INFO:
|
|
{
|
|
tstrM2MProvisionInfo *pstrProvInfo = (tstrM2MProvisionInfo*)pvMsg;
|
|
if(pstrProvInfo->u8Status == M2M_SUCCESS)
|
|
{
|
|
tstrNetworkId strNetworkId = {NULL, pstrProvInfo->au8SSID, (uint8_t)strlen((char*)(pstrProvInfo->au8SSID)), M2M_WIFI_CH_ALL};
|
|
tstrAuthPsk strAuthPsk = {NULL, pstrProvInfo->au8Password, (uint8_t)strlen((char*)(pstrProvInfo->au8Password))};
|
|
m2m_wifi_connect_psk(WIFI_CRED_SAVE_ENCRYPTED, &strNetworkId, &strAuthPsk);
|
|
|
|
printf("PROV SSID : %s\n",pstrProvInfo->au8SSID);
|
|
printf("PROV PSK : %s\n",pstrProvInfo->au8Password);
|
|
}
|
|
else
|
|
{
|
|
printf("(ERR) Provisioning Failed\n");
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
tstrM2MAPModeConfig apModeConfig;
|
|
uint8_t bEnableRedirect = 1;
|
|
|
|
strcpy(apModeConfig.au8SSID, "WINC_SSID");
|
|
apModeConfig.strApConfig.u8ListenChannel = 1;
|
|
apModeConfig.strApConfig.u8SecType = M2M_WIFI_SEC_OPEN;
|
|
apModeConfig.strApConfig.u8SsidHide = 0;
|
|
|
|
// IP Address
|
|
apModeConfig.strApConfig.au8DHCPServerIP[0] = 192;
|
|
apModeConfig.strApConfig.au8DHCPServerIP[1] = 168;
|
|
apModeConfig.strApConfig.au8DHCPServerIP[2] = 1;
|
|
apModeConfig.strApConfig.au8DHCPServerIP[3] = 1;
|
|
|
|
// Default router IP
|
|
memcpy(apModeConfig.strApConfigExt.au8DefRouterIP, apModeConfig.strApConfig.au8DHCPServerIP, 4);
|
|
|
|
// DNS Server IP
|
|
memcpy(apModeConfig.strApConfigExt.au8DNSServerIP, apModeConfig.strApConfig.au8DHCPServerIP, 4);
|
|
|
|
// Subnet mask
|
|
apModeConfig.strApConfigExt.au8SubnetMask[0] = 255;
|
|
apModeConfig.strApConfigExt.au8SubnetMask[1] = 255;
|
|
apModeConfig.strApConfigExt.au8SubnetMask[2] = 255;
|
|
apModeConfig.strApConfigExt.au8SubnetMask[3] = 0;
|
|
|
|
m2m_wifi_start_provision_mode_ext(&apModeConfig, "atmelwincconf.com", bEnableRedirect);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_start_provision_mode_ext(tstrM2MAPModeConfig *pstrAPModeConfig, char *pcHttpServerDomainName, uint8_t bEnableHttpRedirect);
|
|
|
|
/*!
|
|
@ingroup WLANPROVISION
|
|
@fn \
|
|
int8_t m2m_wifi_stop_provision_mode(void);
|
|
|
|
@brief
|
|
Synchronous API for terminating provisioning mode on the WINC.
|
|
|
|
@details
|
|
This function will terminate any currently active provisioning mode on the WINC, returning the WINC to idle.
|
|
|
|
@pre
|
|
An active provisioning session must be active before it is terminated through this function.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_start_provision_mode
|
|
*/
|
|
int8_t m2m_wifi_stop_provision_mode(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_get_connection_info(void);
|
|
|
|
@brief
|
|
Asynchronous API for retrieving the WINC connection status.
|
|
|
|
@details
|
|
Requests the connection status from the WINC including information regarding any access
|
|
point to which it is currently connected, or any non-AP station that is connected to the WINC.
|
|
All information will be returned to the application via the Wi-Fi notification callback through
|
|
the event @ref M2M_WIFI_RESP_CONN_INFO.
|
|
|
|
The connection info can be retrieved using the structure @ref tstrM2MConnInfo which contains:
|
|
- Connection Security
|
|
- Connection RSSI
|
|
- Remote MAC address
|
|
- Remote IP address
|
|
- SSID of the network (in cases where the WINC is in non-AP mode)
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at
|
|
startup. Registering the callback is done through passing it to the initialization
|
|
@ref m2m_wifi_init function.
|
|
- The event @ref M2M_WIFI_RESP_CONN_INFO must be handled in the callback to receive the
|
|
requested connection info.
|
|
|
|
@warning
|
|
- In case the WINC is operating in AP mode or P2P mode, the SSID field will be returned as a NULL string.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
M2M_WIFI_RESP_CONN_INFO,
|
|
tstrM2MConnInfo
|
|
@section WIFIExample2 Example
|
|
The code snippet shows an example of how wi-fi connection information is retrieved .
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_CONN_INFO:
|
|
{
|
|
tstrM2MConnInfo *pstrConnInfo = (tstrM2MConnInfo*)pvMsg;
|
|
|
|
printf("CONNECTED AP INFO\n");
|
|
printf("SSID : %s\n",pstrConnInfo->acSSID);
|
|
printf("SEC TYPE : %d\n",pstrConnInfo->u8SecType);
|
|
printf("Signal Strength : %d\n", pstrConnInfo->s8RSSI);
|
|
printf("Local IP Address : %d.%d.%d.%d\n",
|
|
pstrConnInfo->au8IPAddr[0] , pstrConnInfo->au8IPAddr[1], pstrConnInfo->au8IPAddr[2], pstrConnInfo->au8IPAddr[3]);
|
|
}
|
|
break;
|
|
|
|
case M2M_WIFI_REQ_DHCP_CONF:
|
|
{
|
|
// Get the current AP information.
|
|
m2m_wifi_get_connection_info();
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
// connect to the default AP
|
|
m2m_wifi_default_connect();
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_get_connection_info(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONF
|
|
@fn \
|
|
int8_t m2m_wifi_set_mac_address(uint8_t au8MacAddress[6]);
|
|
|
|
@brief
|
|
Asynchronous API for assigning a MAC address to the WINC.
|
|
|
|
@details
|
|
This function is intended to allow non-production software to assign a MAC address to the WINC.
|
|
|
|
@warning
|
|
This function is intended for development use only and not for use in production software.
|
|
|
|
@param[in] au8MacAddress
|
|
MAC Address to be provisioned to the WINC.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_set_mac_address(uint8_t au8MacAddress[6]);
|
|
|
|
/*!
|
|
@ingroup WLANWPS
|
|
@fn \
|
|
int8_t m2m_wifi_wps(uint8_t u8TriggerType,const char * pcPinNumber);
|
|
|
|
@brief
|
|
Asynchronous API to engage the WINC Wi-Fi Protected Setup (enrollee) function.
|
|
|
|
@details
|
|
This function can be called to make the WINC enter WPS (Wi-Fi Protected Setup) mode. The result
|
|
is passed to the Wi-Fi notification callback with the event @ref M2M_WIFI_REQ_WPS.
|
|
|
|
@param[in] u8TriggerType
|
|
WPS Trigger method. This may be:
|
|
- @ref WPS_PIN_TRIGGER Push button method
|
|
- @ref WPS_PBC_TRIGGER Pin method
|
|
|
|
@param[in] pcPinNumber
|
|
Valid only if the u8TriggerType is @ref WPS_PIN_TRIGGER, this parameter contains the PIN number.
|
|
The number must follow the format as given in the WSC1.0 specification.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@warning
|
|
This function is not allowed in AP or P2P modes.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type (@ref tpfAppWifiCb MUST be implemented and registered at
|
|
startup. Registering the callback is done through passing it to @ref m2m_wifi_init.
|
|
- The event @ref M2M_WIFI_REQ_WPS must be handled in the callback to receive the WPS status.
|
|
- The WINC device MUST be in IDLE or STA mode. If AP or P2P mode is active, the WPS will not be performed.
|
|
- The @ref m2m_wifi_handle_events MUST be called periodically to receive
|
|
the responses in the callback.
|
|
|
|
@see
|
|
tpfAppWifiCb
|
|
m2m_wifi_init
|
|
M2M_WIFI_REQ_WPS
|
|
tenuWPSTrigger
|
|
tstrM2MWPSInfo
|
|
|
|
@section WIFIExample3 Example
|
|
The code snippet shows an example of how wi-fi WPS is triggered .
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_REQ_WPS:
|
|
{
|
|
tstrM2MWPSInfo *pstrWPS = (tstrM2MWPSInfo*)pvMsg;
|
|
if(pstrWPS->u8AuthType != 0)
|
|
{
|
|
// establish Wi-Fi connection
|
|
tstrNetworkId strNetworkId = {NULL, pstrWPS->au8SSID, (uint8_t)strlen((char*)(pstrWPS->au8SSID)), pstrWPS->u8Ch};
|
|
if(pstrWPS->u8AuthType == M2M_WIFI_SEC_OPEN)
|
|
{
|
|
m2m_wifi_connect_open(WIFI_CRED_SAVE_ENCRYPTED, &strNetworkId);
|
|
}
|
|
else
|
|
{
|
|
tstrAuthPsk strAuthPsk = {NULL, pstrWPS->au8PSK, (uint8_t)strlen((char*)(pstrWPS->au8PSK))};
|
|
m2m_wifi_connect_psk(WIFI_CRED_SAVE_ENCRYPTED, &strNetworkId, &strAuthPsk);
|
|
}
|
|
|
|
printf("WPS SSID : %s\n",pstrWPS->au8SSID);
|
|
printf("WPS PSK : %s\n",pstrWPS->au8PSK);
|
|
printf("WPS SSID Auth Type : %s\n",pstrWPS->u8AuthType == M2M_WIFI_SEC_OPEN ? "OPEN" : "WPA/WPA2");
|
|
printf("WPS Channel : %d\n",pstrWPS->u8Ch);
|
|
}
|
|
else
|
|
{
|
|
printf("(ERR) WPS Is not enabled OR Timed out\n");
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
// Trigger WPS in Push button mode.
|
|
m2m_wifi_wps(WPS_PBC_TRIGGER, NULL);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_wps(uint8_t u8TriggerType, const char *pcPinNumber);
|
|
|
|
/*!
|
|
@ingroup WLANWPS
|
|
@fn \
|
|
int8_t m2m_wifi_wps_disable(void);
|
|
|
|
@brief
|
|
Asynchronous API that disables Wi-Fi Protected Setup mode in the WINC.
|
|
|
|
@pre
|
|
WINC should be already in WPS mode using @ref m2m_wifi_wps.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_wps
|
|
*/
|
|
int8_t m2m_wifi_wps_disable(void);
|
|
|
|
/**@cond P2P_DOC
|
|
*/
|
|
/*!
|
|
@ingroup WLANP2P
|
|
@fn \
|
|
int8_t m2m_wifi_p2p(uint8_t u8Channel);
|
|
|
|
@brief
|
|
Asynchronous API for enabling Wi-Fi Direct (P2P) mode in the WINC.
|
|
|
|
@param[in] u8Channel
|
|
P2P Listen RF channel. According to the P2P standard, it must hold only one of the following values 1, 6 or 11.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at
|
|
initialization. Registering the callback is done through passing it to the @ref m2m_wifi_init.
|
|
- The events @ref M2M_WIFI_RESP_CON_STATE_CHANGED and @ref M2M_WIFI_REQ_DHCP_CONF must be handled in the callback.
|
|
- The @ref m2m_wifi_handle_events MUST be called to receive the responses in the callback.
|
|
|
|
@warning
|
|
- This function is not available in the WINC 3400
|
|
- This function is not allowed in AP or STA modes.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tpfAppWifiCb
|
|
m2m_wifi_init
|
|
M2M_WIFI_RESP_CON_STATE_CHANGED
|
|
M2M_WIFI_REQ_DHCP_CONF
|
|
tstrM2mWifiStateChanged
|
|
|
|
@section WIFIExample4 Example
|
|
The code snippet shows an example of how the p2p mode operates.
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_CON_STATE_CHANGED:
|
|
{
|
|
tstrM2mWifiStateChanged *pstrWifiState = (tstrM2mWifiStateChanged*)pvMsg;
|
|
M2M_INFO("Wifi State :: %s :: ErrCode %d\n", pstrWifiState->u8CurrState? "CONNECTED":"DISCONNECTED",pstrWifiState->u8ErrCode);
|
|
|
|
// Do something
|
|
}
|
|
break;
|
|
|
|
case M2M_WIFI_REQ_DHCP_CONF:
|
|
{
|
|
uint8_t *pu8IPAddress = (uint8_t*)pvMsg;
|
|
|
|
printf("P2P IP Address \"%u.%u.%u.%u\"\n",pu8IPAddress[0],pu8IPAddress[1],pu8IPAddress[2],pu8IPAddress[3]);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
// Trigger P2P
|
|
m2m_wifi_p2p(M2M_WIFI_CH_1);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_p2p(uint8_t u8Channel);
|
|
|
|
/*!
|
|
@ingroup WLANP2P
|
|
@fn \
|
|
int8_t m2m_wifi_p2p_disconnect(void);
|
|
|
|
@brief
|
|
Synchronous API to disable Wi-Fi Direct (P2P) Mode on the WINC.
|
|
|
|
@pre
|
|
The p2p mode must be enabled and active before a disconnect can be called.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_p2p
|
|
*/
|
|
int8_t m2m_wifi_p2p_disconnect(void);
|
|
/**@endcond*/ //P2P_DOC
|
|
|
|
/*!
|
|
@ingroup WLANAP
|
|
@fn \
|
|
int8_t m2m_wifi_enable_ap(const tstrM2MAPConfig* pstrM2MAPConfig);
|
|
|
|
@brief
|
|
Asynchronous API to enable access point (AKA "hot-spot") mode on the WINC.
|
|
|
|
@details
|
|
The WINC supports the ability to operate as an access point with the following limitations:
|
|
- Only 1 station may be associated at any given time.
|
|
- Open system and WEP are the only security suites supported.
|
|
|
|
@param[in] pstrM2MAPConfig
|
|
A structure holding the AP configurations.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@warning
|
|
This function is not allowed in P2P or STA modes.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at initialization. Registering the callback
|
|
is done through passing it to the @ref m2m_wifi_init.
|
|
- The event @ref M2M_WIFI_REQ_DHCP_CONF must be handled in the callback.
|
|
- The @ref m2m_wifi_handle_events MUST be called to receive the responses in the callback.
|
|
|
|
@see
|
|
tpfAppWifiCb
|
|
tenuM2mSecType
|
|
m2m_wifi_init
|
|
M2M_WIFI_REQ_DHCP_CONF
|
|
tstrM2mWifiStateChanged
|
|
tstrM2MAPConfig
|
|
|
|
@section WIFIExample5 Example
|
|
The code snippet demonstrates how the AP mode is enabled after the driver is initialized in the application's main function and the handling
|
|
of the event @ref M2M_WIFI_REQ_DHCP_CONF, to indicate successful connection.
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_REQ_DHCP_CONF:
|
|
{
|
|
uint8_t *pu8IPAddress = (uint8_t*)pvMsg;
|
|
|
|
printf("Associated STA has IP Address \"%u.%u.%u.%u\"\n",pu8IPAddress[0],pu8IPAddress[1],pu8IPAddress[2],pu8IPAddress[3]);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
tstrM2MAPConfig apConfig;
|
|
|
|
strcpy(apConfig.au8SSID, "WINC_SSID");
|
|
apConfig.u8ListenChannel = 1;
|
|
apConfig.u8SecType = M2M_WIFI_SEC_OPEN;
|
|
apConfig.u8SsidHide = 0;
|
|
|
|
// IP Address
|
|
apConfig.au8DHCPServerIP[0] = 192;
|
|
apConfig.au8DHCPServerIP[1] = 168;
|
|
apConfig.au8DHCPServerIP[2] = 1;
|
|
apConfig.au8DHCPServerIP[3] = 1;
|
|
|
|
// Trigger AP
|
|
m2m_wifi_enable_ap(&apConfig);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_enable_ap(const tstrM2MAPConfig *pstrM2MAPConfig);
|
|
|
|
/*!
|
|
@ingroup WLANAP
|
|
@fn \
|
|
int8_t m2m_wifi_enable_ap_ext(const tstrM2MAPModeConfig *pstrM2MAPModeConfig);
|
|
|
|
@brief
|
|
Asynchronous API to enable access point (AKA "hot-spot") mode on the WINC with extended options.
|
|
|
|
@details
|
|
The WINC supports the ability to operate as an access point with the following limitations:
|
|
- Only 1 station may be associated at any given time.
|
|
- Open system and WEP are the only security suites supported.
|
|
|
|
@param[in] pstrM2MAPModeConfig
|
|
A structure holding the AP configurations.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@warning
|
|
This function is not allowed in P2P or STA modes.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at initialization. Registering the callback
|
|
is done through passing it to the @ref m2m_wifi_init.
|
|
- The event @ref M2M_WIFI_REQ_DHCP_CONF must be handled in the callback.
|
|
- The @ref m2m_wifi_handle_events MUST be called to receive the responses in the callback.
|
|
|
|
@see
|
|
tpfAppWifiCb
|
|
tenuM2mSecType
|
|
m2m_wifi_init
|
|
M2M_WIFI_REQ_DHCP_CONF
|
|
tstrM2mWifiStateChanged
|
|
tstrM2MAPModeConfig
|
|
|
|
@section WIFIExample13 Example
|
|
The code snippet demonstrates how the AP mode is enabled after the driver is initialized in the application's main function and the handling
|
|
of the event @ref M2M_WIFI_REQ_DHCP_CONF, to indicate successful connection.
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_REQ_DHCP_CONF:
|
|
{
|
|
uint8_t *pu8IPAddress = (uint8_t*)pvMsg;
|
|
|
|
printf("Associated STA has IP Address \"%u.%u.%u.%u\"\n",pu8IPAddress[0],pu8IPAddress[1],pu8IPAddress[2],pu8IPAddress[3]);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
tstrM2MAPModeConfig apModeConfig;
|
|
|
|
strcpy(apModeConfig.strApConfig.au8SSID, "WINC_SSID");
|
|
apModeConfig.strApConfig.u8ListenChannel = 1;
|
|
apModeConfig.strApConfig.u8SecType = M2M_WIFI_SEC_OPEN;
|
|
apModeConfig.strApConfig.u8SsidHide = 0;
|
|
|
|
// IP Address
|
|
apModeConfig.strApConfig.au8DHCPServerIP[0] = 192;
|
|
apModeConfig.strApConfig.au8DHCPServerIP[1] = 168;
|
|
apModeConfig.strApConfig.au8DHCPServerIP[2] = 1;
|
|
apModeConfig.strApConfig.au8DHCPServerIP[3] = 1;
|
|
|
|
// Default router IP
|
|
memcpy(apModeConfig.strApConfigExt.au8DefRouterIP, apModeConfig.strApConfig.au8DHCPServerIP, 4);
|
|
|
|
// DNS Server IP
|
|
memcpy(apModeConfig.strApConfigExt.au8DNSServerIP, apModeConfig.strApConfig.au8DHCPServerIP, 4);
|
|
|
|
// Subnet mask
|
|
apModeConfig.strApConfigExt.au8SubnetMask[0] = 255;
|
|
apModeConfig.strApConfigExt.au8SubnetMask[1] = 255;
|
|
apModeConfig.strApConfigExt.au8SubnetMask[2] = 255;
|
|
apModeConfig.strApConfigExt.au8SubnetMask[3] = 0;
|
|
|
|
// Trigger AP
|
|
m2m_wifi_enable_ap_ext(&apModeConfig);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_enable_ap_ext(const tstrM2MAPModeConfig *pstrM2MAPModeConfig);
|
|
|
|
/*!
|
|
@ingroup WLANAP
|
|
@fn \
|
|
int8_t m2m_wifi_disable_ap(void);
|
|
|
|
@brief
|
|
Synchronous API to disable access point mode on the WINC.
|
|
|
|
@details
|
|
Must be called only when the AP is enabled through the @ref m2m_wifi_enable_ap
|
|
function. Otherwise the call to this function will not be useful.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_enable_ap
|
|
*/
|
|
int8_t m2m_wifi_disable_ap(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_set_static_ip(tstrM2MIPConfig * pstrStaticIPConf);
|
|
|
|
@brief
|
|
Asynchronous API to manually assign a (static) IP address to the WINC.
|
|
|
|
@details
|
|
Assigns a static IP address to the WINC.
|
|
Typically an infrastructure access point will be able to provide an IP address to all clients
|
|
after they associate. The WINC will request configuration via DHCP automatically after
|
|
successfully connecting to an access point.
|
|
This function should only be called in the event that the network has no DHCP server or in case the application
|
|
wants to assign a predefined known IP address and the application.
|
|
This function can be used to assign a static IP address in case the application knows the specifics of the network.
|
|
The user must keep in mind that assigning a static IP address might
|
|
result in an IP address conflict. In case of an IP address conflict observed
|
|
by the WINC the user will get a response of @ref M2M_WIFI_RESP_IP_CONFLICT
|
|
in the wifi callback. The application is then responsible to either solve the
|
|
conflict or assign another IP address.
|
|
|
|
@pre
|
|
The application must first call @ref m2m_wifi_enable_dhcp to request that DHCP functionality is
|
|
disabled prior to calling this function.
|
|
|
|
@warning
|
|
Exercise caution using this function.
|
|
DHCP is the preferred method for configuring IP addresses.
|
|
|
|
@param[in] pstrStaticIPConf
|
|
Pointer to a structure holding the static IP configuration (IP, Gateway, subnet mask and DNS address).
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tstrM2MIPConfig
|
|
*/
|
|
int8_t m2m_wifi_set_static_ip(tstrM2MIPConfig *pstrStaticIPConf);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_request_dhcp_client(void);
|
|
|
|
@brief
|
|
Legacy (deprecated) Asynchronous API for starting a DHCP client on the WINC.
|
|
|
|
@details
|
|
This is a legacy API and is no longer supported. Calls to this API will not result in any
|
|
changes being made to the state of the WINC.
|
|
|
|
@warning
|
|
This function has been deprecated. DHCP is used automatically when the WINC connects.
|
|
|
|
@return
|
|
This function always returns @ref M2M_SUCCESS.
|
|
*/
|
|
int8_t m2m_wifi_request_dhcp_client(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_request_dhcp_server(uint8_t* addr);
|
|
|
|
@brief
|
|
Legacy (deprecated) asynchronous function to start a DHCP client on the WINC.
|
|
|
|
@details
|
|
This is a legacy API and is no longer supported. Calls to this API will not result in any
|
|
changes being made to the state of the WINC.
|
|
|
|
@param[in] addr
|
|
The address to issue to a connected client (only one client is supported)
|
|
|
|
@warning
|
|
This function is legacy and exists only for compatibility with older applications.
|
|
DHCP server is started automatically when enabling the AP mode.
|
|
|
|
@return
|
|
This function always returns @ref M2M_SUCCESS.
|
|
*/
|
|
int8_t m2m_wifi_request_dhcp_server(uint8_t *addr);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_enable_dhcp(uint8_t u8DhcpEn);
|
|
|
|
@brief
|
|
Asynchronous function to control the DHCP client functionality within the WINC.
|
|
|
|
@details
|
|
This function allows the application to control the behaviour of the DHCP client function within
|
|
the WINC once it has associated with an access point. DHCP client functionality is enabled by
|
|
default.
|
|
|
|
@param[in] u8DhcpEn
|
|
The state of the DHCP client feature after successful association with an access point:
|
|
- 1: Enables DHCP client after connection.
|
|
- 0: Disables DHCP client after connection.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operation and a negative value otherwise.
|
|
|
|
@warning
|
|
DHCP client is enabled by default.
|
|
This Function should be called to disable DHCP client operation before using @ref m2m_wifi_set_static_ip.
|
|
|
|
@see
|
|
m2m_wifi_set_static_ip
|
|
*/
|
|
int8_t m2m_wifi_enable_dhcp(uint8_t u8DhcpEn);
|
|
|
|
/*!
|
|
@ingroup WLANSCAN
|
|
@fn \
|
|
int8_t m2m_wifi_set_scan_options(tstrM2MScanOption* ptstrM2MScanOption);
|
|
|
|
@brief
|
|
Synchronous API for configuring the behaviour of the WINC network scanning functions.
|
|
|
|
@details
|
|
This function allows the application to tune the scanning behaviour of the WINC using the
|
|
parameters described in @ref tstrM2MScanOption.
|
|
|
|
@param[in] ptstrM2MScanOption;
|
|
Pointer to the structure holding the Scan Parameters.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tenuM2mScanCh
|
|
m2m_wifi_request_scan
|
|
tstrM2MScanOption
|
|
*/
|
|
int8_t m2m_wifi_set_scan_options(tstrM2MScanOption *ptstrM2MScanOption);
|
|
|
|
/*!
|
|
@ingroup WLANSCAN
|
|
@fn \
|
|
int8_t m2m_wifi_set_stop_scan_on_first(uint8_t u8StopScanOption);
|
|
|
|
@brief
|
|
Synchronous API for enabling/disabling the stop scan on first result of the WINC IC's network scanning functions.
|
|
|
|
@details
|
|
Allows for enabling/disabling of stop scan on first result. When enabled, the WINC will stop the scan as soon as
|
|
it detects a network and return the results to the host. Setting is persistent and will need to be explicitly
|
|
reverted back by the application if it no longer wishes for it to be enabled.
|
|
|
|
@param[in] u8StopScanOption;
|
|
Setting for enabling or disabling Stopping Scan on first result.
|
|
1 = Enabled, 0 = Disabled (Default)
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tenuM2mScanCh
|
|
tstrM2MScanOption
|
|
tstrM2MStopScanOption
|
|
m2m_wifi_request_scan
|
|
m2m_wifi_set_scan_options
|
|
*/
|
|
int8_t m2m_wifi_set_stop_scan_on_first(uint8_t u8StopScanOption);
|
|
|
|
/*!
|
|
@ingroup WLANSCAN
|
|
@fn \
|
|
int8_t m2m_wifi_set_scan_region(uint16_t ScanRegion);
|
|
|
|
@brief
|
|
Synchronous API for configuring the regulatory restrictions that may affect the WINC scanning behaviour.
|
|
|
|
@details
|
|
This function sets a property called the scan region, a parameter that affects the range of
|
|
channels that the WINC may legally scan given a geographic region.
|
|
|
|
For 2.4GHz, supported in the current release, the requested scan region cannot exceed the
|
|
maximum number of channels (14).
|
|
|
|
@param[in] ScanRegion
|
|
@ref ASIA
|
|
@ref EUROPE
|
|
@ref NORTH_AMERICA
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tenuM2mScanRegion
|
|
m2m_wifi_request_scan
|
|
*/
|
|
int8_t m2m_wifi_set_scan_region(uint16_t ScanRegion);
|
|
|
|
/*!
|
|
@ingroup WLANSCAN
|
|
@fn \
|
|
int8_t m2m_wifi_request_scan(uint8_t ch);
|
|
|
|
@brief
|
|
Asynchronous API to request the WINC to scan for networks.
|
|
|
|
@details
|
|
Scan statuses are delivered to the application via the Wi-Fi event callback (@ref tpfAppWifiCb) in
|
|
three stages. The first step involves the event @ref M2M_WIFI_RESP_SCAN_DONE which, if successful,
|
|
provides the number of detected networks (access points). The application must then read the list
|
|
of access points via multiple calls to the asynchronous @ref m2m_wifi_req_scan_result API. For
|
|
each call to this function, the application will receive (step three) the event
|
|
@ref M2M_WIFI_RESP_SCAN_RESULT.
|
|
|
|
@param[in] ch
|
|
RF Channel ID for SCAN operation. It should be set according to @ref tenuM2mScanCh, with a
|
|
value of @ref M2M_WIFI_CH_ALL to scan all channels.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at
|
|
initialization. Registration of the callback is done via @ref m2m_wifi_init.
|
|
- The events @ref M2M_WIFI_RESP_SCAN_DONE and @ref M2M_WIFI_RESP_SCAN_RESULT must be handled in
|
|
the (@ref tpfAppWifiCb) callback.
|
|
- The @ref m2m_wifi_handle_events function MUST be called to receive the responses in the
|
|
callback.
|
|
|
|
@warning
|
|
This API is valid only for STA mode, it may be called regardless of connection state (connected or disconnected states).
|
|
|
|
@see
|
|
M2M_WIFI_RESP_SCAN_DONE
|
|
M2M_WIFI_RESP_SCAN_RESULT
|
|
tpfAppWifiCb
|
|
tstrM2mWifiscanResult
|
|
tenuM2mScanCh
|
|
m2m_wifi_init
|
|
m2m_wifi_handle_events
|
|
m2m_wifi_req_scan_result
|
|
|
|
@section WIFIExample6 Example
|
|
The code snippet demonstrates an example of how the scan request is called from the application's main function and the handling of
|
|
the events received in response.
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
static uint8_t u8ScanResultIdx = 0;
|
|
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_SCAN_DONE:
|
|
{
|
|
tstrM2mScanDone *pstrInfo = (tstrM2mScanDone*)pvMsg;
|
|
|
|
printf("Num of AP found %d\n",pstrInfo->u8NumofCh);
|
|
if(pstrInfo->s8ScanState == M2M_SUCCESS)
|
|
{
|
|
u8ScanResultIdx = 0;
|
|
if(pstrInfo->u8NumofCh >= 1)
|
|
{
|
|
m2m_wifi_req_scan_result(u8ScanResultIdx);
|
|
u8ScanResultIdx ++;
|
|
}
|
|
else
|
|
{
|
|
printf("No AP Found Rescan\n");
|
|
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("(ERR) Scan fail with error <%d>\n",pstrInfo->s8ScanState);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case M2M_WIFI_RESP_SCAN_RESULT:
|
|
{
|
|
tstrM2mWifiscanResult *pstrScanResult = (tstrM2mWifiscanResult*)pvMsg;
|
|
uint8_t u8NumFoundAPs = m2m_wifi_get_num_ap_found();
|
|
|
|
printf(">>%02d RI %d SEC %s CH %02d BSSID %02X:%02X:%02X:%02X:%02X:%02X SSID %s\n",
|
|
pstrScanResult->u8index,pstrScanResult->s8rssi,
|
|
pstrScanResult->u8AuthType,
|
|
pstrScanResult->u8ch,
|
|
pstrScanResult->au8BSSID[0], pstrScanResult->au8BSSID[1], pstrScanResult->au8BSSID[2],
|
|
pstrScanResult->au8BSSID[3], pstrScanResult->au8BSSID[4], pstrScanResult->au8BSSID[5],
|
|
pstrScanResult->au8SSID);
|
|
|
|
if(u8ScanResultIdx < u8NumFoundAPs)
|
|
{
|
|
// Read the next scan result
|
|
m2m_wifi_req_scan_result(index);
|
|
u8ScanResultIdx ++;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
// Scan all channels
|
|
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_request_scan(uint8_t ch);
|
|
|
|
/*!
|
|
@ingroup WLANSCAN
|
|
@fn \
|
|
int8_t m2m_wifi_request_scan_passive(uint8_t ch);
|
|
|
|
@brief
|
|
Similar to @ref m2m_wifi_request_scan but performs passive scanning instead of active scanning.
|
|
|
|
@param[in] ch
|
|
RF Channel ID for SCAN operation. It should be set according to @ref tenuM2mScanCh.
|
|
With a value of @ref M2M_WIFI_CH_ALL, means to scan all channels.
|
|
|
|
|
|
@warning
|
|
This function is not allowed in P2P or AP modes. It works only for STA mode (both connected or disconnected states).
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at initialization. Registering the callback
|
|
is done through passing it to the @ref m2m_wifi_init.
|
|
- The events @ref M2M_WIFI_RESP_SCAN_DONE and @ref M2M_WIFI_RESP_SCAN_RESULT.
|
|
must be handled in the callback.
|
|
- The @ref m2m_wifi_handle_events function MUST be called to receive the responses in the callback.
|
|
|
|
@see
|
|
M2M_WIFI_RESP_SCAN_DONE
|
|
M2M_WIFI_RESP_SCAN_RESULT
|
|
tpfAppWifiCb
|
|
tstrM2MScanOption
|
|
tstrM2mWifiscanResult
|
|
tenuM2mScanCh
|
|
m2m_wifi_init
|
|
m2m_wifi_request_scan
|
|
m2m_wifi_handle_events
|
|
m2m_wifi_req_scan_result
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_request_scan_passive(uint8_t ch);
|
|
|
|
/*!
|
|
@ingroup WLANSCAN
|
|
@fn \
|
|
int8_t m2m_wifi_request_scan_ssid_list(uint8_t ch, uint8_t *u8SsidList);
|
|
|
|
@brief
|
|
Asynchronous wi-fi scan request on the given channel and the hidden scan list.
|
|
|
|
@details
|
|
The scan status is delivered in the wi-fi event callback and then the application
|
|
is to read the scan results sequentially.
|
|
The number of APs found (N) is returned in event @ref M2M_WIFI_RESP_SCAN_DONE with the number of found
|
|
APs.
|
|
The application could read the list of APs by calling the function @ref m2m_wifi_req_scan_result N times.
|
|
|
|
@param[in] ch
|
|
RF Channel ID for SCAN operation. It should be set according to @ref tenuM2mScanCh.
|
|
With a value of @ref M2M_WIFI_CH_ALL, means to scan all channels.
|
|
|
|
@param[in] u8SsidList
|
|
u8SsidList is a buffer containing a list of hidden SSIDs to
|
|
include during the scan. The first byte in the buffer, u8SsidList[0],
|
|
is the number of SSIDs encoded in the string. The number of hidden SSIDs
|
|
cannot exceed @ref MAX_HIDDEN_SITES. All SSIDs are concatenated in the following
|
|
bytes and each SSID is prefixed with a one-byte header containing its length.
|
|
The total number of bytes in u8SsidList buffer, including length byte, cannot
|
|
exceed 133 bytes (MAX_HIDDEN_SITES SSIDs x 32 bytes each, which is max SSID length).
|
|
For instance, encoding the two hidden SSIDs "DEMO_AP" and "TEST"
|
|
results in the following buffer content:
|
|
|
|
@code
|
|
uint8_t u8SsidList[14];
|
|
u8SsidList[0] = 2; // Number of SSIDs is 2
|
|
u8SsidList[1] = 7; // Length of the string "DEMO_AP" without NULL termination
|
|
memcpy(&u8SsidList[2], "DEMO_AP", 7); // Bytes index 2-9 containing the string DEMO_AP
|
|
u8SsidList[9] = 4; // Length of the string "TEST" without NULL termination
|
|
memcpy(&u8SsidList[10], "TEST", 4); // Bytes index 10-13 containing the string TEST
|
|
@endcode
|
|
|
|
@note
|
|
It works with STA/AP mode (connected or disconnected).
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at initialization. Registering the callback
|
|
is done through passing it to the @ref m2m_wifi_init.
|
|
- The events @ref M2M_WIFI_RESP_SCAN_DONE and @ref M2M_WIFI_RESP_SCAN_RESULT.
|
|
must be handled in the callback.
|
|
- The @ref m2m_wifi_handle_events function MUST be called to receive the responses in the callback.
|
|
|
|
@see
|
|
M2M_WIFI_RESP_SCAN_DONE
|
|
M2M_WIFI_RESP_SCAN_RESULT
|
|
tpfAppWifiCb
|
|
tstrM2mWifiscanResult
|
|
tenuM2mScanCh
|
|
m2m_wifi_init
|
|
m2m_wifi_handle_events
|
|
m2m_wifi_req_scan_result
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
|
|
|
|
\section WIFIExample6b Example
|
|
The code snippet demonstrates an example of how the scan request is called from the application's main function and the handling of
|
|
the events received in response.
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
static void request_scan_hidden_demo_ap(void);
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
static uint8_t u8ScanResultIdx = 0;
|
|
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_SCAN_DONE:
|
|
{
|
|
tstrM2mScanDone *pstrInfo = (tstrM2mScanDone*)pvMsg;
|
|
|
|
printf("Num of AP found %d\n",pstrInfo->u8NumofCh);
|
|
if(pstrInfo->s8ScanState == M2M_SUCCESS)
|
|
{
|
|
u8ScanResultIdx = 0;
|
|
if(pstrInfo->u8NumofCh >= 1)
|
|
{
|
|
m2m_wifi_req_scan_result(u8ScanResultIdx);
|
|
u8ScanResultIdx ++;
|
|
}
|
|
else
|
|
{
|
|
printf("No AP Found Rescan\n");
|
|
request_scan_hidden_demo_ap();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("(ERR) Scan fail with error <%d>\n",pstrInfo->s8ScanState);
|
|
}
|
|
}
|
|
break;
|
|
case M2M_WIFI_RESP_SCAN_RESULT:
|
|
{
|
|
tstrM2mWifiscanResult *pstrScanResult =(tstrM2mWifiscanResult*)pvMsg;
|
|
uint8_t u8NumFoundAPs = m2m_wifi_get_num_ap_found();
|
|
|
|
printf(">>%02d RI %d SEC %s CH %02d BSSID %02X:%02X:%02X:%02X:%02X:%02X SSID %s\n",
|
|
pstrScanResult->u8index,pstrScanResult->s8rssi,
|
|
pstrScanResult->u8AuthType,
|
|
pstrScanResult->u8ch,
|
|
pstrScanResult->au8BSSID[0], pstrScanResult->au8BSSID[1], pstrScanResult->au8BSSID[2],
|
|
pstrScanResult->au8BSSID[3], pstrScanResult->au8BSSID[4], pstrScanResult->au8BSSID[5],
|
|
pstrScanResult->au8SSID);
|
|
|
|
if(u8ScanResultIdx < u8NumFoundAPs)
|
|
{
|
|
// Read the next scan result
|
|
m2m_wifi_req_scan_result(index);
|
|
u8ScanResultIdx ++;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void request_scan_hidden_demo_ap(void)
|
|
{
|
|
uint8_t list[9];
|
|
char ssid[] = "DEMO_AP";
|
|
uint8 len = (uint8_t)(sizeof(ssid)-1);
|
|
|
|
list[0] = 1;
|
|
list[1] = len;
|
|
memcpy(&list[2], ssid, len); // copy 7 bytes
|
|
// Scan all channels
|
|
m2m_wifi_request_scan_ssid_list(M2M_WIFI_CH_ALL, list);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
request_scan_hidden_demo_ap();
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_request_scan_ssid_list(uint8_t ch, uint8_t *u8Ssidlist);
|
|
|
|
/*!
|
|
@ingroup WLANSCAN
|
|
@fn \
|
|
uint8_t m2m_wifi_get_num_ap_found(void);
|
|
|
|
@brief
|
|
Synchronous function to retrieve the number of AP's found during the last scan operation.
|
|
|
|
@details
|
|
This function allows the application to recover the number of access points discovered during
|
|
the most recent scan activity. This is achieved via a global variable in the WINC driver that
|
|
is populated when receiving the @ref M2M_WIFI_RESP_SCAN_DONE event.
|
|
Function to be used in STA mode only.
|
|
|
|
@see
|
|
m2m_wifi_request_scan
|
|
M2M_WIFI_RESP_SCAN_DONE
|
|
M2M_WIFI_RESP_SCAN_RESULT
|
|
|
|
@pre
|
|
m2m_wifi_request_scan must be called first to ensure up to date results are available.
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered at initialization. Registering the callback
|
|
is done through passing it to the @ref m2m_wifi_init.
|
|
- The event @ref M2M_WIFI_RESP_SCAN_DONE must be handled in the callback to receive the requested scan information.
|
|
|
|
@warning
|
|
This function must be called only in the wi-fi callback function when the events
|
|
@ref M2M_WIFI_RESP_SCAN_DONE or @ref M2M_WIFI_RESP_SCAN_RESULT are received.
|
|
Calling this function in any other place will result in undefined/outdated numbers.
|
|
|
|
@return
|
|
Returns the number of AP's found in the last Scan Request.
|
|
|
|
@section WIFIExample7 Example
|
|
The code snippet demonstrates an example of how the scan request is called from the application's main function and the handling of
|
|
the events received in response.
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
static uint8_t u8ScanResultIdx = 0;
|
|
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_SCAN_DONE:
|
|
{
|
|
tstrM2mScanDone *pstrInfo = (tstrM2mScanDone*)pvMsg;
|
|
|
|
printf("Num of AP found %d\n",pstrInfo->u8NumofCh);
|
|
if(pstrInfo->s8ScanState == M2M_SUCCESS)
|
|
{
|
|
u8ScanResultIdx = 0;
|
|
if(pstrInfo->u8NumofCh >= 1)
|
|
{
|
|
m2m_wifi_req_scan_result(u8ScanResultIdx);
|
|
u8ScanResultIdx ++;
|
|
}
|
|
else
|
|
{
|
|
printf("No AP Found Rescan\n");
|
|
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("(ERR) Scan fail with error <%d>\n",pstrInfo->s8ScanState);
|
|
}
|
|
}
|
|
break;
|
|
case M2M_WIFI_RESP_SCAN_RESULT:
|
|
{
|
|
tstrM2mWifiscanResult *pstrScanResult =(tstrM2mWifiscanResult*)pvMsg;
|
|
uint8_t u8NumFoundAPs = m2m_wifi_get_num_ap_found();
|
|
|
|
printf(">>%02d RI %d SEC %s CH %02d BSSID %02X:%02X:%02X:%02X:%02X:%02X SSID %s\n",
|
|
pstrScanResult->u8index,pstrScanResult->s8rssi,
|
|
pstrScanResult->u8AuthType,
|
|
pstrScanResult->u8ch,
|
|
pstrScanResult->au8BSSID[0], pstrScanResult->au8BSSID[1], pstrScanResult->au8BSSID[2],
|
|
pstrScanResult->au8BSSID[3], pstrScanResult->au8BSSID[4], pstrScanResult->au8BSSID[5],
|
|
pstrScanResult->au8SSID);
|
|
|
|
if(u8ScanResultIdx < u8NumFoundAPs)
|
|
{
|
|
// Read the next scan result
|
|
m2m_wifi_req_scan_result(index);
|
|
u8ScanResultIdx ++;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
// Scan all channels
|
|
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
uint8_t m2m_wifi_get_num_ap_found(void);
|
|
|
|
/*!
|
|
@ingroup WLANSCAN
|
|
@fn \
|
|
int8_t m2m_wifi_req_scan_result(uint8_t index);
|
|
|
|
@brief
|
|
Asynchronous API to request the information of an access point discovered via scanning.
|
|
|
|
@details
|
|
This function allows the information of any discovered access point to be retrieved. When a
|
|
scan is completed, the application is informed of the number of networks (access points)
|
|
discovered. Calling this function with an index, N, will return the information for the Nth
|
|
access point. The information will be returned to the application via a
|
|
@ref M2M_WIFI_RESP_SCAN_RESULT event, and the response data may be obtained through casting
|
|
the pointer (pvMsg) to @ref tstrM2mWifiscanResult.
|
|
|
|
@param[in] index
|
|
Index for the requested result, the index range start from 0 till number of AP's found.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tstrM2mWifiscanResult
|
|
m2m_wifi_get_num_ap_found
|
|
m2m_wifi_request_scan
|
|
|
|
@pre
|
|
- @ref m2m_wifi_request_scan must be called first to ensure up to date results are available.
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered
|
|
in order to receive scan data after calling this function. Registration of the callback
|
|
is done via the @ref m2m_wifi_init function.
|
|
- The event @ref M2M_WIFI_RESP_SCAN_RESULT must be handled in the callback to receive the
|
|
requested scan information.
|
|
|
|
@warning
|
|
- This API is valid only for STA mode, it may be called regardless of the connection state (connected or disconnected).
|
|
- Calling this function without first issuing a scan request may lead to stale data being recovered.
|
|
- Application code should refrain from introducing significant delays between issuing the scan
|
|
request and scan result requests.
|
|
|
|
@section WIFIExample8 Example
|
|
The code snippet demonstrates an example of how the scan request is called from the application's main function and
|
|
the handling of the events received in the response.
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
static uint8_t u8ScanResultIdx = 0;
|
|
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_SCAN_DONE:
|
|
{
|
|
tstrM2mScanDone *pstrInfo = (tstrM2mScanDone*)pvMsg;
|
|
|
|
printf("Num of AP found %d\n",pstrInfo->u8NumofCh);
|
|
if(pstrInfo->s8ScanState == M2M_SUCCESS)
|
|
{
|
|
u8ScanResultIdx = 0;
|
|
if(pstrInfo->u8NumofCh >= 1)
|
|
{
|
|
m2m_wifi_req_scan_result(u8ScanResultIdx);
|
|
u8ScanResultIdx ++;
|
|
}
|
|
else
|
|
{
|
|
printf("No AP Found Rescan\n");
|
|
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("(ERR) Scan fail with error <%d>\n",pstrInfo->s8ScanState);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case M2M_WIFI_RESP_SCAN_RESULT:
|
|
{
|
|
tstrM2mWifiscanResult *pstrScanResult =(tstrM2mWifiscanResult*)pvMsg;
|
|
uint8_t u8NumFoundAPs = m2m_wifi_get_num_ap_found();
|
|
|
|
printf(">>%02d RI %d SEC %s CH %02d BSSID %02X:%02X:%02X:%02X:%02X:%02X SSID %s\n",
|
|
pstrScanResult->u8index,pstrScanResult->s8rssi,
|
|
pstrScanResult->u8AuthType,
|
|
pstrScanResult->u8ch,
|
|
pstrScanResult->au8BSSID[0], pstrScanResult->au8BSSID[1], pstrScanResult->au8BSSID[2],
|
|
pstrScanResult->au8BSSID[3], pstrScanResult->au8BSSID[4], pstrScanResult->au8BSSID[5],
|
|
pstrScanResult->au8SSID);
|
|
|
|
if(u8ScanResultIdx < u8NumFoundAPs)
|
|
{
|
|
// Read the next scan result
|
|
m2m_wifi_req_scan_result(index);
|
|
u8ScanResultIdx ++;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
// Scan all channels
|
|
m2m_wifi_request_scan(M2M_WIFI_CH_ALL);
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_req_scan_result(uint8_t index);
|
|
|
|
/*!
|
|
@ingroup WLANCONNECT
|
|
@fn \
|
|
int8_t m2m_wifi_req_curr_rssi(void);
|
|
|
|
@brief
|
|
Asynchronous API to request the current Receive Signal Strength (RSSI) of the current connection.
|
|
|
|
@details
|
|
This function will result in the application receiving the RSSI via a
|
|
@ref M2M_WIFI_RESP_CURRENT_RSSI event.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered
|
|
during initialization. Registration of the callback is done through passing it to @ref m2m_wifi_init
|
|
via the @ref tstrWifiInitParam initialization structure.
|
|
- The event @ref M2M_WIFI_RESP_CURRENT_RSSI must be handled in the callback to receive the requested Rssi information.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@section WIFIExample9 Example
|
|
The code snippet demonstrates how the RSSI request is called in the application's main function and the handling of the event received in the callback.
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
void wifi_event_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
static uint8_t u8ScanResultIdx = 0;
|
|
|
|
switch(u8WiFiEvent)
|
|
{
|
|
case M2M_WIFI_RESP_CURRENT_RSSI:
|
|
{
|
|
int8_t *rssi = (int8_t*)pvMsg;
|
|
M2M_INFO("ch rssi %d\n",*rssi);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
tstrWifiInitParam param;
|
|
|
|
param.pfAppWifiCb = wifi_event_cb;
|
|
if(!m2m_wifi_init(¶m))
|
|
{
|
|
// Scan all channels
|
|
m2m_wifi_req_curr_rssi();
|
|
|
|
while(1)
|
|
{
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_req_curr_rssi(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONF
|
|
@fn \
|
|
int8_t m2m_wifi_get_otp_mac_address(uint8_t *pu8MacAddr, uint8_t * pu8IsValid);
|
|
|
|
@brief
|
|
Synchronous API to query the MAC address programmed into the WINC OTP memory.
|
|
|
|
@details
|
|
This function attempts to read the device's MAC address from the One Time Programmable (OTP)
|
|
memory on the WINC. The presence (yes or no) of a MAC address in the OTP memory and, in the case
|
|
of it being present, its value is returned via RAM pointed to by the input arguments.
|
|
|
|
Request the MAC address stored on the One Time Programmable(OTP) memory of the device.
|
|
The function is blocking until the response is received.
|
|
|
|
@pre
|
|
Prior call to @ref m2m_wifi_init is required before any WIFI/socket function.
|
|
|
|
@param[out] pu8MacAddr
|
|
Output MAC address buffer 6 bytes in size. Valid only if *pu8Valid=1.
|
|
|
|
@param[out] pu8IsValid
|
|
A boolean value set by the callee to indicate the validity of pu8MacAddr in OTP. If no MAC has
|
|
been programmed in the OTP the value of this parameter will be zero; otherwise it will be non-zero.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_get_mac_address
|
|
*/
|
|
int8_t m2m_wifi_get_otp_mac_address(uint8_t *pu8MacAddr, uint8_t *pu8IsValid);
|
|
|
|
/*!
|
|
@ingroup WLANCONF
|
|
@fn \
|
|
int8_t m2m_wifi_get_mac_address(uint8_t *pu8MacAddr)
|
|
|
|
@brief
|
|
Synchronous API to retrieve the MAC address currently in use by the device.
|
|
|
|
@details
|
|
This function obtains the MAC address that is currently in use by the device. If the function
|
|
returns with @ref M2M_SUCCESS then the content of the memory referenced by pu8MacAddr will be
|
|
populated with the 6 byte MAC address; otherwise, that memory will be left unchanged.
|
|
|
|
@pre
|
|
Prior call to @ref m2m_wifi_init is required before any WIFI/socket function.
|
|
|
|
@param[out] pu8MacAddr
|
|
Pointer to a buffer in memory containing a 6-byte MAC address (provided function returns @ref M2M_SUCCESS).
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operation and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_get_otp_mac_address
|
|
*/
|
|
int8_t m2m_wifi_get_mac_address(uint8_t *pu8MacAddr);
|
|
|
|
/*!
|
|
@ingroup WLANPS
|
|
@fn \
|
|
int8_t m2m_wifi_set_sleep_mode(uint8_t PsTyp, uint8_t BcastEn);
|
|
|
|
@brief
|
|
Synchronous API to set the power-save mode of the WINC.
|
|
|
|
@details
|
|
This is one of the two synchronous power-save setting functions that allow the host MCU application
|
|
to tweak the system power consumption. Such tweaking can be done through one of two ways:
|
|
- 1) Changing the power save mode, to one of the allowed power save modes (see @ref tenuPowerSaveModes). This is done by setting the first parameter.
|
|
- 2) Configuring DTIM monitoring: Configuring beacon monitoring parameters by enabling or disabling the reception of broadcast/multicast data.
|
|
This is done by setting the second parameter.
|
|
|
|
@param[in] PsTyp
|
|
Desired power saving mode. Supported types are enumerated in @ref tenuPowerSaveModes.
|
|
|
|
@param[in] BcastEn
|
|
Broadcast reception enable flag.
|
|
If set to 1, the WINC will wake for each DTIM beacon to ensure broadcast traffic can be received.
|
|
If set to 0, the WINC will not wakeup at the DTIM beacon, ignoring broadcast traffic, instead it will
|
|
wake every N beacon periods, as per the negotiated Listen Interval.
|
|
|
|
@warning
|
|
The function called once after initialization.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operation and a negative value otherwise.
|
|
|
|
@see
|
|
tenuPowerSaveModes
|
|
m2m_wifi_get_sleep_mode
|
|
m2m_wifi_set_lsn_int
|
|
*/
|
|
int8_t m2m_wifi_set_sleep_mode(uint8_t PsTyp, uint8_t BcastEn);
|
|
|
|
/*!
|
|
@ingroup WLANPS
|
|
@fn \
|
|
int8_t m2m_wifi_request_sleep(uint32_t u32SlpReqTime);
|
|
|
|
@brief
|
|
Asynchronous API to place the WINC into sleep mode for a specified period of time.
|
|
|
|
@details
|
|
Power-save sleep request function, which requests the WINC device to sleep in the currently configured
|
|
power save mode, as set using @ref m2m_wifi_set_sleep_mode, for a specific time as defined by the parameter
|
|
u32SlpReqTime (measured in milliseconds).
|
|
This function should be used when the WINC is running in @ref M2M_PS_MANUAL power save mode only.
|
|
A wake up request is automatically performed by the WINC device when any host driver API function, e.g. Wi-Fi or socket operation is called.
|
|
|
|
@param[in] u32SlpReqTime
|
|
Request sleep time in ms.\n
|
|
The best recommended sleep duration is left to be determined by the application.
|
|
Taking into account that if the application sends notifications very rarely,
|
|
sleeping for a long time can be a power-efficient decision.
|
|
In contrast, applications that are sensitive for long periods of absence can experience
|
|
performance degradation in the connection if long sleeping times are used.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operation and a negative value otherwise.
|
|
|
|
@warning
|
|
- This API is currently unsupported on the WINC3400
|
|
|
|
@see
|
|
tenuPowerSaveModes
|
|
m2m_wifi_set_sleep_mode
|
|
*/
|
|
int8_t m2m_wifi_request_sleep(uint32_t u32SlpReqTime);
|
|
|
|
/*!
|
|
@ingroup WLANPS
|
|
@fn \
|
|
uint8_t m2m_wifi_get_sleep_mode(void);
|
|
|
|
@brief
|
|
Synchronous API to retrieve the current power save mode of the WINC.
|
|
|
|
@return
|
|
The current operating power saving mode. The value will be one of those from the enumerated type @ref tenuPowerSaveModes.
|
|
|
|
@see
|
|
tenuPowerSaveModes
|
|
m2m_wifi_set_sleep_mode
|
|
*/
|
|
uint8_t m2m_wifi_get_sleep_mode(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONF
|
|
@fn \
|
|
int8_t m2m_wifi_set_device_name(uint8_t *pu8DeviceName, uint8_t u8DeviceNameLength);
|
|
|
|
@brief
|
|
Asynchronous API to set the Wi-Fi Direct "Device Name" of the WINC.
|
|
|
|
@details
|
|
Sets the WINC device name. The name string is used as a device name in DHCP
|
|
hostname (option 12).
|
|
If a device is not set through this function a default name is assigned.
|
|
The default name is WINC-XX-YY, where XX and YY are the last 2 octets of the OTP
|
|
MAC address. If OTP (eFuse) is programmed, then the default name is WINC-00-00.
|
|
|
|
@warning
|
|
The function called once after initialization.\n
|
|
Used for DHCP client hostname option (12).\n
|
|
Device name shall contain only characters allowed in valid internet host name as
|
|
defined in RFC 952 and 1123.
|
|
|
|
@param[in] pu8DeviceName
|
|
Buffer holding the device name. Device name is a null terminated C string.
|
|
|
|
@param[in] u8DeviceNameLength
|
|
Length of the device name. Should not exceed the maximum device name's
|
|
length @ref M2M_DEVICE_NAME_MAX (including null character).
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_set_device_name(uint8_t *pu8DeviceName, uint8_t u8DeviceNameLength);
|
|
|
|
/*!
|
|
@ingroup WLANTIME
|
|
@fn \
|
|
int8_t m2m_wifi_configure_sntp(uint8_t *pu8NTPServerName, uint8_t u8NTPServerNameLength, tenuSNTPUseDHCP useDHCP);
|
|
|
|
@brief
|
|
Configures what NTP server the SNTP client should use.
|
|
|
|
@details
|
|
Configures what NTP server the SNTP client should use. Only 1 server name can be provided, if the configured server name begins with an asterisk then it will be treated as a server pool.
|
|
The SNTP client can also use the NTP server provided by the DHCP server through option 42.
|
|
By default the NTP server provided by DHCP will be tried first, then the built-in default NTP server (time.nist.gov) will be used.
|
|
|
|
@param[in] pu8NTPServerName
|
|
Buffer holding the NTP server name. If the first character is an asterisk (*) then it will be treated as a server pool, where the asterisk will
|
|
be replaced with an incrementing value from 0 to 3 each time a server fails (example: *.pool.ntp.org).
|
|
|
|
@param[in] u8NTPServerNameLength
|
|
Length of the NTP server name. Should not exceed the maximum NTP server name length of @ref M2M_NTP_MAX_SERVER_NAME_LENGTH.
|
|
|
|
@param[in] useDHCP
|
|
Explicity tell the WINC if it should use the NTP server provided by the DHCP server or not.
|
|
|
|
@warning
|
|
SNTP should be configured before the connection takes place. If SNTP is configured after the device connects to a
|
|
network, the new configuration can take a minimum of 24h to be applied. However, it can take even longer since it is
|
|
triggered by DHCP renewal.
|
|
Currently there is also a known issue in which if the WINC obtains the NTP server from DHCP and then connects to a
|
|
different network, it will still use the NTP from the previous network.
|
|
Configuring a server name will overwrite the built-in default server until next reboot.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_configure_sntp(uint8_t *pu8NTPServerName, uint8_t u8NTPServerNameLength, tenuSNTPUseDHCP useDHCP);
|
|
|
|
/*!
|
|
@ingroup WLANPS
|
|
@fn \
|
|
int8_t m2m_wifi_set_lsn_int(tstrM2mLsnInt * pstrM2mLsnInt);
|
|
|
|
@brief
|
|
Asynchronous API to set Wi-Fi listen interval for power save operation.
|
|
|
|
@details
|
|
This is one of the two synchronous power-save setting functions that
|
|
allow the host MCU application to tweak the system power consumption. Such tweaking can be done by modifying the
|
|
Wi-Fi listen interval. The listen interval is how many beacon periods the station can sleep before it wakes up to receive data buffered in the AP.
|
|
It is represented in units of AP beacon periods(100ms).
|
|
|
|
@warning
|
|
The function should be called once after initialization.
|
|
|
|
@param[in] pstrM2mLsnInt
|
|
Structure holding the listen interval configuration.
|
|
|
|
@pre
|
|
The function @ref m2m_wifi_set_sleep_mode shall be called first, to set the power saving mode required.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tstrM2mLsnInt
|
|
m2m_wifi_set_sleep_mode
|
|
*/
|
|
int8_t m2m_wifi_set_lsn_int(tstrM2mLsnInt *pstrM2mLsnInt);
|
|
|
|
/**@cond MON_DOC
|
|
*/
|
|
/*!
|
|
@ingroup WLANMON
|
|
@fn \
|
|
int8_t m2m_wifi_enable_monitoring_mode(tstrM2MWifiMonitorModeCtrl *, uint8_t *, uint16_t , uint16_t);
|
|
|
|
@brief
|
|
Asynchronous call to enable Wi-Fi monitoring (promiscuous receive) mode.
|
|
|
|
@details
|
|
Wi-Fi monitoring mode (Promiscuous mode) enabling function.
|
|
This function enables the monitoring mode, thus allowing two operations to be
|
|
performed:
|
|
1) Transmission of manually configured frames, through using the
|
|
@ref m2m_wifi_send_wlan_pkt function.
|
|
2) Reception of frames based on a defined filtering criteria.
|
|
|
|
Enabling monitoring mode allows for reception of all frames that satisfy the filter criteria in the input parameter and are received on the current wireless channel.
|
|
All packets that meet the filtering criteria are passed to the application layer, to
|
|
be handled by the assigned monitoring callback function.
|
|
The monitoring callback function must be implemented before starting the monitoring mode,
|
|
in-order to handle the packets received.
|
|
|
|
A dedicated callback function, @ref tpfAppMonCb, must be registered to handle frames received in
|
|
promiscuous mode. This is done via an instance of a @ref tstrWifiInitParam structure and a call to
|
|
the @ref m2m_wifi_init function.
|
|
|
|
@param[in] pstrMtrCtrl
|
|
Pointer to @ref tstrM2MWifiMonitorModeCtrl structure holding the filtering parameters.
|
|
|
|
@param[in] pu8PayloadBuffer
|
|
Pointer to a Buffer allocated by the application. The buffer SHALL hold the Data field of
|
|
the WIFI RX Packet (Or a part from it). If it is set to NULL, the WIFI data payload will
|
|
be discarded by the monitoring driver.
|
|
|
|
@param[in] u16BufferSize
|
|
The total size of the pu8PayloadBuffer in bytes.
|
|
|
|
@param[in] u16DataOffset
|
|
Starting offset in the DATA FIELD of the received WIFI packet. The application may be interested
|
|
in reading specific information from the received packet. It must assign the offset to the starting
|
|
position of it relative to the DATA payload start.\n
|
|
\e Example, \e if \e the \e SSID \e is \e needed \e to \e be \e read \e from \e a \e PROBE \e REQ
|
|
\e packet, \e the \e u16Offset \e MUST \e be \e set \e to \e 0.
|
|
|
|
@warning
|
|
This mode is available as sniffer ONLY, the WINC cannot be connected in any modes (Station, Access Point or P2P).
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
tstrM2MWifiMonitorModeCtrl
|
|
tstrM2MWifiRxPacketInfo
|
|
tstrWifiInitParam
|
|
tenuM2mScanCh
|
|
m2m_wifi_disable_monitoring_mode
|
|
m2m_wifi_send_wlan_pkt
|
|
m2m_wifi_send_ethernet_pkt
|
|
|
|
@section WIFIExample10 Example
|
|
The example demonstrates the main function where-by the monitoring enable function is called after
|
|
the initialization of the driver and the packets are handled in the callback function.
|
|
|
|
@code
|
|
#include "m2m_wifi.h"
|
|
#include "m2m_types.h"
|
|
|
|
//Declare receive buffer
|
|
uint8_t gmgmt[1600];
|
|
|
|
//Callback functions
|
|
void wifi_cb(uint8_t u8WiFiEvent, void * pvMsg)
|
|
{
|
|
;
|
|
}
|
|
|
|
void wifi_monitoring_cb(tstrM2MWifiRxPacketInfo *pstrWifiRxPacket, uint8_t *pu8Payload, uint16_t u16PayloadSize)
|
|
{
|
|
if((NULL != pstrWifiRxPacket) && (0 != u16PayloadSize)) {
|
|
if(MANAGEMENT == pstrWifiRxPacket->u8FrameType) {
|
|
M2M_INFO("***# MGMT PACKET #***\n");
|
|
} else if(DATA_BASICTYPE == pstrWifiRxPacket->u8FrameType) {
|
|
M2M_INFO("***# DATA PACKET #***\n");
|
|
} else if(CONTROL == pstrWifiRxPacket->u8FrameType) {
|
|
M2M_INFO("***# CONTROL PACKET #***\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
//Register wifi_monitoring_cb
|
|
tstrWifiInitParam param;
|
|
param.pfAppWifiCb = wifi_cb;
|
|
param.pfAppMonCb = wifi_monitoring_cb;
|
|
|
|
nm_bsp_init();
|
|
|
|
if(!m2m_wifi_init(¶m)) {
|
|
//Enable Monitor Mode with filter to receive all data frames on channel 1
|
|
tstrM2MWifiMonitorModeCtrl strMonitorCtrl = {0};
|
|
strMonitorCtrl.u8ChannelID = M2M_WIFI_CH_1;
|
|
strMonitorCtrl.u8FrameType = DATA_BASICTYPE;
|
|
strMonitorCtrl.u8FrameSubtype = M2M_WIFI_FRAME_SUB_TYPE_ANY; //Receive any subtype of data frame
|
|
m2m_wifi_enable_monitoring_mode(&strMonitorCtrl, gmgmt, sizeof(gmgmt), 0);
|
|
|
|
while(1) {
|
|
m2m_wifi_handle_events(NULL);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_enable_monitoring_mode(tstrM2MWifiMonitorModeCtrl *pstrMtrCtrl, uint8_t *pu8PayloadBuffer,
|
|
uint16_t u16BufferSize, uint16_t u16DataOffset);
|
|
|
|
/*!
|
|
@ingroup WLANMON
|
|
@fn \
|
|
int8_t m2m_wifi_disable_monitoring_mode(void);
|
|
|
|
@brief
|
|
Asynchronous API to disable Wi-Fi monitoring (promiscuous receive) mode.
|
|
|
|
@details
|
|
Disable Wi-Fi monitoring mode (Promiscuous mode). Expected to be called if the monitoring mode is already enabled,
|
|
but if it was called without enabling it, no negative impact will reside.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_enable_monitoring_mode
|
|
*/
|
|
int8_t m2m_wifi_disable_monitoring_mode(void);
|
|
|
|
/*!
|
|
@ingroup WLANMON
|
|
@fn \
|
|
int8_t m2m_wifi_send_wlan_pkt(uint8_t *, uint16_t, uint16_t);
|
|
|
|
@brief
|
|
Asynchronous API to queue a raw Wi-Fi packet for transmission by the WINC.
|
|
|
|
@pre
|
|
Enable Monitoring mode first using @ref m2m_wifi_enable_monitoring_mode
|
|
|
|
@note
|
|
The application is responsible for the packets.
|
|
|
|
@warning
|
|
This function is only useful when operating in monitoring mode.
|
|
|
|
@param[in] pu8WlanPacket
|
|
Pointer to a buffer holding the whole WIFI frame.
|
|
|
|
@param[in] u16WlanHeaderLength
|
|
The size of the WIFI packet header ONLY.
|
|
|
|
@param[in] u16WlanPktSize
|
|
The size of the whole packet in bytes.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_enable_monitoring_mode
|
|
m2m_wifi_disable_monitoring_mode
|
|
*/
|
|
int8_t m2m_wifi_send_wlan_pkt(uint8_t *pu8WlanPacket, uint16_t u16WlanHeaderLength, uint16_t u16WlanPktSize);
|
|
/**@endcond*/ //MON_DOC
|
|
|
|
/*!
|
|
@ingroup WLANETH
|
|
@fn \
|
|
int8_t m2m_wifi_send_ethernet_pkt(uint8_t* pu8Packet,uint16_t u16PacketSize);
|
|
|
|
@brief
|
|
Asynchronous API to queue an Ethernet packet for transmission by the WINC.
|
|
|
|
@details
|
|
Transmit a packet directly in ETHERNET/bypass mode where the TCP/IP stack is disabled
|
|
and the implementation of this packet is left to the application developer.
|
|
The Ethernet packet composition is left to the application developer.
|
|
|
|
@note
|
|
Packets are the user's responsibility.
|
|
|
|
@warning
|
|
This function available in ETHERNET/Bypass mode ONLY. Make sure that application defines ETH_MODE.
|
|
|
|
@param[in] pu8Packet
|
|
Pointer to a buffer holding the whole Ethernet frame.
|
|
|
|
@param[in] u16PacketSize
|
|
The size of the whole packet in bytes.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_enable_mac_mcast
|
|
m2m_wifi_set_receive_buffer
|
|
*/
|
|
int8_t m2m_wifi_send_ethernet_pkt(uint8_t *pu8Packet, uint16_t u16PacketSize);
|
|
|
|
/*!
|
|
@ingroup WLANTIME
|
|
@fn \
|
|
int8_t m2m_wifi_enable_sntp(uint8_t);
|
|
|
|
@brief
|
|
Asynchronous API to enable or disable the native Simple Network Time Protocol(SNTP) client running on the WINC.
|
|
|
|
@details
|
|
The SNTP client is enabled by default during chip initialization. This function can be used to
|
|
disable or subsequently re-enable the service.
|
|
|
|
The service is capable of synchronizing the WINC system clock to the UTC time from a well-known
|
|
(and trusted) time server, for example "time.nist.gov". By default the SNTP client will update the
|
|
system time once every 24 hours. The ability to track the time accurately is important for various
|
|
applications such as checking expiry of X509 certificates during TLS (Transport Layer Security)
|
|
session establishment.
|
|
|
|
It is highly recommended to leave SNTP enabled if there is no alternative source of timing
|
|
information. For systems including an RTC device, SNTP may not be needed and the WINC's time
|
|
may be set using the @ref m2m_wifi_set_system_time function.
|
|
|
|
@param[in] bEnable
|
|
Enables or disables the SNTP service
|
|
'0' :disable SNTP
|
|
'1' :enable SNTP
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_set_system_time
|
|
*/
|
|
int8_t m2m_wifi_enable_sntp(uint8_t bEnable);
|
|
|
|
/*!
|
|
@ingroup WLANTIME
|
|
@fn \
|
|
int8_t m2m_wifi_set_system_time(uint32_t);
|
|
|
|
@brief
|
|
Asynchronous function for setting the system time within the WINC.
|
|
|
|
@details
|
|
Function for setting the system time in time/date format (@ref uint32_t).
|
|
The @ref tstrSystemTime structure can be used as a reference to the time values that
|
|
should be set and pass its value as @ref uint32_t.
|
|
|
|
@param[in] u32UTCSeconds
|
|
Seconds elapsed since January 1, 1900 (NTP Timestamp).
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_enable_sntp
|
|
tstrSystemTime
|
|
|
|
@note
|
|
If there is an RTC on the host MCU, the SNTP may be disabled and the host may set the system
|
|
time within the firmware using the API @ref m2m_wifi_set_system_time.
|
|
*/
|
|
int8_t m2m_wifi_set_system_time(uint32_t u32UTCSeconds);
|
|
|
|
/*!
|
|
@ingroup WLANTIME
|
|
@fn \
|
|
int8_t m2m_wifi_get_system_time(void);
|
|
|
|
@brief
|
|
Asynchronous API to obtain the system time in use by the WINC.
|
|
|
|
@details
|
|
This function will request the WINC to report its current system time to the application. The
|
|
information will arrive at the application via the @ref tpfAppWifiCb and event @ref M2M_WIFI_RESP_GET_SYS_TIME.
|
|
Response time retrieved is parsed into the members defined in the structure @ref tstrSystemTime.
|
|
|
|
@note
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered
|
|
during initialization. Registration of the callback is done via the @ref m2m_wifi_init API.
|
|
- The event @ref M2M_WIFI_RESP_GET_SYS_TIME must be handled in the callback.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_enable_sntp
|
|
tstrSystemTime
|
|
*/
|
|
int8_t m2m_wifi_get_system_time(void);
|
|
|
|
/*!
|
|
@ingroup WLANCONF
|
|
@fn \
|
|
int8_t m2m_wifi_set_cust_InfoElement(uint8_t*);
|
|
|
|
@brief
|
|
Asynchronous API to add or remove a user-defined Information Element.
|
|
|
|
@details
|
|
This function allows the application to provide a custom Information Element to the
|
|
WINC that will be included in all beacon and probe response frames, while in Access Point mode.
|
|
If it is required to delete these IEs, fill the buffer with zeros.
|
|
|
|
@param[in] pau8M2mCustInfoElement
|
|
Pointer to Buffer containing the IE to be used. It is the application developer's
|
|
responsibility to ensure on the correctness of the information element's ordering
|
|
passed in.
|
|
If the pointer is null, this removes any current custom IE. If non-null, the pointer
|
|
must reference data in the following format:
|
|
|
|
@verbatim
|
|
--------------- ---------- ---------- ------------------- -------- -------- ----------- -----------------------
|
|
| Byte[0] | Byte[1] | Byte[2] | Byte[3:length1+2] | ..... | Byte[n] | Byte[n+1] | Byte[n+2:lengthx+2] |
|
|
|---------------|----------|----------|-------------------|-------- --------|-----------|---------------------|
|
|
| #of all Bytes | IE1 ID | Length1 | Data1(Hex Coded) | ..... | IEx ID | Lengthx | Datax(Hex Coded) |
|
|
--------------- ---------- ---------- ------------------- -------- -------- ----------- -----------------------
|
|
@endverbatim
|
|
|
|
@warning
|
|
Size of All elements combined must not exceed 255 byte.
|
|
Used in Access Point Mode.
|
|
|
|
@note
|
|
IEs Format will follow the above format.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_enable_sntp
|
|
|
|
@section WIFIExample11 Example
|
|
The example demonstrates how the information elements are set using this function.
|
|
@code
|
|
char elementData[21];
|
|
static char state = 0; // To Add, Append, and Delete
|
|
if(0 == state) { //Add 3 IEs
|
|
state = 1;
|
|
//Total Number of Bytes
|
|
elementData[0]=12;
|
|
//First IE
|
|
elementData[1]=200; elementData[2]=1; elementData[3]='A';
|
|
//Second IE
|
|
elementData[4]=201; elementData[5]=2; elementData[6]='B'; elementData[7]='C';
|
|
//Third IE
|
|
elementData[8]=202; elementData[9]=3; elementData[10]='D'; elementData[11]=0; elementData[12]='F';
|
|
} else if(1 == state) {
|
|
//Append 2 IEs to others, Notice that we keep old data in array starting with\n
|
|
//element 13 and total number of bytes increased to 20
|
|
state = 2;
|
|
//Total Number of Bytes
|
|
elementData[0]=20;
|
|
//Fourth IE
|
|
elementData[13]=203; elementData[14]=1; elementData[15]='G';
|
|
//Fifth IE
|
|
elementData[16]=204; elementData[17]=3; elementData[18]='X'; elementData[19]=5; elementData[20]='Z';
|
|
} else if(2 == state) { //Delete All IEs
|
|
state = 0;
|
|
//Total Number of Bytes
|
|
elementData[0]=0;
|
|
}
|
|
m2m_wifi_set_cust_InfoElement(elementData);
|
|
@endcode
|
|
*/
|
|
int8_t m2m_wifi_set_cust_InfoElement(uint8_t *pau8M2mCustInfoElement);
|
|
|
|
/*!
|
|
@ingroup WLANPS
|
|
@fn \
|
|
int8_t m2m_wifi_set_power_profile(uint8_t u8PwrMode);
|
|
|
|
@brief
|
|
Change the power profile mode.
|
|
|
|
@param[in] u8PwrMode
|
|
Change the WINC power profile to different mode based on the enumeration @ref tenuM2mPwrMode.\n
|
|
Not implemented in WINC3400 firmware.
|
|
|
|
@warning
|
|
May only be called after initialization, before any connection request, and may not be used to change
|
|
the power mode thereafter.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
|
|
@see
|
|
tenuM2mPwrMode
|
|
m2m_wifi_init
|
|
*/
|
|
int8_t m2m_wifi_set_power_profile(uint8_t u8PwrMode);
|
|
|
|
/*!
|
|
@ingroup WLANCONF
|
|
@fn \
|
|
int8_t m2m_wifi_set_tx_power(uint8_t u8TxPwrLevel);
|
|
|
|
@brief
|
|
Set the TX power tenuM2mTxPwrLevel.
|
|
|
|
@param[in] u8TxPwrLevel
|
|
Change the TX power based on the enumeration @ref tenuM2mTxPwrLevel.
|
|
|
|
@pre
|
|
Must be called after the initialization and before any connection request and can't be changed in runtime.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
|
|
@see
|
|
tenuM2mTxPwrLevel
|
|
m2m_wifi_init
|
|
*/
|
|
int8_t m2m_wifi_set_tx_power(uint8_t u8TxPwrLevel);
|
|
|
|
/*!
|
|
@ingroup WLANLOG
|
|
@fn \
|
|
int8_t m2m_wifi_enable_firmware_logs(uint8_t u8Enable);
|
|
|
|
@brief
|
|
Enable or Disable logs in run time.
|
|
|
|
@details
|
|
Enable or Disable logs in run time (Disable Firmware logs will enhance the firmware start-up time and performance).
|
|
|
|
@param[in] u8Enable
|
|
Set 1 to enable the logs, 0 for disable.
|
|
|
|
@pre
|
|
Must be called after initialization through the following function @ref m2m_wifi_init.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
|
|
@see
|
|
__DISABLE_FIRMWARE_LOGS__ (build option to disable logs from initializations)
|
|
m2m_wifi_init
|
|
*/
|
|
int8_t m2m_wifi_enable_firmware_logs(uint8_t u8Enable);
|
|
|
|
/*!
|
|
@ingroup WLANCONF
|
|
@fn \
|
|
int8_t m2m_wifi_set_battery_voltage(uint16_t u16BattVoltx100);
|
|
|
|
@brief
|
|
Set the battery voltage to update the firmware calculations.\n
|
|
Not implemented in WINC3400 firmware.
|
|
|
|
@pre
|
|
Must be called after initialization through the following function @ref m2m_wifi_init.
|
|
|
|
@param [in] u16BattVoltx100
|
|
Battery voltage multiplied by 100
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
*/
|
|
int8_t m2m_wifi_set_battery_voltage(uint16_t u16BattVoltx100);
|
|
|
|
/*!
|
|
@ingroup WLANETH
|
|
@fn \
|
|
int8_t m2m_wifi_enable_mac_mcast(uint8_t *pu8MulticastMacAddress, uint8_t u8AddRemove);
|
|
|
|
@brief
|
|
Asynchronous API to add or remove MAC addresses to the multicast filter.
|
|
|
|
@details
|
|
This function will configure the WINC to receive/ignore multicast packets from certain
|
|
MAC address groups when operating in bypass mode.
|
|
This function requests the given MAC addresses to be added/removed from the multicast filter.
|
|
|
|
@param[in] pu8MulticastMacAddress
|
|
Pointer to MAC address
|
|
|
|
@param[in] u8AddRemove
|
|
A flag to add or remove the MAC ADDRESS, based on the following values:
|
|
- 0 : remove MAC address
|
|
- 1 : add MAC address
|
|
|
|
@note
|
|
Maximum number of MAC addresses that could be added is 8.
|
|
|
|
@warning
|
|
This function is available in ETHERNET/bypass mode ONLY.
|
|
Make sure that the application defines ETH_MODE.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_set_receive_buffer
|
|
m2m_wifi_send_ethernet_pkt
|
|
*/
|
|
int8_t m2m_wifi_enable_mac_mcast(uint8_t *pu8MulticastMacAddress, uint8_t u8AddRemove);
|
|
|
|
/*!
|
|
@ingroup WLANETH
|
|
@fn \
|
|
int8_t m2m_wifi_set_receive_buffer(void *pvBuffer, uint16_t u16BufferLen);
|
|
|
|
@brief
|
|
Synchronous function for setting or modifying the receiver buffer's length.
|
|
|
|
@details
|
|
Synchronous function for setting or modifying the receiver buffer's length.
|
|
In the ETHERNET/bypass mode the application should define a callback of type
|
|
@ref tpfAppEthCb, through which the application handles the received
|
|
ethernet frames. It is through this callback function that the user can
|
|
dynamically modify the length of the currently used receiver buffer.
|
|
|
|
@param[in] pvBuffer
|
|
Pointer to Buffer to receive data.
|
|
NULL pointer causes a negative error @ref M2M_ERR_FAIL.
|
|
|
|
@param[in] u16BufferLen
|
|
Length of data to be received. Maximum length of data should not exceed the size defined by TCP/IP
|
|
defined as @ref SOCKET_BUFFER_MAX_LENGTH
|
|
|
|
@warning
|
|
This function is available in the Ethernet/bypass mode ONLY. Make sure that the application defines ETH_MODE.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_enable_mac_mcast
|
|
m2m_wifi_send_ethernet_pkt
|
|
*/
|
|
int8_t m2m_wifi_set_receive_buffer(void *pvBuffer, uint16_t u16BufferLen);
|
|
|
|
/*!
|
|
@ingroup WLANCRYPTO
|
|
@fn \
|
|
int8_t m2m_wifi_prng_get_random_bytes(uint8_t* pu8PrngBuff,uint16_t u16PrngSize);
|
|
|
|
@brief
|
|
Asynchronous function for retrieving from the firmware a pseudo-random set of bytes.
|
|
|
|
@details
|
|
Asynchronous function for retrieving from the firmware a pseudo-random set of bytes as specified in the size passed in as a parameter.
|
|
The registered wifi-cb function retrieves the random bytes through the response @ref M2M_WIFI_RESP_GET_PRNG
|
|
|
|
@param[in] pu8PrngBuff
|
|
Pointer to a buffer to receive data.
|
|
|
|
@param[in] u16PrngSize
|
|
Request size in bytes
|
|
|
|
@warning
|
|
Size greater than the maximum specified (@ref M2M_BUFFER_MAX_SIZE - sizeof(tstrPrng))
|
|
causes a negative error @ref M2M_ERR_FAIL.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_prng_get_random_bytes(uint8_t *pu8PrngBuff, uint16_t u16PrngSize);
|
|
|
|
/*!
|
|
@ingroup WLANROAMING
|
|
@fn \
|
|
int8_t m2m_wifi_enable_roaming(uint8_t bEnableDhcp);
|
|
|
|
@brief
|
|
Enable WiFi STA roaming.
|
|
|
|
@details
|
|
m2m_wifi_enable_roaming enables the firmware to trigger the roaming algorithm/steps on link loss with the current AP.
|
|
If roaming is successful, the @ref M2M_WIFI_RESP_CON_STATE_CHANGED message with state as @ref M2M_WIFI_ROAMED is sent to the host.
|
|
Additionally a @ref M2M_WIFI_REQ_DHCP_CONF message with new DHCP lease details is sent to host (only if bEnableDhcp=1).
|
|
If roaming is unsuccessful, a @ref M2M_WIFI_RESP_CON_STATE_CHANGED message with state as @ref M2M_WIFI_DISCONNECTED is sent to host.
|
|
|
|
@param[in] bEnableDhcp
|
|
0 : Disables DHCP client execution after roaming to new AP
|
|
1 : Enables DHCP client execution after roaming to new AP
|
|
|
|
@pre
|
|
Must be called after the initialization.
|
|
The roaming algorithm/procedure is internal to the firmware.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
*/
|
|
int8_t m2m_wifi_enable_roaming(uint8_t bEnableDhcp);
|
|
|
|
/*!
|
|
@ingroup WLANROAMING
|
|
@fn \
|
|
int8_t m2m_wifi_disable_roaming(void);
|
|
|
|
@brief
|
|
Disable WiFi STA roaming.
|
|
|
|
@pre
|
|
Must be called after the initialization.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
|
|
|
|
@see
|
|
m2m_wifi_init
|
|
*/
|
|
int8_t m2m_wifi_disable_roaming(void);
|
|
|
|
/*!
|
|
@ingroup WLANINIT
|
|
@fn \
|
|
uint8_t m2m_wifi_get_state(void);
|
|
|
|
@brief
|
|
Get the wifi state.
|
|
|
|
@return
|
|
The function returns the current wifi state (see @ref tenuWifiState for the possible states).
|
|
|
|
@note
|
|
Check the WINC state. See @ref tenuWifiState for possible states.\n
|
|
@ref WIFI_STATE_INIT state represents WINC initialized but not started, this is a suitable state
|
|
for safe flash access.
|
|
|
|
@sa
|
|
m2m_wifi_init
|
|
m2m_wifi_download_mode
|
|
*/
|
|
uint8_t m2m_wifi_get_state(void);
|
|
|
|
/*!
|
|
@ingroup BLEAPI
|
|
@fn \
|
|
int8_t m2m_wifi_ble_api_send(const uint8_t* const msg, const uint32_t len);
|
|
|
|
@brief
|
|
Asynchronous API to send an encapsulated Atmel BLE message over the Wifi Host Interface.
|
|
|
|
@param[in] msg
|
|
Pointer to the start of the BLE message to transfer down to the WINC.
|
|
|
|
@param[in] len
|
|
The length of the message in octets.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC,
|
|
and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_ble_api_send(uint8_t *msg, uint32_t len);
|
|
|
|
/*!
|
|
@ingroup BLEAPI
|
|
@fn \
|
|
int8_t m2m_wifi_ble_set_gain_table(uint8_t table_idx);
|
|
|
|
@brief
|
|
Asynchronous API that notifies the WINC with the Gain Table index from Flash that should use to configure the WiFi and BLE gains.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC,
|
|
and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_ble_set_gain_table(uint8_t table_idx);
|
|
|
|
/*!
|
|
@ingroup BLEAPI
|
|
@fn \
|
|
int8_t m2m_wifi_req_restrict_ble(void);
|
|
|
|
@brief
|
|
Asynchronous API to request restricting of BLE functionality by placing the BLE processor in a low power state.
|
|
It is recommended to do this if it is known that BLE functionality will not be used for any significant length of time.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC,
|
|
and a negative value otherwise.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered
|
|
during initialization. Registration of the callback is done via the @ref m2m_wifi_init API.
|
|
*/
|
|
int8_t m2m_wifi_req_restrict_ble(void);
|
|
|
|
/*!
|
|
@ingroup BLEAPI
|
|
@fn \
|
|
int8_t m2m_wifi_req_unrestrict_ble(void);
|
|
|
|
@brief
|
|
Asynchronous API to request un-restricting of BLE functionality by reverting the BLE processor to full power mode.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC,
|
|
and a negative value otherwise.
|
|
|
|
@pre
|
|
- A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered
|
|
during initialization. Registration of the callback is done via the @ref m2m_wifi_init API.
|
|
*/
|
|
int8_t m2m_wifi_req_unrestrict_ble(void);
|
|
|
|
/** @defgroup VERSION Version
|
|
@brief
|
|
Describes the APIs for reading the version information of the WINC firmware.
|
|
@{
|
|
@defgroup VERSIONDEF Defines
|
|
@brief
|
|
Specifies the macros and defines used by the version APIs.
|
|
|
|
@defgroup VERSIONAPI Functions
|
|
@brief
|
|
Lists the APIs for reading the version information of the WINC firmware.
|
|
@}
|
|
*/
|
|
|
|
/*!
|
|
@ingroup VERSIONAPI
|
|
@fn \
|
|
int8_t m2m_wifi_get_firmware_version(tstrM2mRev* pstrRev);
|
|
|
|
@brief
|
|
Synchronous API to obtain the firmware version currently running on the WINC.
|
|
|
|
@details
|
|
Get the Firmware version info from the active partition, as defined in the structure @ref tstrM2mRev.
|
|
|
|
@param[out] pstrRev
|
|
Pointer to a variable of type @ref tstrM2mRev, which contains the firmware version parameters.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
|
|
@pre
|
|
Must be called after initialization through the following function @ref m2m_wifi_init.
|
|
|
|
@sa
|
|
m2m_wifi_init
|
|
*/
|
|
int8_t m2m_wifi_get_firmware_version(tstrM2mRev *pstrRev);
|
|
|
|
/*!
|
|
@ingroup VERSIONAPI
|
|
@fn \
|
|
int8_t m2m_ota_get_firmware_version(tstrM2mRev *pstrRev);
|
|
|
|
@brief
|
|
Synchronous API to obtain the firmware version of the WINC image that is stored in the inactive flash partition.
|
|
This is the image that would run on the WINC if @ref m2m_ota_switch_firmware or @ref m2m_ota_rollback were called,
|
|
followed by a reset of the WINC.
|
|
|
|
@param[out] pstrRev
|
|
Pointer to variable of type @ref tstrM2mRev which contains the ota fw version parameters.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_ota_get_firmware_version(tstrM2mRev *pstrRev);
|
|
|
|
/*!
|
|
@fn \
|
|
uint32_t m2m_wifi_get_chipId(void)
|
|
|
|
@brief
|
|
Synchronous API to obtain the firmware WINC chip ID.
|
|
|
|
@return
|
|
The function returns chipID > 0 or 0 for failure.
|
|
*/
|
|
uint32_t m2m_wifi_get_chipId(void);
|
|
|
|
/*!
|
|
@ingroup OTAFUNCTIONS
|
|
@fn int8_t m2m_wifi_check_ota_rb(void);
|
|
|
|
@brief
|
|
Synchronous API to check presence and compatibility of the WINC image that is stored in the inactive flash partition.
|
|
This is the image that would run on the WINC if @ref m2m_ota_switch_firmware or @ref m2m_ota_rollback were called,
|
|
followed by a reset of the WINC.
|
|
|
|
@return
|
|
The function returns @ref M2M_SUCCESS for compatible image and a negative value otherwise.
|
|
*/
|
|
int8_t m2m_wifi_check_ota_rb(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* __M2M_WIFI_H__ */
|
|
|