mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Access Point API
							parent
							
								
									56117a86c8
								
							
						
					
					
						commit
						b934632653
					
				| 
						 | 
				
			
			@ -101,6 +101,9 @@
 | 
			
		|||
        "REALTEK_RTL8195AM": {
 | 
			
		||||
            "tcpip-thread-stacksize": 1600
 | 
			
		||||
        },
 | 
			
		||||
        "UBLOX_EVK_ODIN_W2": {
 | 
			
		||||
            "pbuf-pool-size" :  10
 | 
			
		||||
        },
 | 
			
		||||
        "STM": {
 | 
			
		||||
            "mem-size": 25600
 | 
			
		||||
        },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,13 +45,14 @@ void handleWlanStatusIndication(void *dummy, cbWLAN_StatusIndicationInfo status,
 | 
			
		|||
 | 
			
		||||
    switch (status) {
 | 
			
		||||
        case cbWLAN_STATUS_CONNECTED:
 | 
			
		||||
        case cbWLAN_STATUS_AP_STA_ADDED:
 | 
			
		||||
        case cbWLAN_STATUS_AP_UP:
 | 
			
		||||
            linkUp = true;
 | 
			
		||||
            break;
 | 
			
		||||
        case cbWLAN_STATUS_STOPPED:
 | 
			
		||||
        case cbWLAN_STATUS_ERROR:
 | 
			
		||||
        case cbWLAN_STATUS_DISCONNECTED:
 | 
			
		||||
        case cbWLAN_STATUS_CONNECTION_FAILURE:
 | 
			
		||||
        case cbWLAN_STATUS_AP_DOWN:
 | 
			
		||||
            break;
 | 
			
		||||
        case cbWLAN_STATUS_CONNECTING:
 | 
			
		||||
        default:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -19,7 +19,7 @@
 | 
			
		|||
 | 
			
		||||
#include "WiFiInterface.h"
 | 
			
		||||
#ifdef DEVICE_WIFI_AP
 | 
			
		||||
#include "WiFiSoftAPInterface.h"
 | 
			
		||||
#include "UbloxWiFiSoftAPInterface.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "mbed.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -29,6 +29,7 @@
 | 
			
		|||
#include "lwip/netif.h"
 | 
			
		||||
#include "rtos.h"
 | 
			
		||||
#include "cb_wlan.h"
 | 
			
		||||
#include "wifi_emac.h"
 | 
			
		||||
 | 
			
		||||
#define ODIN_WIFI_MAX_MAC_ADDR_STR  (18)
 | 
			
		||||
#define ODIN_WIFI_SCAN_CACHE_SIZE   (5)
 | 
			
		||||
| 
						 | 
				
			
			@ -45,16 +46,18 @@ struct wlan_scan_indication_s;
 | 
			
		|||
/** OdinWiFiInterface class
 | 
			
		||||
 *  Implementation of the WiFiInterface for the ODIN-W2 module
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef DEVICE_WIFI_AP
 | 
			
		||||
class OdinWiFiInterface : public WiFiInterface, public UbloxWiFiSoftAPInterface, public EMACInterface
 | 
			
		||||
#else
 | 
			
		||||
class OdinWiFiInterface : public WiFiInterface, public EMACInterface
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    /** OdinWiFiInterface lifetime
 | 
			
		||||
     */
 | 
			
		||||
    OdinWiFiInterface();
 | 
			
		||||
    OdinWiFiInterface(OdinWiFiEMAC &emac = OdinWiFiEMAC::get_instance(), OnboardNetworkStack &stack = OnboardNetworkStack::get_default_instance());
 | 
			
		||||
    
 | 
			
		||||
    OdinWiFiInterface(bool debug);
 | 
			
		||||
    OdinWiFiInterface(bool debug, OdinWiFiEMAC &emac = OdinWiFiEMAC::get_instance(), OnboardNetworkStack &stack = OnboardNetworkStack::get_default_instance());
 | 
			
		||||
 | 
			
		||||
    ~OdinWiFiInterface();
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			@ -138,6 +141,100 @@ public:
 | 
			
		|||
     */
 | 
			
		||||
    virtual nsapi_error_t set_timeout(int ms);
 | 
			
		||||
 | 
			
		||||
#ifdef DEVICE_WIFI_AP
 | 
			
		||||
 | 
			
		||||
    /** Set IP config for access point
 | 
			
		||||
         *
 | 
			
		||||
         *  This function has to be called before the access point is started.
 | 
			
		||||
         *
 | 
			
		||||
         *  @param gateway     Null-terminated representation of the local gateway
 | 
			
		||||
         *  @param netmask     Null-terminated representation of the network mask
 | 
			
		||||
         *  @return            0 on success, negative error code on failure
 | 
			
		||||
         */
 | 
			
		||||
    //TODO: In previous WiFiInterface.h but not in new UbloxWiFiSoftAPInterface
 | 
			
		||||
    virtual nsapi_error_t set_ap_network(const char *ip_address, const char *netmask, const char *gateway);
 | 
			
		||||
 | 
			
		||||
    /** Set the WiFi network credentials
 | 
			
		||||
     *
 | 
			
		||||
     *  @param ssid      Name of the network to connect to
 | 
			
		||||
     *  @param pass      Security passphrase to connect to the network
 | 
			
		||||
     *  @param security  Type of encryption for connection
 | 
			
		||||
     *                   (defaults to NSAPI_SECURITY_NONE)
 | 
			
		||||
     *  @return          0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_ap_credentials(const char *ssid, const char *pass = 0,
 | 
			
		||||
            nsapi_security_t security = NSAPI_SECURITY_NONE);
 | 
			
		||||
 | 
			
		||||
    /** Set the WiFi network channel
 | 
			
		||||
     *
 | 
			
		||||
     *  @param channel   Channel on which the connection is to be made.
 | 
			
		||||
     *  @return          0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_ap_channel(uint8_t channel);
 | 
			
		||||
 | 
			
		||||
    /** Gets the current number of active connections
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         number of active connections
 | 
			
		||||
     */
 | 
			
		||||
    virtual int get_ap_connection_count();
 | 
			
		||||
 | 
			
		||||
    /** Gets the max supported number of active connections
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         maximum number of active connections
 | 
			
		||||
     */
 | 
			
		||||
    virtual int get_ap_max_connection_count();
 | 
			
		||||
 | 
			
		||||
    /** Enable or disable DHCP on the network access point
 | 
			
		||||
     *
 | 
			
		||||
     *  Enables DHCP in SoftAP mode. Defaults to enabled unless
 | 
			
		||||
     *  a static IP address has been assigned. Requires that the network is
 | 
			
		||||
     *  service stopped.
 | 
			
		||||
     *
 | 
			
		||||
     *  @param dhcp     True to enable DHCP
 | 
			
		||||
     *  @return         0 on success, negative error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_ap_dhcp(bool dhcp);
 | 
			
		||||
 | 
			
		||||
    /** Set the beacon interval.
 | 
			
		||||
     *
 | 
			
		||||
     *  Note that the value needs to be set before ap_start in order to take effect.
 | 
			
		||||
     *
 | 
			
		||||
     *  @param interval  Beason interval in time units (Default: 100 time units = 102.4 ms)
 | 
			
		||||
     *  @return          0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_ap_beacon_interval(uint16_t interval);
 | 
			
		||||
 | 
			
		||||
    /** Start the interface
 | 
			
		||||
     *
 | 
			
		||||
     *  Attempts to serve a WiFi network.
 | 
			
		||||
     *
 | 
			
		||||
     *  @param ssid      Name of the network to connect to
 | 
			
		||||
     *  @param pass      Security passphrase to connect to the network
 | 
			
		||||
     *  @param security  Type of encryption for connection (Default: NSAPI_SECURITY_NONE)
 | 
			
		||||
     *  @param channel   Channel on which the connection is to be made.
 | 
			
		||||
     *  @return          0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t ap_start(const char *ssid, const char *pass = 0,
 | 
			
		||||
            nsapi_security_t security = NSAPI_SECURITY_NONE, uint8_t channel = 0);
 | 
			
		||||
 | 
			
		||||
    /** Start the interface
 | 
			
		||||
     *
 | 
			
		||||
     *  Attempts to serve a WiFi network. Requires ssid to be set.
 | 
			
		||||
     *  passphrase is optional.
 | 
			
		||||
     *  If passphrase is invalid, NSAPI_ERROR_AUTH_ERROR is returned.
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         0 on success, negative error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t ap_start();
 | 
			
		||||
 | 
			
		||||
    /** Stop the interface
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t ap_stop();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    enum OdinWifiState {
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +248,6 @@ private:
 | 
			
		|||
        S_STA_CONNECTED,
 | 
			
		||||
        S_STA_DISCONNECTED_WAIT_CONNECT,
 | 
			
		||||
        S_STA_CONNECTION_FAIL_WAIT_DISCONNECT,
 | 
			
		||||
        //S_STA_LINK_LOSS_WAIT_DISCONNECT,
 | 
			
		||||
        S_STA_WAIT_DISCONNECT,
 | 
			
		||||
 | 
			
		||||
        S_AP_IDLE,
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +295,6 @@ private:
 | 
			
		|||
    OdinWifiState entry_connect_fail_wait_disconnect();
 | 
			
		||||
    OdinWifiState entry_wait_connect();
 | 
			
		||||
    OdinWifiState entry_wait_disconnect();
 | 
			
		||||
    //OdinWifiState entry_link_loss_wait_disconnect(void);
 | 
			
		||||
    OdinWifiState entry_ap_wait_start();
 | 
			
		||||
    OdinWifiState entry_ap_started();
 | 
			
		||||
    OdinWifiState entry_ap_wait_stop();
 | 
			
		||||
| 
						 | 
				
			
			@ -278,7 +373,6 @@ private:
 | 
			
		|||
    Queue<odin_wifi_msg_s, 1>           _cache_queue;
 | 
			
		||||
    MemoryPool<odin_wifi_msg_s, 7>      *_msg_pool;
 | 
			
		||||
    Thread                              _thread;
 | 
			
		||||
    //Timeout                             _timeout; //Randomly lost interrupts/callbacks; replaced by Timer
 | 
			
		||||
    Timer                               _timer;
 | 
			
		||||
 | 
			
		||||
    bool    _debug;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,108 @@
 | 
			
		|||
 | 
			
		||||
/* UbloxWiFiSoftAPInterface
 | 
			
		||||
 * Copyright (c) 2015 - 2016 ARM Limited
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef UBLOX_WIFI_SOFTAPINTERFACE_H
 | 
			
		||||
#define UBLOX_WIFI_SOFTAPINTERFACE_H
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "netsocket/WiFiAccessPoint.h"
 | 
			
		||||
 | 
			
		||||
/** UbloxWiFiSoftAPInterface class
 | 
			
		||||
 *
 | 
			
		||||
 *  Common interface that is shared between WiFi devices supporting SoftAP mode
 | 
			
		||||
 */
 | 
			
		||||
class UbloxWiFiSoftAPInterface
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    /** UbloxWiFiSoftAPInterface lifetime
 | 
			
		||||
     */
 | 
			
		||||
    virtual ~UbloxWiFiSoftAPInterface() {};
 | 
			
		||||
 | 
			
		||||
    /** Set the WiFi network credentials
 | 
			
		||||
     *
 | 
			
		||||
     *  @param ssid      Name of the network to connect to
 | 
			
		||||
     *  @param pass      Security passphrase to connect to the network
 | 
			
		||||
     *  @param security  Type of encryption for connection
 | 
			
		||||
     *                   (defaults to NSAPI_SECURITY_NONE)
 | 
			
		||||
     *  @return          0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_ap_credentials(const char *ssid, const char *pass = 0,
 | 
			
		||||
            nsapi_security_t security = NSAPI_SECURITY_NONE) = 0;
 | 
			
		||||
 | 
			
		||||
    /** Set the WiFi network channel
 | 
			
		||||
     *
 | 
			
		||||
     *  @param channel   Channel on which the connection is to be made, or 0 for any (Default: 0)
 | 
			
		||||
     *  @return          0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_ap_channel(uint8_t channel) = 0;
 | 
			
		||||
 | 
			
		||||
    /** Gets the current number of active connections
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         number of active connections
 | 
			
		||||
     */
 | 
			
		||||
    virtual int get_ap_connection_count() = 0;
 | 
			
		||||
 | 
			
		||||
    /** Gets the max supported number of active connections
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         maximum number of active connections
 | 
			
		||||
     */
 | 
			
		||||
    virtual int get_ap_max_connection_count() = 0;
 | 
			
		||||
 | 
			
		||||
    /** Enable or disable DHCP on the network access point
 | 
			
		||||
     *
 | 
			
		||||
     *  Enables DHCP in SoftAP mode. Defaults to enabled unless
 | 
			
		||||
     *  a static IP address has been assigned. Requires that the network is
 | 
			
		||||
     *  service stopped.
 | 
			
		||||
     *
 | 
			
		||||
     *  @param dhcp     True to enable DHCP
 | 
			
		||||
     *  @return         0 on success, negative error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t set_ap_dhcp(bool dhcp) = 0;
 | 
			
		||||
 | 
			
		||||
    /** Start the interface
 | 
			
		||||
     *
 | 
			
		||||
     *  Attempts to serve a WiFi network.
 | 
			
		||||
     *
 | 
			
		||||
     *  @param ssid      Name of the network to connect to
 | 
			
		||||
     *  @param pass      Security passphrase to connect to the network
 | 
			
		||||
     *  @param security  Type of encryption for connection (Default: NSAPI_SECURITY_NONE)
 | 
			
		||||
     *  @param channel   Channel on which the connection is to be made.
 | 
			
		||||
     *  @return          0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t ap_start(const char *ssid, const char *pass = 0,
 | 
			
		||||
            nsapi_security_t security = NSAPI_SECURITY_NONE, uint8_t channel = 0) = 0;
 | 
			
		||||
 | 
			
		||||
    /** Start the interface
 | 
			
		||||
     *
 | 
			
		||||
     *  Attempts to serve a WiFi network. Requires ssid to be set.
 | 
			
		||||
     *  passphrase is optional.
 | 
			
		||||
     *  If passphrase is invalid, NSAPI_ERROR_AUTH_ERROR is returned.
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         0 on success, negative error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t ap_start() = 0;
 | 
			
		||||
 | 
			
		||||
    /** Stop the interface
 | 
			
		||||
     *
 | 
			
		||||
     *  @return         0 on success, or error code on failure
 | 
			
		||||
     */
 | 
			
		||||
    virtual nsapi_error_t ap_stop() = 0;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -295,7 +295,9 @@ typedef enum {
 | 
			
		|||
 * @ingroup wlan
 | 
			
		||||
 */
 | 
			
		||||
typedef enum {
 | 
			
		||||
    cbWLAN_IOCTL_FIRST
 | 
			
		||||
    cbWLAN_IOCTL_FIRST = 0,
 | 
			
		||||
    cbWLAN_IOCTL_SET_AP_BEACON_INTERVAL = 9,                         //!< Beacon period in TUs
 | 
			
		||||
    cbWLAN_IOCTL_GET_AP_BEACON_INTERVAL = 10,                        //!< Beacon period in TUs
 | 
			
		||||
} cbWLAN_Ioctl;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue