static bool _mtk_wifi_apply_setting()

in amazon-freertos/lib/wifi/portable/mediatek/mt7697hx-dev-kit/aws_wifi.c [920:1012]


static bool _mtk_wifi_apply_setting( uint8_t port,
           const WIFINetworkParams_t * const pxNetworkParams )
{
    wifi_auth_mode_t    mtk_auth;
    wifi_encrypt_type_t mtk_ciph;

    /* check ssid */

    if( NULL == pxNetworkParams ||
        NULL == pxNetworkParams->pcSSID ||
        pxNetworkParams->ucSSIDLength <= 1 ||
        pxNetworkParams->ucSSIDLength > ( wificonfigMAX_SSID_LEN + 1 ) )
    {
        return false;
    }

    /* check security */

    if( eWiFiSecurityOpen != pxNetworkParams->xSecurity )
    {
        if( pxNetworkParams->xSecurity != eWiFiSecurityWEP &&
            pxNetworkParams->xSecurity != eWiFiSecurityWPA &&
            pxNetworkParams->xSecurity != eWiFiSecurityWPA2 )
            return false;

        if( NULL == pxNetworkParams->pcPassword )
            return false;

        if( pxNetworkParams->ucPasswordLength > ( wificonfigMAX_PASSPHRASE_LEN + 1 ) ||
            pxNetworkParams->ucPasswordLength <= 1 )
            return false;
    }

    mtk_auth = _aws_security_to_mtk_auth   ( pxNetworkParams->xSecurity );
    mtk_ciph = _aws_security_to_mtk_encrypt( pxNetworkParams->xSecurity );

    if( port == WIFI_PORT_AP && wifi_config_set_channel( port, pxNetworkParams->cChannel ) < 0 )
    {
        LOG_E( wifi, "%s: set CHANNEL fail\n", __FUNCTION__ );
        return false;
    }

    if( wifi_config_set_ssid( port,
                              (uint8_t *) pxNetworkParams->pcSSID,
                              (uint8_t) pxNetworkParams->ucSSIDLength - 1) < 0 )
    {
        LOG_E( wifi, "%s: set SSID fail\n", __FUNCTION__ );
        return false;
    }

    if( wifi_config_set_security_mode( port, mtk_auth, mtk_ciph ) < 0 )
    {
        LOG_E( wifi, "%s: set SECURITY MODE fail\n", __FUNCTION__ );
        return false;
    }

    if( WIFI_ENCRYPT_TYPE_WEP_ENABLED  == mtk_ciph ||
        WIFI_ENCRYPT_TYPE_WEP_DISABLED == mtk_ciph )
    {
        wifi_wep_key_t  wep_keys;

        memset( &wep_keys, 0, sizeof( wep_keys ) );

        if( WIFI_ENCRYPT_TYPE_WEP_ENABLED == mtk_ciph &&
            NULL != pxNetworkParams->pcPassword )
        {
            memcpy( &wep_keys.wep_key[ 0 ],
                    pxNetworkParams->pcPassword,
                    pxNetworkParams->ucPasswordLength - 1 );

            wep_keys.wep_key_length[ 0 ] = pxNetworkParams->ucPasswordLength;
            wep_keys.wep_tx_key_index    = 0;
        }

        if( wifi_config_set_wep_key( port, &wep_keys ) < 0 )
        {
            LOG_E( wifi, "%s: set WEP KEY fail\n", __FUNCTION__ );
            return false;
        }
    }
    else if( WIFI_ENCRYPT_TYPE_TKIP_AES_MIX == mtk_ciph )
    {
        if( wifi_config_set_wpa_psk_key( port,
                                         (uint8_t *)pxNetworkParams->pcPassword,
                                         (uint8_t)pxNetworkParams->ucPasswordLength ) < 0 )
        {
            LOG_E( wifi, "%s: set WPA/WPA2 PSK KEY fail\n", __FUNCTION__ );
            return false;
        }
    }

    return true;
}