ESResult ConnectToWiFiNetwork(const char *ssid, const char *pass, NetworkEventCallback cb)
{
    char *fwVersion;
    int status = WL_IDLE_STATUS;
    int res;

    // check for the presence of the shield:
    if (WiFi.status() == WL_NO_SHIELD)
    {
        OC_LOG(ERROR, ES_NH_TAG, "WiFi shield not present");
        return ES_ERROR;
    }

    // Verify that WiFi Shield is running the firmware with all UDP fixes
    fwVersion = WiFi.firmwareVersion();
    OC_LOG_V(INFO, ES_NH_TAG, "WiFi Shield Firmware version %s", fwVersion);
    if (strncmp(fwVersion, ARDUINO_WIFI_SHIELD_UDP_FW_VER, sizeof(ARDUINO_WIFI_SHIELD_UDP_FW_VER))
            != 0)
    {
        OC_LOG(DEBUG, ES_NH_TAG, "!!!!! Upgrade WiFi Shield Firmware version !!!!!!");
        //return ES_ERROR;
    }

    OC_LOG_V(INFO, ES_NH_TAG, "Finding SSID: %s", ssid);

    while (findNetwork(ssid) == 0) // found
    {
        delay(1000);
    }

    if (cb != NULL)
    {
        cb(ES_NETWORKFOUND);
    }

    if (WiFi.status() == WL_CONNECTED)
        WiFi.disconnect();

    res = ConnectToNetwork(ssid, pass);

    if (res == 0)
    {
        return ES_NETWORKCONNECTED;
    }
    else
    {
        return ES_NETWORKNOTCONNECTED;
    }
}
예제 #2
0
ESResult ConnectToWiFiNetwork(const char *ssid, const char *pass, NetworkEventCallback cb)
{
    char *fwVersion;
    int status = WL_IDLE_STATUS;
    int res;

    // check for the presence of the shield:
    if (WiFi.status() == WL_NO_SHIELD)
    {
        OIC_LOG(ERROR, ES_NH_TAG, "WiFi shield not present");
        return ES_ERROR;
    }

    // Verify that WiFi Shield is running the firmware with all UDP fixes
    fwVersion = WiFi.firmwareVersion();
    OIC_LOG_V(INFO, ES_NH_TAG, "WiFi Shield Firmware version %s", fwVersion);
    if (strncmp(fwVersion, ARDUINO_WIFI_SHIELD_UDP_FW_VER, sizeof(ARDUINO_WIFI_SHIELD_UDP_FW_VER))
            != 0)
    {
        OIC_LOG(DEBUG, ES_NH_TAG, "!!!!! Upgrade WiFi Shield Firmware version !!!!!!");
        return ES_ERROR;
    }

    //Retry counter is reset everytime the ConnectToWiFiNetwork is invoked
    g_retryCounter = 0;

    OIC_LOG_V(INFO, ES_NH_TAG, "Finding SSID: %s", ssid);

    while ((findNetwork(ssid) == 0) && g_retryCounter < ES_MAX_NETWORK_RETRY) // found
    {
        delay(1000);
        g_retryCounter++;
    }

    if(g_retryCounter == ES_MAX_NETWORK_RETRY){
        OIC_LOG_V(ERROR, ES_NH_TAG, "Connection to network failed after %d attempts",
                  g_retryCounter);
        return ES_ERROR;
    }

    if (cb != NULL)
    {
        cb(ES_OK);
    }

    if (WiFi.status() == WL_CONNECTED)
        WiFi.disconnect();

    //Retry counter is reset everytime the ConnectToWiFiNetwork is invoked
    g_retryCounter = 0;

    res = ConnectToNetwork(ssid, pass);

    if (res == 0)
    {
        return ES_NETWORKCONNECTED;
    }
    else
    {
        return ES_NETWORKNOTCONNECTED;
    }
}