Host library for controlling a WiConnect enabled Wi-Fi module.

Dependents:   wiconnect-ota_example wiconnect-web_setup_example wiconnect-test-console wiconnect-tcp_server_example ... more

NetworkInterface.h

Committer:
dan_ackme
Date:
2014-08-12
Revision:
11:ea484e1b7fc4
Parent:
1:6ec9998427ad
Child:
13:2b51f5267c92

File content as of revision 11:ea484e1b7fc4:

/*
 * Copyright 2014, ACKme Networks
 * All Rights Reserved.
 *
 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of ACKme Networks;
 * the contents of this file may not be disclosed to third parties, copied
 * or duplicated in any form, in whole or in part, without the prior
 * written permission of ACKme Networks.
 */

#pragma once


#include "WiconnectTypes.h"
#include "types/ScanResultList.h"


/**
 * @namespace wiconnect
 */
namespace wiconnect {


/**
 * @ingroup types_network
 *
 * @brief The provides an interface for joining and/or creating a network.
 * It provides other utilities such as scanning for networks, pinging a network,
 * resolving a domain name to IP address.
 *
 */
class NetworkInterface
{
public:
    /**
     * @ingroup api_network_setup
     *
     * @brief Start the WiConnect WiFi module 'web setup' feature.
     */
    WiconnectResult startWebSetup(const char *ssid = NULL, const char *password = NULL, const Callback &completeHandler = Callback());

    /**
     * @ingroup api_network_setup
     *
     * @brief Stop the WiConnect WiFi module 'web setup' feature.
     */
    WiconnectResult stopWebSetup();

    /**
     * @ingroup api_network_setup
     *
     * @brief Return status of WiConnect WiFi module 'web setup' feature.
     */
    WiconnectResult isWebSetupRunning(bool *isRunningPtr);


    // ------------------------------------------------------------------------


    /**
     * @ingroup api_network_wlan
     *
     * @brief Join a WiFi network.
     */
    WiconnectResult join(const char* ssid = NULL, const char *password = NULL, const Callback &completeHandler = Callback());

    /**
     * @ingroup api_network_wlan
     *
     * @brief Leave a WiFi network.
     */
    WiconnectResult leave();

    /**
     * @ingroup api_network_wlan
     *
     * @brief Get connection status to WiFi network.
     */
    WiconnectResult getNetworkStatus(NetworkStatus *statusPtr);

    // ------------------------------------------------------------------------


//    WiconnectResult startSoftAp(const char* ssid = NULL, const char *password = NULL, const Callback &clientConnectedCallback = Callback());
//    WiconnectResult stopSoftAp();
//    WiconnectResult getSoftApClientList();


    // ------------------------------------------------------------------------


    /**
     * @ingroup api_network_util
     *
     * @brief Scan for available WiFi networks.
     */
    WiconnectResult scan(ScanResultList &resultList, const uint8_t *channelList = NULL, const char* ssid = NULL);

    /**
     * @ingroup api_network_util
     *
     * @brief Ping a WiFi network.
     */
    WiconnectResult ping(const char *domain = NULL, uint32_t *timeMsPtr = NULL);

    /**
     * @ingroup api_network_util
     *
     * @brief Resolve domain name into IP address.
     */
    WiconnectResult lookup(const char *domain, uint32_t *ipAddressPtr);


    // ------------------------------------------------------------------------


    /**
     * @ingroup api_network_settings
     *
     * @brief Set DHCP enabled.
     */
    WiconnectResult setDhcpEnabled(bool enabled);

    /**
     * @ingroup api_network_settings
     *
     * @brief Get if DHCP enabled.
     */
    WiconnectResult getDhcpEnabled(bool *enabledPtr);

    /**
     * @ingroup api_network_settings
     *
     * @brief Set static IP settings
     */
    WiconnectResult setIpSettings(uint32_t ip, uint32_t netmask, uint32_t gateway);

    /**
     * @ingroup api_network_settings
     *
     * @brief Set static IP settings (with string parameters)
     */
    WiconnectResult setIpSettings(const char* ip, const char* netmask, const char* gateway);

    /**
     * @ingroup api_network_settings
     *
     * @brief Get network IP settings
     */
    WiconnectResult getIpSettings(uint32_t *ip, uint32_t *netmask, uint32_t *gateway);

    /**
     * @ingroup api_network_settings
     *
     * @brief Get signal strength to WiFi network
     */
    WiconnectResult getSignalStrength(NetworkSignalStrength *signalStrengthPtr);


    // ------------------------------------------------------------------------


    /**
     * @ingroup conversion_util
     *
     * @brief Convert string to IP address
     */
    static bool strToIp(const char *str, uint32_t *intPtr);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert IP address to string
     */
    static const char* ipToStr(uint32_t ip, char *ipStrBuffer = NULL);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert @ref NetworkStatus to string
     */
    static const char* networkStatusToStr(NetworkStatus status);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert @ref NetworkSignalStrength to string
     */
    static const char* signalStrengthToStr(NetworkSignalStrength signalStrenth);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert RSSI (in dBm) to @ref NetworkSignalStrength
     */
    static NetworkSignalStrength rssiToSignalStrength(int rssi);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert string to @ref NetworkSecurity
     */
    static NetworkSecurity strToNetworkSecurity(const char *str);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert @ref NetworkSecurity to string
     */
    static const char* networkSecurityToStr(NetworkSecurity security);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert string @ref Ssid
     */
    static bool strToSsid(const char *str, Ssid *ssid);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert @ref Ssid to string
     */
    static const char* ssidToStr(const Ssid *ssid, char *ssidStrBuffer = NULL);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert string @ref MacAddress
     */
    static bool strToMacAddress(const char *str, MacAddress *macAddress);

    /**
     * @ingroup conversion_util
     *
     * @brief Convert @ref MacAddress to string
     */
    static const char* macAddressToStr(const MacAddress *macAddress, char *macStrBuffer = NULL);

protected:
    NetworkInterface(Wiconnect *wiconnect);

    WiconnectResult processScanResults(char *resultStr, ScanResultList &resultList);

#ifdef WICONNECT_ASYNC_TIMER_ENABLED
    Callback completeHandler;
    PeriodicTimer monitorTimer;

    void webSetupStatusMonitor();
    void webSetupStatusCheckCallback(WiconnectResult result, void *arg1, void *arg2);

    void joinStatusMonitor();
    void joinStatusCheckCallback(WiconnectResult result, void *arg1, void *arg2);

    //void scanCompleteCallback(WiconnectResult result, void *arg1, void *arg2);
#endif

private:
    Wiconnect *wiconnect;
};

}