|
- /**
- *
- * \file
- *
- * \brief WINC WLAN Application Interface.
- *
- * Copyright (c) 2015 - 2017 Atmel Corporation. All rights reserved.
- *
- * \asf_license_start
- *
- * \page License
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * 3. The name of Atmel may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * \asf_license_stop
- *
- */
-
- #ifndef __M2M_WIFI_H__
- #define __M2M_WIFI_H__
-
- /** \defgroup m2m_wifi WLAN
- *
- */
-
- /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
- INCLUDES
- *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
-
- #include "common/include/nm_common.h"
- #include "driver/include/m2m_types.h"
- #include "driver/source/nmdrv.h"
-
- #ifdef CONF_MGMT
-
- /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
- MACROS
- *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
- /**@defgroup WlanEnums DataTypes
- * @ingroup m2m_wifi
- * @{*/
- /*!
- @enum \
- tenuWifiFrameType
-
- @brief
- Enumeration for Wi-Fi MAC frame type codes (2-bit)
- The following types are used to identify the type of frame sent or received.
- Each frame type constitutes a number of frame subtypes as defined in @ref tenuSubTypes to specify the exact type of
- frame. Values are defined as per the IEEE 802.11 standard.
-
- @remarks
- The following frame types are useful for advanced user usage when monitoring mode is used (defining @ref CONF_MGMT)
- and the user application requires to monitor the frame transmission and reception.
- @see
- tenuSubTypes
- */
- typedef enum {
- MANAGEMENT = 0x00,
- /*!< Wi-Fi Management frame (Probe Req/Resp, Beacon, Association Req/Resp ...etc).
- */
- CONTROL = 0x04,
- /*!< Wi-Fi Control frame (eg. ACK frame).
- */
- DATA_BASICTYPE = 0x08,
- /*!< Wi-Fi Data frame.
- */
- RESERVED = 0x0C,
-
- M2M_WIFI_FRAME_TYPE_ANY = 0xFF
- /*!< Set monitor mode to receive any of the frames types
- */
- } tenuWifiFrameType;
-
- /*!
- @enum \
- tenuSubTypes
-
- @brief
- Enumeration for Wi-Fi MAC Frame subtype code (6-bit).
- The frame subtypes fall into one of the three frame type groups as defined in @ref tenuWifiFrameType
- (MANAGEMENT, CONTROL & DATA).
- Values are defined as per the IEEE 802.11 standard.
- @remarks
- The following sub-frame types are useful for advanced user usage when @ref CONF_MGMT is defined
- and the application developer requires to monitor the frame transmission and reception.
- @see
- tenuWifiFrameType
- tstrM2MWifiMonitorModeCtrl
- */
- typedef enum {
- /*!< Sub-Types related to Management Sub-Types */
- ASSOC_REQ = 0x00,
- ASSOC_RSP = 0x10,
- REASSOC_REQ = 0x20,
- REASSOC_RSP = 0x30,
- PROBE_REQ = 0x40,
- PROBE_RSP = 0x50,
- BEACON = 0x80,
- ATIM = 0x90,
- DISASOC = 0xA0,
- AUTH = 0xB0,
- DEAUTH = 0xC0,
- ACTION = 0xD0,
- /**@{*/
- /* Sub-Types related to Control */
- PS_POLL = 0xA4,
- RTS = 0xB4,
- CTS = 0xC4,
- ACK = 0xD4,
- CFEND = 0xE4,
- CFEND_ACK = 0xF4,
- BLOCKACK_REQ = 0x84,
- BLOCKACK = 0x94,
- /**@{*/
- /* Sub-Types related to Data */
- DATA = 0x08,
- DATA_ACK = 0x18,
- DATA_POLL = 0x28,
- DATA_POLL_ACK = 0x38,
- NULL_FRAME = 0x48,
- CFACK = 0x58,
- CFPOLL = 0x68,
- CFPOLL_ACK = 0x78,
- QOS_DATA = 0x88,
- QOS_DATA_ACK = 0x98,
- QOS_DATA_POLL = 0xA8,
- QOS_DATA_POLL_ACK = 0xB8,
- QOS_NULL_FRAME = 0xC8,
- QOS_CFPOLL = 0xE8,
- QOS_CFPOLL_ACK = 0xF8,
- M2M_WIFI_FRAME_SUB_TYPE_ANY = 0xFF
- /*!< Set monitor mode to receive any of the frames types
- */
- } tenuSubTypes;
-
- /*!
- @enum \
- tenuInfoElementId
-
- @brief
- Enumeration for the Wi-Fi Information Element(IE) IDs, which indicates the specific type of IEs.
- IEs are management frame information included in management frames.
- Values are defined as per the IEEE 802.11 standard.
-
- */
- typedef enum {
- ISSID = 0,
- /*!< Service Set Identifier (SSID)
- */
- ISUPRATES = 1,
- /*!< Supported Rates
- */
- IFHPARMS = 2,
- /*!< FH parameter set
- */
- IDSPARMS = 3,
- /*!< DS parameter set
- */
- ICFPARMS = 4,
- /*!< CF parameter set
- */
- ITIM = 5,
- /*!< Traffic Information Map
- */
- IIBPARMS = 6,
- /*!< IBSS parameter set
- */
- ICOUNTRY = 7,
- /*!< Country element.
- */
- IEDCAPARAMS = 12,
- /*!< EDCA parameter set
- */
- ITSPEC = 13,
- /*!< Traffic Specification
- */
- ITCLAS = 14,
- /*!< Traffic Classification
- */
- ISCHED = 15,
- /*!< Schedule.
- */
- ICTEXT = 16,
- /*!< Challenge Text
- */
- IPOWERCONSTRAINT = 32,
- /*!< Power Constraint.
- */
- IPOWERCAPABILITY = 33,
- /*!< Power Capability
- */
- ITPCREQUEST = 34,
- /*!< TPC Request
- */
- ITPCREPORT = 35,
- /*!< TPC Report
- */
- ISUPCHANNEL = 36,
- /* Supported channel list
- */
- ICHSWANNOUNC = 37,
- /*!< Channel Switch Announcement
- */
- IMEASUREMENTREQUEST = 38,
- /*!< Measurement request
- */
- IMEASUREMENTREPORT = 39,
- /*!< Measurement report
- */
- IQUIET = 40,
- /*!< Quiet element Info
- */
- IIBSSDFS = 41,
- /*!< IBSS DFS
- */
- IERPINFO = 42,
- /*!< ERP Information
- */
- ITSDELAY = 43,
- /*!< TS Delay
- */
- ITCLASPROCESS = 44,
- /*!< TCLAS Processing
- */
- IHTCAP = 45,
- /*!< HT Capabilities
- */
- IQOSCAP = 46,
- /*!< QoS Capability
- */
- IRSNELEMENT = 48,
- /*!< RSN Information Element
- */
- IEXSUPRATES = 50,
- /*!< Extended Supported Rates
- */
- IEXCHSWANNOUNC = 60,
- /*!< Extended Ch Switch Announcement
- */
- IHTOPERATION = 61,
- /*!< HT Information
- */
- ISECCHOFF = 62,
- /*!< Secondary Channel Offset
- */
- I2040COEX = 72,
- /*!< 20/40 Coexistence IE
- */
- I2040INTOLCHREPORT = 73,
- /*!< 20/40 Intolerant channel report
- */
- IOBSSSCAN = 74,
- /*!< OBSS Scan parameters
- */
- IEXTCAP = 127,
- /*!< Extended capability
- */
- IWMM = 221,
- /*!< WMM parameters
- */
- IWPAELEMENT = 221
- /*!< WPA Information Element
- */
- } tenuInfoElementId;
-
- /*!
- @struct \
- tenuWifiCapability
-
- @brief
- Enumeration for capability Information field bit.
- The value of the capability information field from the 802.11 management frames received by the wireless LAN
- interface. Defining the capabilities of the Wi-Fi system. Values are defined as per the IEEE 802.11 standard.
-
- @details
- Capabilities:-
- ESS/IBSS : Defines whether a frame is coming from an AP or not.
- POLLABLE : CF Poll-able
- POLLREQ : Request to be polled
- PRIVACY : WEP encryption supported
- SHORTPREAMBLE : Short Preamble is supported
- SHORTSLOT : Short Slot is supported
- PBCC :PBCC
- CHANNELAGILITY :Channel Agility
- SPECTRUM_MGMT :Spectrum Management
- DSSS_OFDM : DSSS-OFDM
- */
- typedef enum {
- ESS = 0x01,
- /*!< ESS capability
- */
- IBSS = 0x02,
- /*!< IBSS mode
- */
- POLLABLE = 0x04,
- /*!< CF Pollable
- */
- POLLREQ = 0x08,
- /*!< Request to be polled
- */
- PRIVACY = 0x10,
- /*!< WEP encryption supported
- */
- SHORTPREAMBLE = 0x20,
- /*!< Short Preamble is supported
- */
- SHORTSLOT = 0x400,
- /*!< Short Slot is supported
- */
- PBCC = 0x40,
- /*!< PBCC
- */
- CHANNELAGILITY = 0x80,
- /*!< Channel Agility
- */
- SPECTRUM_MGMT = 0x100,
- /*!< Spectrum Management
- */
- DSSS_OFDM = 0x2000
- /*!< DSSS-OFDM
- */
- } tenuWifiCapability;
-
- #endif
-
- /*!
- @typedef \
- tpfAppWifiCb
-
- @brief
- Wi-Fi's main callback function handler, for handling the M2M_WIFI events received on the Wi-Fi
- interface. Such notifications are received in response to Wi-Fi/P2P operations such as @ref m2m_wifi_request_scan,
- @ref m2m_wifi_connect.
- Wi-Fi/P2P operations are implemented in an asynchronous mode, and all incoming information/status
- are to be handled through this callback function when the corresponding notification is received.
- Applications are expected to assign this wi-fi callback function by calling @ref m2m_wifi_init
- @param [in] u8MsgType
- Type of notifications. 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
-
- In case Ethernet/Bypass mode is defined :
- @ref M2M_WIFI_RESP_ETHERNET_RX_PACKET
-
- In case monitoring mode is used:
- @ref M2M_WIFI_RESP_WIFI_RX_PACKET
-
- @param [in] pvMsg
- A pointer to a buffer containing the notification parameters (if any). It should be
- casted to the correct data type corresponding to the notification type.
-
- @see
- tstrM2mWifiStateChanged
- tstrM2MWPSInfo
- tstrM2mScanDone
- tstrM2mWifiscanResult
- */
- typedef void (*tpfAppWifiCb)(uint8 u8MsgType, void *pvMsg);
-
- /*!
- @typedef \
- tpfAppEthCb
-
- @brief
- ETHERNET (bypass mode) notification callback function receiving Bypass mode events as defined in
- the Wi-Fi responses enumeration @ref tenuM2mStaCmd.
-
- @param [in] u8MsgType
- Type of notification. Possible types are:
- - [M2M_WIFI_RESP_ETHERNET_RX_PACKET](@ref M2M_WIFI_RESP_ETHERNET_RX_PACKET)
-
- @param [in] pvMsg
- A pointer to a buffer containing the notification parameters (if any). It should be
- casted 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 of @ref
- M2M_WIFI_RESP_ETHERNET_RX_PACKET event.
-
- @param [in] pvControlBuf
- A pointer to control buffer describing the accompanied message.
- To be casted to @ref tstrM2mIpCtrlBuf in case of @ref M2M_WIFI_RESP_ETHERNET_RX_PACKET event.
-
- @warning
- Make sure that the application defines @ref ETH_MODE.
-
- @see
- m2m_wifi_init
-
- */
- typedef void (*tpfAppEthCb)(uint8 u8MsgType, void *pvMsg, void *pvCtrlBuf);
-
- /*!
- @typedef \
- tpfAppMonCb
-
- @brief
- Wi-Fi monitoring mode callback function. This function delivers all received wi-Fi packets through the Wi-Fi
- interface. Applications requiring to operate in the monitoring should call the asynchronous function
- m2m_wifi_enable_monitoring_mode and expect to receive the Wi-Fi packets through this callback function, when the event
- is received. To disable the monitoring mode a call to @ref m2m_wifi_disable_monitoring_mode should be made.
- @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 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 *pu8Payload, uint16 u16PayloadSize);
-
- /**
- @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.
- This structure is 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 @ref ETH_MODE before using @ref tstrEthInitParam.
-
- */
- typedef struct {
- tpfAppWifiCb pfAppWifiCb;
- /*!<
- Callback for wifi notifications.
- */
- tpfAppEthCb pfAppEthCb;
- /*!<
- Callback for Ethernet interface.
- */
- uint8 *au8ethRcvBuf;
- /*!<
- Pointer to Receive Buffer of Ethernet Packet
- */
- uint16 u16ethRcvBufSize;
- /*!<
- Size of Receive Buffer for Ethernet Packet
- */
- uint8 u8EthernetEnable;
- /*!<
- Enable Ethernet mode flag
- */
- uint8 __PAD8__;
- /*!<
- Padding
- */
- } 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 structure in the
- @ref 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
- tpfAppEthCb
- tstrEthInitParam
-
- @warning
- Make sure that ETHERNET/bypass mode is defined before using @ref tstrM2mIpCtrlBuf
-
- */
- typedef struct {
- uint16 u16DataSize;
- /*!<
- Size of the received data in bytes.
- */
- uint16 u16RemainigDataSize;
- /*!<
- 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.
- */
-
- } tstrWifiInitParam;
- //@}
- /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
- FUNCTION PROTOTYPES
- *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
- /** \defgroup WLANAPI Function
- * @ingroup m2m_wifi
- */
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** @defgroup WiFiDownloadFn m2m_wifi_download_mode
- * @ingroup WLANAPI
- * Synchronous download mode entry function that prepares the WINC board to enter the download mode, ready for the
- *firmware or certificate download. The WINC board is prepared for download, through initializations for the WINC driver
- *including bus initializations and interrupt enabling, it also halts the chip, to allow for the firmware downloads.
- * Firmware can be downloaded through a number of interfaces, UART, I2C and SPI.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API void m2m_wifi_download_mode(void);
- @brief Prepares the WINC broard before downloading any data (Firmware, Certificates .. etc)
-
- This function should called before starting to download any data to the WINC board. The WINC board is prepared
- for download, through initializations for the WINC driver including bus initializations and interrupt enabling, it also
- halts the chip, to allow for the firmware downloads Firmware can be downloaded through a number of interfaces, UART, I2C
- and SPI.
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_download_mode(void);
-
- /**@}*/
- /** @defgroup WifiInitFn m2m_wifi_init
- * @ingroup WLANAPI
- * Synchronous initialization function for the WINC driver. This function initializes the driver by, registering the
- call back function for M2M_WIFI layer(also the call back 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.
-
- Following are the possible Wi-Fi events that are expected to be received through the call back function(provided by the
- application) to the M2M_WIFI layer are :
-
- @ref M2M_WIFI_RESP_CON_STATE_CHANGED \n
- @ref M2M_WIFI_RESP_CONN_INFO \n
- @ref M2M_WIFI_REQ_DHCP_CONF \n
- @ref M2M_WIFI_REQ_WPS \n
- @ref M2M_WIFI_RESP_IP_CONFLICT \n
- @ref M2M_WIFI_RESP_SCAN_DONE \n
- @ref M2M_WIFI_RESP_SCAN_RESULT \n
- @ref M2M_WIFI_RESP_CURRENT_RSSI \n
- @ref M2M_WIFI_RESP_CLIENT_INFO \n
- @ref M2M_WIFI_RESP_PROVISION_INFO \n
- @ref M2M_WIFI_RESP_DEFAULT_CONNECT \n
- Example: \n
- In case Bypass mode is defined : \n
- @ref M2M_WIFI_RESP_ETHERNET_RX_PACKET
-
- In case Monitoring mode is used: \n
- @ref M2M_WIFI_RESP_WIFI_RX_PACKET
-
- Any application using the WINC driver must call this function at the start of its main function.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_init(tstrWifiInitParam * pWifiInitParam);
-
- @param [in] pWifiInitParam
- This is a pointer to the @ref tstrWifiInitParam structure which holds the pointer to the application WIFI layer call
- back function, monitoring mode call back and @ref tstrEthInitParam structure containing bypass mode parameters.
-
- @brief Initialize the WINC host driver.
- This function initializes the driver by, registering the call back function for M2M_WIFI layer(also the call back
- function for bypass mode/monitoring mode if defined), initializing the host interface layer and the bus interfaces.
-
- @pre
- Prior to this function call, The application should initialize the BSP using "nm_bsp_init".
- Also,application users must provide a call back function responsible for receiving all the WI-FI events that are
- received on the M2M_WIFI layer.
-
- @warning
- Failure to successfully complete function indicates that the driver couldn't be initialized and a fatal error will
- prevent the application from proceeding.
-
- @see
- nm_bsp_init
- m2m_wifi_deinit
- tenuM2mStaCmd
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_init(tstrWifiInitParam *pWifiInitParam);
- /**@}*/
- /** @defgroup WifiDeinitFn m2m_wifi_deinit
- * @ingroup WLANAPI
- * Synchronous de-initialization function to the WINC1500 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. No arguments are expected to be passed in.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_deinit(void * arg);
-
- @param [in] arg
- Generic argument. Not used in the current implementation.
- @brief Deinitilize the WINC driver and host enterface.
- This function must be called at the De-initilization stage of the application. Generally This function should be
- the last function before switching off the chip and it should be followed only by "nm_bsp_deinit" function call. Every
- function call of "nm_wifi_init" should be matched with a call to nm_wifi_deinit.
- @see
- nm_bsp_deinit
- nm_wifi_init
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_deinit(void *arg);
-
- /*!
- @fn \
- NMI_API void m2m_wifi_yield(void);
-
- @brief
- Yield from processing more synchronous M2M events
-
- @details
- This function causes the synchronous M2M event handler function to yield from processing further
- events and return control to the caller.
-
- @param [in] arg
- Opaque argument, not used in current implementation.
-
- @return
- The function returns @ref M2M_SUCCESS for successful interrupt handling and a negative value
- otherwise.
-
- @pre
- Prior to receiving Wi-Fi interrupts, 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.
- */
-
- NMI_API void m2m_wifi_yield(void);
-
- /**@}*/
- /** @defgroup WifiHandleEventsFn m2m_wifi_handle_events
- * @ingroup WLANAPI
- * Synchronous M2M event handler function, responsible for handling interrupts received from the WINC firmware.
- * Application developers should call this function periodically in-order to receive the events that are to be
- handled by the
- * callback functions implemented by the application.
-
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_handle_events(void * arg);
-
- @pre
- Prior to receiving events, the WINC driver should have been successfully initialized by calling the @ref
- m2m_wifi_init function.
-
- @brief Handle the varios events received from the WINC board.
- Whenever an event happen in the WINC board (e.g. Connection, Disconnection , DHCP .. etc), WINC will interrupt
- the host to let it know that a new event has occured. The host driver will attempt to handle these events whenever the
- host driver decides to do that by calling the "m2m_wifi_handle_events" function. It's mandatory to call this function
- periodically and independantly of any other condition. It's ideal to include this function in the main and the most
- frequent loop of the host application.
- @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.
- */
-
- NMI_API sint8 m2m_wifi_handle_events(void *arg);
-
- /**@}*/
- /** @defgroup WifiSendCRLFn m2m_wifi_send_crl
- * @ingroup WLANAPI
- * Asynchronous API that notifies the WINC with the Certificate Revocation List to be used for TLS.
-
- */
- /**@{*/
- /*!
- @fn \
- sint8 m2m_wifi_send_crl(tstrTlsCrlInfo* pCRL);
-
- @brief
- Asynchronous API that notifies the WINC with the Certificate Revocation List.
-
- @param [in] pCRL
- Pointer to the structure containing certificate revocation list details.
-
- @return
- The function returns @ref M2M_SUCCESS if the command has been successfully queued to the WINC,
- and a negative value otherwise.
- */
-
- sint8 m2m_wifi_send_crl(tstrTlsCrlInfo *pCRL);
-
- /**@}*/
- /** @defgroup WifiDefaultConnectFn m2m_wifi_default_connect
- * @ingroup WLANAPI
- * Asynchronous Wi-Fi connection function. An application calling this function will cause the firmware to
- correspondingly connect to the last successfully connected AP from the cached connections.
- * A failure to connect will result in a response of @ref M2M_WIFI_RESP_DEFAULT_CONNECT indicating the connection
- error as defined in the structure @ref tstrM2MDefaultConnResp.
- * Possible errors are:
- * The connection list is empty @ref M2M_DEFAULT_CONN_EMPTY_LIST or a mismatch for the saved AP name @ref
- M2M_DEFAULT_CONN_SCAN_MISMATCH.
- * only difference between this function and @ref m2m_wifi_connect, is the connection parameters.
- * Connection using this function is expected to connect using cached connection parameters.
-
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_default_connect(void);
-
- @pre
- Prior to connecting, the WINC driver should have been successfully initialized by calling the @ref m2m_wifi_init
- function.
-
- @brief Connect to the last successfully connected AP from the cached connections.
-
- @warning
- This function must be called in station mode only.
- It's important to note that successful completion of a call to m2m_wifi_default_connect() does not guarantee success of
- the WIFI connection, and a negative return value indicates only locally-detected errors.
-
- @see
- m2m_wifi_connect
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
-
- */
- NMI_API sint8 m2m_wifi_default_connect(void);
- /**@}*/
- /** @defgroup WifiConnectFn m2m_wifi_connect
- * @ingroup WLANAPI
- * Asynchronous wi-fi connection function to a specific AP. Prior to a successful connection, the application must
- * define the SSID of the AP, the security type, the authentication information parameters and the channel number to
- * which the connection will be established. The connection status is known when a response of @ref
- * M2M_WIFI_RESP_CON_STATE_CHANGED is received based on the states defined in @ref tenuM2mConnState, successful
- * connection is defined by @ref M2M_WIFI_CONNECTED
- *
- * The only difference between this function and @ref m2m_wifi_default_connect, is the connection parameters.
- * Connection using this function is expected to be made to a specific AP and to a specified channel.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_connect(char *pcSsid, uint8 u8SsidLen, uint8 u8SecType, void *pvAuthInfo, uint16 u16Ch);
-
- @param [in] pcSsid
- A buffer holding the SSID corresponding to the requested AP.
-
- @param [in] u8SsidLen
- Length of the given SSID (not including the NULL termination).
- A length less than ZERO or greater than the maximum defined SSID @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. It is 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(-12) indicating connection failure.
-
- @param [in] u16Ch
- Wi-Fi channel number as defined in @ref tenuM2mScanCh enumeration.
- Channel number greater than @ref M2M_WIFI_CH_14 returns a negative error @ref M2M_ERR_FAIL(-12).
- Except if the value is M2M_WIFI_CH_ALL(255), since this indicates that the firmware should scan all
- channels to find the SSID requested to connect to. 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
- @see
- tuniM2MWifiAuth
- tstr1xAuthCredentials
- tstrM2mWifiWepParams
-
- @warning
- -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 for successful operations and a negative value otherwise.
-
- */
- NMI_API sint8 m2m_wifi_connect(char *pcSsid, uint8 u8SsidLen, uint8 u8SecType, void *pvAuthInfo, uint16 u16Ch);
- /**@}*/
- /** @defgroup WifiConnectFn m2m_wifi_connect_sc
- * @ingroup WLANAPI
- * Asynchronous wi-fi connection function to a specific AP. Prior to a successful connection, the application
- * developers must know the SSID of the AP, the security type, the authentication information parameters and the channel
- * number to which the connection will be established.this API allows the user to choose whether to The connection
- * status is known when a response of @ref M2M_WIFI_RESP_CON_STATE_CHANGED is received based on the states defined in
- * @ref tenuM2mConnState, successful connection is defined by @ref M2M_WIFI_CONNECTED The only difference between this
- * function and @ref m2m_wifi_connect, is the option to save the acess point info ( SSID, password...etc) or not.
- * Connection using this function is expected to be made to a specific AP and to a specified channel.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_connect_sc(char *pcSsid, uint8 u8SsidLen, uint8 u8SecType, void *pvAuthInfo, uint16
- u16Ch,uint8 u8SaveCred);
-
- @param [in] pcSsid
- A buffer holding the SSID corresponding to the requested AP.
-
- @param [in] u8SsidLen
- Length of the given SSID (not including the NULL termination).
- A length less than ZERO or greater than the maximum defined SSID @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. It is 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(-12) indicating connection failure.
-
- @param [in] u16Ch
- Wi-Fi channel number as defined in @ref tenuM2mScanCh enumeration.
- Channel number greater than @ref M2M_WIFI_CH_14 returns a negative error @ref M2M_ERR_FAIL(-12).
- Except if the value is M2M_WIFI_CH_ALL(255), since this indicates that the firmware should scan all
- channels to find the SSID requested to connect to. Failure to find the connection match will return a negative error
- @ref M2M_DEFAULT_CONN_SCAN_MISMATCH.
-
- @param [in] u8NoSaveCred
- Option to store the acess 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
- @see
- tuniM2MWifiAuth
- tstr1xAuthCredentials
- tstrM2mWifiWepParams
-
- @warning
- -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 for successful operations and a negative value otherwise.
-
- */
- NMI_API sint8 m2m_wifi_connect_sc(char *pcSsid, uint8 u8SsidLen, uint8 u8SecType, void *pvAuthInfo, uint16 u16Ch,
- uint8 u8NoSaveCred);
- /**@}*/
- /** @defgroup WifiDisconnectFn m2m_wifi_disconnect
- * @ingroup WLANAPI
- * Synchronous wi-fi disconnection function, requesting a Wi-Fi disconnection from the currently connected AP.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_disconnect(void);
-
- @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.
-
- @brief Request a Wi-Fi disconnect from the currently connected AP.
- After the Disconnect is complete the driver should recieve a response of @ref M2M_WIFI_RESP_CON_STATE_CHANGED
- based on the states defined in @ref tenuM2mConnState, successful disconnection is defined by @ref M2M_WIFI_DISCONNECTED
- .
- @warning
- This function must be called in station mode only.
-
- @see
- m2m_wifi_connect
- m2m_wifi_default_connect
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_disconnect(void);
-
- /**@}*/
- /** @defgroup StartProvisionModeFn m2m_wifi_start_provision_mode
- * @ingroup WLANAPI
- * Asynchronous Wi-Fi provisioning function, which starts the WINC HTTP PROVISIONING mode.
- The function triggers the WINC to activate the Wi-Fi AP (HOTSPOT) mode with the passed configuration parameters and
- then starts the HTTP Provision WEB Server. The provisioning status is returned in an event @ref
- M2M_WIFI_RESP_PROVISION_INFO
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_start_provision_mode(tstrM2MAPConfig *pstrAPConfig, char *pcHttpServerDomainName, uint8
- bEnableHttpRedirect);
-
- @param [in] pstrAPConfig
- AP configuration parameters as defined in @ref tstrM2MAPConfig 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 value 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.
-
- @see
- tpfAppWifiCb
- m2m_wifi_init
- M2M_WIFI_RESP_PROVISION_INFO
- m2m_wifi_stop_provision_mode
- tstrM2MAPConfig
-
- @warning
- DO Not use ".local" in the pcHttpServerDomainName.
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
-
- \section 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 u8WiFiEvent, void * pvMsg)
- {
- switch(u8WiFiEvent)
- {
- case M2M_WIFI_RESP_PROVISION_INFO:
- {
- tstrM2MProvisionInfo *pstrProvInfo = (tstrM2MProvisionInfo*)pvMsg;
- if(pstrProvInfo->u8Status == M2M_SUCCESS)
- {
- m2m_wifi_connect((char*)pstrProvInfo->au8SSID, (uint8)strlen(pstrProvInfo->au8SSID),
- pstrProvInfo->u8SecType, pstrProvInfo->au8Password, M2M_WIFI_CH_ALL);
-
- 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 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[0] = 1;
-
- m2m_wifi_start_provision_mode(&apConfig, "atmelwincconf.com", bEnableRedirect);
-
- while(1)
- {
- m2m_wifi_handle_events(NULL);
- }
- }
- }
-
- @endcode
- */
- NMI_API sint8 m2m_wifi_start_provision_mode(tstrM2MAPConfig *pstrAPConfig, char *pcHttpServerDomainName,
- uint8 bEnableHttpRedirect);
- /**@}*/
- /** @defgroup StopProvisioningModeFn m2m_wifi_stop_provision_mode
- * @ingroup WLANAPI
- * Synchronous provision termination function which stops the provision mode if it is active.
- */
- /**@{*/
- /*!
- @fn \
- sint8 m2m_wifi_stop_provision_mode(void);
-
- @pre
- An active provisioning session must be active before it is terminated through this function.
- @see
- m2m_wifi_start_provision_mode
-
- @return
- The function returns ZERO for success and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_stop_provision_mode(void);
- /**@}*/
- /** @defgroup GetConnectionInfoFn m2m_wifi_get_connection_info
- * @ingroup WLANAPI
- * Asynchronous connection status retrieval function, retrieves the status information of the currently connected AP.
- * The result is passed to the Wi-Fi notification callback through the event @ref M2M_WIFI_RESP_CONN_INFO. Connection
- * information is retrieved from the structure @ref tstrM2MConnInfo.
- */
- /**@{*/
- /*!
- @fn \
- sint8 m2m_wifi_get_connection_info(void);
-
- @brief
- Retrieve the current Connection information. The result is passed to the Wi-Fi notification callback
- with [M2M_WIFI_RESP_CONN_INFO](@ref M2M_WIFI_RESP_CONN_INFO).
- @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.
-
- Connection Information retrieved:
-
- -Connection Security
- -Connection RSSI
- -Remote MAC address
- -Remote IP address
-
- and in case of WINC station mode the SSID of the AP is also retrieved.
- @warning
- -In case of WINC AP mode or P2P mode, ignore the SSID field (NULL string).
- @sa
- M2M_WIFI_RESP_CONN_INFO,
- tstrM2MConnInfo
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- \section 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 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
- */
- NMI_API sint8 m2m_wifi_get_connection_info(void);
- /**@}*/
- /** @defgroup WifiSetMacAddFn m2m_wifi_set_mac_address
- * @ingroup WLANAPI
- * Synchronous MAC address assigning to the NMC1500. It is used for non-production SW. Assign MAC address to the WINC
- * device.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_set_mac_address(uint8 au8MacAddress[6]);
-
- @brief Assign a MAC address to the WINC board.
- This function override the already assigned MAC address of the WINC board with a user provided one. This is for
- experimental use only and should never be used in the production SW.
-
- @param [in] au8MacAddress
- MAC Address to be set to the WINC.
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_set_mac_address(uint8 au8MacAddress[6]);
-
- /**@}*/
- /** @defgroup WifiWpsFn m2m_wifi_wps
- * @ingroup WLANAPI
- * Asynchronous WPS triggering function.
- * This function is called for the WINC to enter the WPS (Wi-Fi Protected Setup) mode. The result is passed to the
- *Wi-Fi notification callback with the event @ref M2M_WIFI_REQ_WPS.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_wps(uint8 u8TriggerType,const char * pcPinNumber);
-
- @param [in] u8TriggerType
- WPS Trigger method. Could be:
- - [WPS_PIN_TRIGGER](@ref WPS_PIN_TRIGGER) Push button method
- - [WPS_PBC_TRIGGER](@ref WPS_PBC_TRIGGER) Pin method
-
- @param [in] pcPinNumber
- PIN number for WPS PIN method. It is not used if the trigger type is WPS_PBC_TRIGGER. It must follow the
- rules stated by the WPS standard.
-
- @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 the [m2m_wifi_init](@ref m2m_wifi_init).
- - The event [M2M_WIFI_REQ_WPS](@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 [m2m_wifi_handle_events](@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
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- \section 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 u8WiFiEvent, void * pvMsg)
- {
- switch(u8WiFiEvent)
- {
- case M2M_WIFI_REQ_WPS:
- {
- tstrM2MWPSInfo *pstrWPS = (tstrM2MWPSInfo*)pvMsg;
- if(pstrWPS->u8AuthType != 0)
- {
- 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 + 1);
-
- // establish Wi-Fi connection
- m2m_wifi_connect((char*)pstrWPS->au8SSID, (uint8)m2m_strlen(pstrWPS->au8SSID),
- pstrWPS->u8AuthType, pstrWPS->au8PSK, 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
- */
- NMI_API sint8 m2m_wifi_wps(uint8 u8TriggerType, const char *pcPinNumber);
- /**@}*/
- /** @defgroup WifiWpsDisableFn m2m_wifi_wps_disable
- * @ingroup WLANAPI
- * Disable the WINC1500 WPS operation.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_wps_disable(void);
-
- @pre WINC should be already in WPS mode using @ref m2m_wifi_wps
-
- @brief Stops the WPS ongoing session.
-
- @see
- m2m_wifi_wps
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_wps_disable(void);
-
- /**@}*/
- /** @defgroup WifiP2PFn m2m_wifi_p2p
- * @ingroup WLANAPI
- * Asynchronous Wi-Fi direct (P2P) enabling mode function.
- The WINC supports P2P in device listening mode ONLY (intent is ZERO).
- The WINC P2P implementation does not support P2P GO (Group Owner) mode.
- Active P2P devices (e.g. phones) could find the WINC in the search list. When a device is connected to WINC, a Wi-Fi
- notification event
- @ref M2M_WIFI_RESP_CON_STATE_CHANGED is triggered. After a short while, the DHCP IP Address is obtained
- and an event @ref M2M_WIFI_REQ_DHCP_CONF is triggered. Refer to the code examples for a more illustrative example.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_p2p(uint8 u8Channel);
-
- @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 allowed in AP or STA modes.
-
- @see
- tpfAppWifiCb
- m2m_wifi_init
- M2M_WIFI_RESP_CON_STATE_CHANGED
- M2M_WIFI_REQ_DHCP_CONF
- tstrM2mWifiStateChanged
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- \section Example
- The code snippet shown an example of how the p2p mode operates.
- @code
- #include "m2m_wifi.h"
- #include "m2m_types.h"
-
- void wifi_event_cb(uint8 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 *pu8IPAddress = (uint8*)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
-
- */
- NMI_API sint8 m2m_wifi_p2p(uint8 u8Channel);
- /**@}*/
- /** @defgroup WifiP2PDisconnectFn m2m_wifi_p2p_disconnect
- * @ingroup WLANAPI
- * Disable the WINC1500 device Wi-Fi direct mode (P2P).
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_p2p_disconnect(void);
- @pre
- The p2p mode must have be enabled and active before a disconnect can be called.
-
- @see
- m2m_wifi_p2p
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_p2p_disconnect(void);
- /**@}*/
- /** @defgroup WifiEnableApFn m2m_wifi_enable_ap
- * @ingroup WLANAPI
- * Asynchronous Wi-FI hot-spot enabling function.
- * The WINC supports AP mode operation with the following limitations:
- - Only 1 STA could be associated at a time.
- - Open and WEP are the only supported security types
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_enable_ap(CONST tstrM2MAPConfig* pstrM2MAPConfig);
-
- @param [in] pstrM2MAPConfig
- A structure holding the AP configurations.
-
- @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 [m2m_wifi_init](@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
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- \section 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 u8WiFiEvent, void * pvMsg)
- {
- switch(u8WiFiEvent)
- {
- case M2M_WIFI_REQ_DHCP_CONF:
- {
- uint8 *pu8IPAddress = (uint8*)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[0] = 1;
-
- // Trigger AP
- m2m_wifi_enable_ap(&apConfig);
-
- while(1)
- {
- m2m_wifi_handle_events(NULL);
- }
- }
- }
-
- @endcode
-
- */
- NMI_API sint8 m2m_wifi_enable_ap(CONST tstrM2MAPConfig *pstrM2MAPConfig);
- /**@}*/
- /** @defgroup WifiDisableApFn m2m_wifi_disable_ap
- * @ingroup WLANAPI
- * Synchronous Wi-Fi hot-spot disabling function. 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.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_disable_ap(void);
- @see
- m2m_wifi_enable_ap
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_disable_ap(void);
- /**@}*/
- /** @defgroup SetStaticIPFn m2m_wifi_set_static_ip
- * @ingroup WLANAPI
- * Synchronous static IP Address configuration function.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_set_static_ip(tstrM2MIPConfig * pstrStaticIPConf);
-
- @param [in] pstrStaticIPConf
- Pointer to a structure holding the static IP Configurations (IP,
- Gateway, subnet mask and DNS address).
-
- @pre The application must disable auto DHCP using @ref m2m_wifi_enable_dhcp before assigning a static IP address.
-
- @brief Assign a static IP address to the WINC board.
- This function assigns a static IP address in case the AP doesn't have a DHCP server or in case the application
- wants to assign a predefined known IP address. The user must take 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 board 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.
- @warning
- Normally this function normally should not be used. DHCP configuration is requested automatically after successful
- Wi-Fi connection is established.
-
- @see
- tstrM2MIPConfig
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_set_static_ip(tstrM2MIPConfig *pstrStaticIPConf);
-
- /**@}*/
- /** @defgroup RequestDHCPClientFn m2m_wifi_request_dhcp_client
- * @ingroup WLANAPI
- * Starts the DHCP client operation(DHCP requested by the firmware automatically in STA/AP/P2P mode).
- *
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_request_dhcp_client(void);
-
- @warning
- This function is legacy and exists only for compatability with older applications. DHCP configuration is requested
- automatically after successful Wi-Fi connection is established.
-
- @return
- The function returns @ref M2M_SUCCESS always.
- */
- NMI_API sint8 m2m_wifi_request_dhcp_client(void);
- /**@}*/
- /** @defgroup RequestDHCPServerFn m2m_wifi_request_dhcp_server
- * @ingroup WLANAPI
- * Dhcp requested by the firmware automatically in STA/AP/P2P mode).
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_request_dhcp_server(uint8* addr);
-
- @warning
- This function is legacy and exists only for compatability with older applications. DHCP server is started
- automatically when enabling the AP mode.
-
- @return
- The function returns @ref M2M_SUCCESS always.
- */
- NMI_API sint8 m2m_wifi_request_dhcp_server(uint8 *addr);
- /**@}*/
- /** @defgroup WifiDHCPEnableFn m2m_wifi_enable_dhcp
- * @ingroup WLANAPI
- * Synchronous Wi-Fi DHCP enable function. This function Enable/Disable DHCP protocol.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_enable_dhcp(uint8 u8DhcpEn );
-
- @brief
- Enable/Disable the DHCP client after connection.
-
- @param [in] u8DhcpEn
- Possible values:
- 1: Enable DHCP client after connection.
- 0: Disable DHCP client after connection.
- @warnings
- -DHCP client is enabled by default
- -This Function should be called before using m2m_wifi_set_static_ip()
-
- @sa
- m2m_wifi_set_static_ip()
-
- @return
- The function SHALL return @ref M2M_SUCCESS for successful operation and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_enable_dhcp(uint8 u8DhcpEn);
- /**@}*/
- /** @defgroup WifiSetScanOptionFn m2m_wifi_set_scan_options
- * @ingroup WLANAPI
- * Synchronous Wi-Fi scan settings function. This function sets the time configuration parameters for the scan
- * operation.
- */
-
- /*!
- @fn \
- sint8 m2m_wifi_set_scan_options(tstrM2MScanOption* ptstrM2MScanOption)
-
- @param [in] ptstrM2MScanOption;
- Pointer to the structure holding the Scan Parameters.
-
- @see
- tenuM2mScanCh
- m2m_wifi_request_scan
- tstrM2MScanOption
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_set_scan_options(tstrM2MScanOption *ptstrM2MScanOption);
- /**@}*/
- /** @defgroup WifiSetScanRegionFn m2m_wifi_set_scan_region
- * @ingroup WLANAPI
- * Synchronous wi-fi scan region setting function.
- * This function sets the scan region, which will affect the range of possible scan channels.
- * For 2.5GHz supported in the current release, the requested scan region can't exceed the maximum number of channels
- *(14).
- *@{*/
- /*!
- @fn \
- sint8 m2m_wifi_set_scan_region(uint16 ScanRegion)
-
- @param [in] ScanRegion;
- ASIA
- NORTH_AMERICA
- @see
- tenuM2mScanCh
- m2m_wifi_request_scan
-
- @return
- The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
-
- */
- NMI_API sint8 m2m_wifi_set_scan_region(uint16 ScanRegion);
- /**@}*/
- /** @defgroup WifiRequestScanFn m2m_wifi_request_scan
- * @ingroup WLANAPI
- * Asynchronous Wi-FI scan request on the given channel. The scan status is delivered in the wifi event callback and
- *then the application is supposed 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 reads the list of APs by calling
- *the function @ref m2m_wifi_req_scan_result N times.
- *
- *@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_request_scan(uint8 ch);
-
- @param [in] ch
- RF Channel ID for SCAN operation. It should be set according to tenuM2mScanCh.
- With a value of M2M_WIFI_CH_ALL(255)), 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
- 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 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 u8WiFiEvent, void * pvMsg)
- {
- static uint8 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 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
- */
- NMI_API sint8 m2m_wifi_request_scan(uint8 ch);
-
- /**@}*/
- /** @defgroup WifiRequestScanFn m2m_wifi_request_scan_passive
- * @ingroup WLANAPI
- * Same as m2m_wifi_request_scan but perform passive scanning while the other one perform active scanning.
-
- *
- *@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_request_scan_passive(uint8 ch, uint16 scan_time);
-
- @param [in] ch
- RF Channel ID for SCAN operation. It should be set according to tenuM2mScanCh.
- With a value of M2M_WIFI_CH_ALL(255)), means to scan all channels.
-
- @param [in] scan_time
- The time in ms that passive scan is listening to beacons on each channel per one slot, enter 0 for deafult
- setting.
-
- @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_request_scan
- 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.
-
- */
- NMI_API sint8 m2m_wifi_request_scan_passive(uint8 ch, uint16 scan_time);
-
- /**@}*/
- /** @defgroup WifiRequestScanFn m2m_wifi_request_scan_ssid_list
- * @ingroup WLANAPI
- * Asynchronous wi-fi scan request on the given channel and the hidden scan list. 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.
- *
- *@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_request_scan_ssid_list(uint8 ch,uint8 * u8SsidList);
-
- @param [in] ch
- RF Channel ID for SCAN operation. It should be set according to tenuM2mScanCh.
- With a value of M2M_WIFI_CH_ALL(255)), 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 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 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
-
- @warning
- This function is not allowed in P2P. It works only for 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 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 u8WiFiEvent, void * pvMsg)
- {
- static uint8 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 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 list[9];
- char ssid[] = "DEMO_AP";
- uint8 len = (uint8)(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
- */
- NMI_API sint8 m2m_wifi_request_scan_ssid_list(uint8 ch, uint8 *u8Ssidlist);
-
- /**@}*/
- /** @defgroup WifiGetNumAPFoundFn m2m_wifi_get_num_ap_found
- * @ingroup WLANAPI
- * Synchronous function to retrieve the number of AP's found in the last scan request, The function reads the number of
- * APs from global variable which was updated in the Wi-Fi callback function through the M2M_WIFI_RESP_SCAN_DONE event.
- * Function used only in STA mode only.
- */
- /**@{*/
- /*!
- @fn NMI_API uint8 m2m_wifi_get_num_ap_found(void);
-
- @see m2m_wifi_request_scan
- M2M_WIFI_RESP_SCAN_DONE
- M2M_WIFI_RESP_SCAN_RESULT
- @pre m2m_wifi_request_scan need to be called first
- - 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 Return the number of AP's found in the last Scan Request.
-
- \section 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 u8WiFiEvent, void * pvMsg)
- {
- static uint8 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 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
- */
- NMI_API uint8 m2m_wifi_get_num_ap_found(void);
- /**@}*/
- /** @defgroup WifiReqScanResult m2m_wifi_req_scan_result
- * @ingroup WLANAPI
- * Synchronous call to read the AP information from the SCAN Result list with the given index.
- * This function is expected to be called when the response events M2M_WIFI_RESP_SCAN_RESULT or
- * M2M_WIFI_RESP_SCAN_DONE are received in the wi-fi callback function.
- * The response information received can be obtained through the casting to the @ref tstrM2mWifiscanResult structure
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_req_scan_result(uint8 index);
- @param [in] index
- Index for the requested result, the index range start from 0 till number of AP's found
-
- @see tstrM2mWifiscanResult
- m2m_wifi_get_num_ap_found
- m2m_wifi_request_scan
-
- @pre @ref m2m_wifi_request_scan needs to be called first, then m2m_wifi_get_num_ap_found
- to get the number of AP's found
- - 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 @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 Function used in STA mode only. the scan results are updated only if the scan request is called.
- Calling this function only without a scan request will lead to firmware errors.
- Refrain from introducing a large delay between the scan request and the scan result request, to prevent
- errors occurring.
-
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- \section 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 u8WiFiEvent, void * pvMsg)
- {
- static uint8 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 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
- */
- NMI_API sint8 m2m_wifi_req_scan_result(uint8 index);
- /**@}*/
- /** @defgroup WifiReqCurrentRssiFn m2m_wifi_req_curr_rssi
- * @ingroup WLANAPI
- * Asynchronous request for the current RSSI of the connected AP.
- * The response received in through the @ref M2M_WIFI_RESP_CURRENT_RSSI event.
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_req_curr_rssi(void);
- @pre - A Wi-Fi notification callback of type @ref tpfAppWifiCb MUST be implemented and registered before
- initialization. Registering the callback is done through passing it to the [m2m_wifi_init](@ref m2m_wifi_init) through
- 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 for successful operations and a negative value otherwise.
- \section 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 u8WiFiEvent, void * pvMsg)
- {
- static uint8 u8ScanResultIdx = 0;
-
- switch(u8WiFiEvent)
- {
- case M2M_WIFI_RESP_CURRENT_RSSI:
- {
- sint8 *rssi = (sint8*)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
-
- */
- NMI_API sint8 m2m_wifi_req_curr_rssi(void);
- /**@}*/
- /** @defgroup WifiGetOtpMacAddFn m2m_wifi_get_otp_mac_address
- * @ingroup WLANAPI
- * Request the MAC address stored on the One Time Programmable(OTP) memory of the device.
- * The function is blocking until the response is received.
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_get_otp_mac_address(uint8 *pu8MacAddr, uint8 * pu8IsValid);
-
- @param [out] pu8MacAddr
- Output MAC address buffer of 6 bytes size. Valid only if *pu8Valid=1.
- @param [out] pu8IsValid
- Output boolean value to indicate the validity of pu8MacAddr in OTP.
- Output zero if the OTP memory is not programmed, non-zero otherwise.
- @pre m2m_wifi_init required to be called before any WIFI/socket function
- @see m2m_wifi_get_mac_address
-
- @return The function returns @ref M2M_SUCCESS for success and a negative value otherwise.
-
- */
- NMI_API sint8 m2m_wifi_get_otp_mac_address(uint8 *pu8MacAddr, uint8 *pu8IsValid);
- /**@}*/
- /** @defgroup WifiGetMacAddFn m2m_wifi_get_mac_address
- * @ingroup WLANAPI
- * Function to retrieve the current MAC address. The function is blocking until the response is received.
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_get_mac_address(uint8 *pu8MacAddr)
- @param [out] pu8MacAddr
- Output MAC address buffer of 6 bytes size.
- @pre m2m_wifi_init required to be called before any WIFI/socket function
- @see m2m_wifi_get_otp_mac_address
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
-
- */
- NMI_API sint8 m2m_wifi_get_mac_address(uint8 *pu8MacAddr);
- /**@}*/
- /** @defgroup SetSleepModeFn m2m_wifi_set_sleep_mode
- * @ingroup WLANAPI
- * 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 @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.
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_set_sleep_mode(uint8 PsTyp, uint8 BcastEn);
- @param [in] PsTyp
- Desired power saving mode. Supported types are enumerated in @ref tenuPowerSaveModes.
- @param [in] BcastEn
- Broadcast reception enable flag.
- If it is 1, the WINC1500 will be awake each DTIM beacon for receiving broadcast traffic.
- If it is 0, the WINC1500: disable broadcast traffic. Through this flag the WINC1500 will not wakeup at the
- DTIM beacon, but it will wakeup depends only on the the configured Listen Interval.
-
- @warning The function called once after initialization.
-
- @see tenuPowerSaveModes
- m2m_wifi_get_sleep_mode
- m2m_wifi_set_lsn_int
-
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_set_sleep_mode(uint8 PsTyp, uint8 BcastEn);
- /**@}*/
- /** @defgroup WifiRequestSleepFn m2m_wifi_request_sleep
- * @ingroup WLANAPI
- * Synchronous power-save sleep request function, which requests from the WINC1500 device to sleep in the currenlty
- * configured power save mode as defined by the @ref m2m_wifi_set_sleep_mode, for a specific time as defined by the
- * passed in parameter. This function should be used in the @ref M2M_PS_MANUAL power save mode only. A wake up
- * request is automatically performed by the WINC1500 device when any host driver API function, e.g. Wi-Fi or socket
- * operation is called.
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_request_sleep(uint32 u32SlpReqTime);
- @param [in] u32SlpReqTime
- Request sleep time in ms
- 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 senstive for long periods of absence can experience performance degradation in the connection if
- long sleeping times are used.
- @warning The function should be called in @ref M2M_PS_MANUAL power save mode only. As enumerated in @ref
- tenuPowerSaveModes It's also important to note that during the sleeping time while in the M2M_PS_MANUAL mode, AP beacon
- monitoring is bypassed and the wifi-connection may drop if the sleep period is enlongated.
- @see tenuPowerSaveModes
- m2m_wifi_set_sleep_mode
-
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_request_sleep(uint32 u32SlpReqTime);
- /**@}*/
- /** @defgroup GetSleepModeFn m2m_wifi_get_sleep_mode
- * @ingroup WLANAPI
- * Synchronous power save mode retrieval function.
- */
- /**@{*/
- /*!
- @fn NMI_API uint8 m2m_wifi_get_sleep_mode(void);
- @see tenuPowerSaveModes
- m2m_wifi_set_sleep_mode
- @return The current operating power saving mode based on the enumerated sleep modes @ref tenuPowerSaveModes.
- */
- NMI_API uint8 m2m_wifi_get_sleep_mode(void);
- /**@}*/
- /** @defgroup WifiReqClientCtrlFn m2m_wifi_req_client_ctrl
- * @ingroup WLANAPI
- * Asynchronous command sending function to the PS Client (An WINC1500 board running the ps_firmware)
- * if the PS client send any command it will be received through the @ref M2M_WIFI_RESP_CLIENT_INFO event
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_req_client_ctrl(uint8 cmd);
- @brief
- @param [in] cmd
- Control command sent from PS Server to PS Client (command values defined by the application)
- @pre @ref m2m_wifi_req_server_init should be called first
- @warning This mode is not supported in the current release.
- @see m2m_wifi_req_server_init
- M2M_WIFI_RESP_CLIENT_INFO
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_req_client_ctrl(uint8 cmd);
- /**@}*/
- /** @defgroup WifiReqServerInit m2m_wifi_req_server_init
- * @ingroup WLANAPI
- * Synchronous function to initialize the PS Server.
- * The WINC1500 supports non secure communication with another WINC1500,
- * (SERVER/CLIENT) through one byte command (probe request and probe response) without any connection setup.
- * The server mode can't be used with any other modes (STA/P2P/AP)
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_req_server_init(uint8 ch);
- @param [in] ch
- Server listening channel
- @see m2m_wifi_req_client_ctrl
- @warning This mode is not supported in the current release.
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_req_server_init(uint8 ch);
- /**@}*/
- /** @defgroup WifiSetDeviceNameFn m2m_wifi_set_device_name
- * @ingroup WLANAPI
- * Sets the WINC device name. The name string is used as a device name in both (P2P) WiFi-Direct mode as well as DHCP
- * hostname (option 12). For P2P devices to communicate a device name must be present. If it 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.
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_set_device_name(uint8 *pu8DeviceName, uint8 u8DeviceNameLength);
- @param [in] pu8DeviceName
- A Buffer holding the device name. Device name is a null terminated C string.
- @param [in] u8DeviceNameLength
- The length of the device name. Should not exceed the maximum device name's length @ref M2M_DEVICE_NAME_MAX
- (including null character).
- @warning The function called once after initialization.
- Used for the Wi-Fi Direct (P2P) as well as DHCP client hostname option (12).
- @warning Device name shall contain only characters allowed in valid internet host name as defined in RFC 952 and
- 1123.
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_set_device_name(uint8 *pu8DeviceName, uint8 u8DeviceNameLength);
- /**@}*/
- /** @defgroup WifiSetLsnIntFn m2m_wifi_set_lsn_int
- * @ingroup WLANAPI
- * 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
- * the Wi-Fi listen interval. The listen interval is how many beacon periods the station can sleep before it wakes up
- *to receive data buffer in AP. It is represented in units of AP beacon periods(100ms).
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_set_lsn_int(tstrM2mLsnInt * pstrM2mLsnInt);
-
- @param [in] pstrM2mLsnInt
- Structure holding the listen interval configurations.
- @pre Function @m2m_wifi_set_sleep_mode shall be called first, to set the power saving mode required.
- @warning The function should be called once after initialization.
- @see tstrM2mLsnInt
- m2m_wifi_set_sleep_mode
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
-
- */
- NMI_API sint8 m2m_wifi_set_lsn_int(tstrM2mLsnInt *pstrM2mLsnInt);
- /**@}*/
- /** @defgroup WifiEnableMonitorModeFn m2m_wifi_enable_monitoring_mode
- * @ingroup WLANAPI
- * Asynchronous 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 When the
- * monitoring mode is enabled, reception of all frames that satisfy the filter criteria passed in as a parameter is
- * allowed, on the current wireless channel \n. All packets that meet the filtering criteria are passed to the
- * application layer, to be handled by the assigned monitoring callback function \n. The monitoring callback function
- * must be implemented before starting the monitoring mode, in-order to handle the packets received \n. Registering
- * of the implemented callback function is through the callback pointer @ref tpfAppMonCb in the @ref
- * tstrWifiInitParam structure\n. passed to @ref m2m_wifi_init function at initialization.
- *
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_enable_monitoring_mode(tstrM2MWifiMonitorModeCtrl *, uint8 *, uint16 ,
- uint16);
- * @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 When This mode is enabled, you can not be connected in any mode (Station, Access Point, or P2P).\n
- * @see tstrM2MWifiMonitorModeCtrl
- tstrM2MWifiRxPacketInfo
- tstrWifiInitParam
- tenuM2mScanCh
- m2m_wifi_disable_monitoring_mode
- m2m_wifi_send_wlan_pkt
- m2m_wifi_send_ethernet_pkt
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
-
- *\section 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 gmgmt[1600];
-
- //Callback functions
- void wifi_cb(uint8 u8WiFiEvent, void * pvMsg)
- {
- ;
- }
- void wifi_monitoring_cb(tstrM2MWifiRxPacketInfo *pstrWifiRxPacket, uint8 *pu8Payload, uint16 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
- */
- NMI_API sint8 m2m_wifi_enable_monitoring_mode(tstrM2MWifiMonitorModeCtrl *pstrMtrCtrl, uint8 *pu8PayloadBuffer,
- uint16 u16BufferSize, uint16 u16DataOffset);
- /**@}*/
- /** @defgroup WifiDisableMonitorModeFn m2m_wifi_disable_monitoring_mode
- * @ingroup WLANAPI
- * Synchronous function to disable Wi-Fi monitoring mode (Promiscuous mode). Expected to be called, if the enable
- * monitoring mode is set, but if it was called without enabling no negative impact will reside.
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_disable_monitoring_mode(void);
- * @see m2m_wifi_enable_monitoring_mode
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_disable_monitoring_mode(void);
- /**@}*/
- /** @defgroup SendWlanPktFn m2m_wifi_send_wlan_pkt
- * @ingroup WLANAPI
- * Synchronous function to transmit a WIFI RAW packet while the implementation of this packet is left to the
- * application developer.
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_send_wlan_pkt(uint8 *, uint16, uint16);
-
- * @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 bytes in packet.
- * @see m2m_wifi_enable_monitoring_mode
- m2m_wifi_disable_monitoring_mode
- * @pre Enable Monitoring mode first using @ref m2m_wifi_enable_monitoring_mode
- * @warning This function available in monitoring mode ONLY.\n
- * @note Packets are user's responsibility.
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_send_wlan_pkt(uint8 *pu8WlanPacket, uint16 u16WlanHeaderLength, uint16 u16WlanPktSize);
- /**@}*/
- /** @defgroup WifiSendEthernetPktFn m2m_wifi_send_ethernet_pkt
- * @ingroup WLANAPI
- * Synchronous function to transmit an Ethernet packet. 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.
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_send_ethernet_pkt(uint8* pu8Packet,uint16 u16PacketSize)
- * @param [in] pu8Packet
- * Pointer to a buffer holding the whole Ethernet frame.
- * @param [in] u16PacketSize
- * The size of the whole bytes in packet.
- * @warning This function available in ETHERNET/Bypass mode ONLY. Make sure that application defines @ref
- ETH_MODE.\n
- * @note Packets are the user's responsibility.
- * @sa m2m_wifi_enable_mac_mcast,m2m_wifi_set_receive_buffer
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
-
- */
- NMI_API sint8 m2m_wifi_send_ethernet_pkt(uint8 *pu8Packet, uint16 u16PacketSize);
- /**@}*/
- /** @defgroup WifiEnableSntpFn m2m_wifi_enable_sntp
- * @ingroup WLANAPI
- * Synchronous function to enable/disable the native Simple Network Time Protocol(SNTP) client in the WINC1500
- * firmware.\n The SNTP is enabled by default at start-up.The SNTP client at firmware is used to synchronize the system
- * clock to the UTC time from the well known time servers (e.g. "time-c.nist.gov"). The SNTP client uses a default
- * update cycle of 1 day. The UTC is important for checking the expiration date of X509 certificates used while
- * establishing TLS (Transport Layer Security) connections. It is highly recommended to use it if there is no other
- * means to get the UTC time. If there is a RTC on the host MCU, the SNTP could be disabled and the host should set
- * the system time to the firmware using the @ref m2m_wifi_set_system_time function.
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_enable_sntp(uint8);
- * @param [in] bEnable
- * Enabling/Disabling flag
- * '0' :disable SNTP
- * '1' :enable SNTP
- * @see m2m_wifi_set_sytem_time
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_enable_sntp(uint8 bEnable);
- /**@}*/
- /** @defgroup WifiSetSystemTime m2m_wifi_set_sytem_time
- * @ingroup WLANAPI
- * Synchronous function for setting the system time in time/date format (@ref uint32).\n
- * 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
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_set_sytem_time(uint32);
- * @param [in] u32UTCSeconds
- * Seconds elapsed since January 1, 1900 (NTP Timestamp).
- * @see m2m_wifi_enable_sntp
- * tstrSystemTime
- * @note If there is an RTC on the host MCU, the SNTP could be disabled and the host should set the system time
- *to the firmware using the API @ref m2m_wifi_set_sytem_time.
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_set_sytem_time(uint32 u32UTCSeconds);
- /**@}*/
- /** @defgroup WifiGetSystemTime m2m_wifi_get_sytem_time
- * @ingroup WLANAPI
- * Asynchronous function used to retrieve the system time through the use of the response @ref
- * M2M_WIFI_RESP_GET_SYS_TIME. Response time retrieved is parsed into the members defined in the structure @ref
- * tstrSystemTime.
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_get_sytem_time(void);
- * @see m2m_wifi_enable_sntp
- tstrSystemTime
- * @note Get the system time from the SNTP client
- * using the API @ref m2m_wifi_get_sytem_time.
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_get_sytem_time(void);
- /**@}*/
- /** @defgroup WifiSetCustInfoElementFn m2m_wifi_set_cust_InfoElement
- * @ingroup WLANAPI
- * Synchronous function to Add/Remove user-defined Information Element to the WIFIBeacon and Probe Response frames
- * while chip mode is Access Point Mode.\n According to the information element layout shown bellow, if it is required
- * to set new data for the information elements, pass in the buffer with the information according to the sizes and
- * ordering defined bellow. However, if it's required to delete these IEs, fill the buffer with zeros.
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_set_cust_InfoElement(uint8*);
- * @param [in] pau8M2mCustInfoElement
- * Pointer to Buffer containing the IE to be sent. It is the application developer's
- responsibility to ensure on the correctness of the information element's ordering passed in.
- * @warning - Size of All elements combined must not exceed 255 byte.\n
- * - Used in Access Point Mode \n
- * @note IEs Format will be follow the following layout:\n
- * @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
- * @see m2m_wifi_enable_sntp
- * tstrSystemTime
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- \section 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
- */
- NMI_API sint8 m2m_wifi_set_cust_InfoElement(uint8 *pau8M2mCustInfoElement);
- /**@}*/
- /** @defgroup WifiSetPowerProfile m2m_wifi_set_power_profile
- * @ingroup WLANAPI
- * Change the power profile mode
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_set_power_profile(uint8 u8PwrMode);
- @brief
- @param [in] u8PwrMode
- Change the WINC1500 power profile to different mode based on the enumeration
- @ref tenuM2mPwrMode
- @pre Must be called after the initializations and before any connection request and can't be changed in run time.
- @sa tenuM2mPwrMode
- m2m_wifi_init
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- sint8 m2m_wifi_set_power_profile(uint8 u8PwrMode);
- /**@}*/
- /** @defgroup WifiSetTxPower m2m_wifi_set_tx_power
- * @ingroup WLANAPI
- * Set the TX power tenuM2mTxPwrLevel
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_set_tx_power(uint8 u8TxPwrLevel);
- @param [in] u8TxPwrLevel
- change the TX power based on the enumeration tenuM2mTxPwrLevel
- @pre Must be called after the initialization and before any connection request and can't be changed in runtime.
- @sa tenuM2mTxPwrLevel
- m2m_wifi_init
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- sint8 m2m_wifi_set_tx_power(uint8 u8TxPwrLevel);
- /**@}*/
- /** @defgroup WifiEnableFirmware m2m_wifi_enable_firmware_logs
- * @ingroup WLANAPI
- * Enable or Disable logs in run time (Disabling Firmware logs will
- * enhance the firmware start-up time and performance)
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_enable_firmware_logs(uint8 u8Enable);
- @param [in] u8Enable
- Set 1 to enable the logs, 0 for disable
- @pre Must be called after intialization through the following function @ref m2m_wifi_init
- @sa __DISABLE_FIRMWARE_LOGS__ (build option to disable logs from initializations)
- m2m_wifi_init
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- sint8 m2m_wifi_enable_firmware_logs(uint8 u8Enable);
- /**@}*/
- /** @defgroup WifiSetBatteryVoltage m2m_wifi_set_battery_voltage
- * @ingroup WLANAPI
- * Set the battery voltage to update the firmware calculations
- */
- /**@{*/
- /*!
- @fn NMI_API sint8 m2m_wifi_set_battery_voltage(uint8 u8BattVolt)
- @brief Set the battery voltage to update the firmware calculations
- @param [in] dbBattVolt
- Battery Volt in double
- @pre Must be called after intialization through the following function @ref m2m_wifi_init
- @sa m2m_wifi_init
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- sint8 m2m_wifi_set_battery_voltage(uint16 u16BattVoltx100);
- /**@}*/
- /** @defgroup WifiSetGains m2m_wifi_set_gains
- * @ingroup WLANAPI
- * Set the chip gains mainly (PPA for 11b/11gn)
- */
- /**@{*/
- /*!
- @fn sint8 m2m_wifi_set_gains(tstrM2mWifiGainsParams* pstrM2mGain);
- @brief Set the chip PPA gain for 11b/11gn
- @param [in] pstrM2mGain
- tstrM2mWifiGainsParams contain gain parmaters as implemnted in rf document
- @pre Must be called after intialization through the following function @ref m2m_wifi_init
- @sa m2m_wifi_init
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- sint8 m2m_wifi_set_gains(tstrM2mWifiGainsParams *pstrM2mGain);
- /**@}*/
- /** @defgroup WifiGetFirmwareVersion m2m_wifi_get_firmware_version
- * @ingroup WLANAPI
- * Get Firmware version info as defined in the structure @ref tstrM2mRev.
- */
- /**@{*/
- /*!
- @fn m2m_wifi_get_firmware_version(tstrM2mRev* pstrRev)
- @param [out] M2mRev
- Pointer to the structure @ref tstrM2mRev that contains the firmware version parameters
- @pre Must be called after intialization through the following function @ref m2m_wifi_init
- @sa m2m_wifi_init
- @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- sint8 m2m_wifi_get_firmware_version(tstrM2mRev *pstrRev);
- /**@}*/
- #ifdef ETH_MODE
- /** @defgroup WifiEnableMacMcastFn m2m_wifi_enable_mac_mcast
- * @ingroup WLANAPI
- * Synchronous function for filtering received MAC addresses from certain MAC address groups.
- * This function allows the addtion/removal of certain MAC addresses, used in the multicast filter.
- */
- /**@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_enable_mac_mcast(uint8 *, uint8);
- * @brief
- * @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
- * @warning This function is available in ETHERNET/bypass mode ONLY. Make sure that the application defines @ref
- * ETH_MODE.\n
- * @note Maximum number of MAC addresses that could be added is 8.
- * @sa m2m_wifi_set_receive_buffer, m2m_wifi_send_ethernet_pkt
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_enable_mac_mcast(uint8 *pu8MulticastMacAddress, uint8 u8AddRemove);
- /**@}*/
- /** @defgroup SetReceiveBufferFn m2m_wifi_set_receive_buffer
- * @ingroup WLANAPI
- * 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.
- *@{*/
- /*!
- * @fn NMI_API sint8 m2m_wifi_set_receive_buffer(void *, uint16);
-
- * @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
- @ref ETH_MODE.\n
- * @sa m2m_wifi_enable_mac_mcast,m2m_wifi_send_ethernet_pkt
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- NMI_API sint8 m2m_wifi_set_receive_buffer(void *pvBuffer, uint16 u16BufferLen);
- /**@}*/
- #endif /* ETH_MODE */
- /** @defgroup GetPrngBytes m2m_wifi_prng_get_random_bytes
- * @ingroup WLANAPI
- * Asynchronous function for retrieving from the firmware a pseudo-random set of bytes as specifed 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
- *@{*/
- /*!
- * @fn sint8 m2m_wifi_prng_get_random_bytes(uint8 * pu8PRNGBuff,uint16 u16PRNGSize)
- * @param [out] 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.
- *@see tstrPrng
- * @return The function returns @ref M2M_SUCCESS for successful operations and a negative value otherwise.
- */
- sint8 m2m_wifi_prng_get_random_bytes(uint8 *pu8PrngBuff, uint16 u16PrngSize);
- /**@}*/
-
- /** @defgroup WifiConfAutRate m2m_wifi_conf_auto_rate
- * @ingroup WLANAPI
- * Configures WLAN automatic TX rate adaptation algorithm.
- */
- /**@{*/
- /*!
- @fn \
- NMI_API sint8 m2m_wifi_conf_auto_rate(tstrConfAutoRate * pstrConfAutoRate)
-
- @brief
- Allow the host MCU app to configure auto TX rate selection algorithm. The application can use this
- API to tweak the algorithm performance. Moreover, it allows the application to force a specific WLAN
- PHY rate for transmitted data packets to favor range vs. throughput needs.
-
- @param [in] pstrConfAutoRate
- The Auto rate configuration parameters as listed in tstrConfAutoRate.
- @sa
- tstrConfAutoRate
- @return
- The function SHALL return 0 for success and a negative value otherwise.
- */
-
- NMI_API sint8 m2m_wifi_conf_auto_rate(tstrConfAutoRate *pstrConfAutoRate);
- /**@}*/
-
- #ifdef __cplusplus
- }
- #endif
- #endif /* __M2M_WIFI_H__ */
|