You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/07/16 06:21:31 UTC
[incubator-nuttx] branch master updated: risc-v/esp32c3: Fix some
ESP32-C3 Wi-Fi driver issues
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 2abb75f risc-v/esp32c3: Fix some ESP32-C3 Wi-Fi driver issues
2abb75f is described below
commit 2abb75fee72cace24b59cb401a43f40b95864462
Author: ChenWen <ch...@espressif.com>
AuthorDate: Fri Jul 16 10:07:40 2021 +0800
risc-v/esp32c3: Fix some ESP32-C3 Wi-Fi driver issues
---
arch/risc-v/src/esp32c3/Make.defs | 2 +-
arch/risc-v/src/esp32c3/esp32c3_wifi_adapter.c | 46 +++++++++++++++++++++-----
arch/risc-v/src/esp32c3/esp32c3_wifi_utils.c | 5 +--
3 files changed, 41 insertions(+), 12 deletions(-)
diff --git a/arch/risc-v/src/esp32c3/Make.defs b/arch/risc-v/src/esp32c3/Make.defs
index 19a7621..40ec587 100644
--- a/arch/risc-v/src/esp32c3/Make.defs
+++ b/arch/risc-v/src/esp32c3/Make.defs
@@ -179,7 +179,7 @@ endif
ifeq ($(CONFIG_ESP32C3_WIRELESS),y)
WIRELESS_DRV_UNPACK = esp-wireless-drivers-3rdparty
-WIRELESS_DRV_ID = df1f8c1
+WIRELESS_DRV_ID = 024420d
WIRELESS_DRV_ZIP = $(WIRELESS_DRV_ID).zip
WIRELESS_DRV_URL = https://github.com/espressif/esp-wireless-drivers-3rdparty/archive
diff --git a/arch/risc-v/src/esp32c3/esp32c3_wifi_adapter.c b/arch/risc-v/src/esp32c3/esp32c3_wifi_adapter.c
index 2934851..de940b1 100644
--- a/arch/risc-v/src/esp32c3/esp32c3_wifi_adapter.c
+++ b/arch/risc-v/src/esp32c3/esp32c3_wifi_adapter.c
@@ -6494,18 +6494,43 @@ int esp_wifi_softap_password(struct iwreq *iwr, bool set)
return wifi_errno_trans(ret);
}
- ext = (struct iw_encode_ext *)(iwr->u.encoding.pointer);
pdata = (uint8_t *)(ext + 1);
len = ext->key_len;
-
if (set)
{
wifi_cfg.ap.max_connection = ESP_MAX_STA_CONN;
memset(wifi_cfg.ap.password, 0x0, PWD_MAX_LEN);
- memcpy(wifi_cfg.ap.password, pdata, len);
if (len)
{
- wifi_cfg.ap.authmode = WIFI_AUTH_WPA_WPA2_PSK;
+ memcpy(wifi_cfg.ap.password, pdata, len);
+ switch (ext->alg)
+ {
+ case IW_ENCODE_ALG_NONE:
+ wifi_cfg.ap.authmode = WIFI_AUTH_OPEN;
+ break;
+
+ case IW_ENCODE_ALG_WEP:
+ wifi_cfg.ap.authmode = WIFI_AUTH_WEP;
+ break;
+
+ case IW_ENCODE_ALG_TKIP:
+ wifi_cfg.ap.authmode = WIFI_AUTH_WPA_PSK;
+ break;
+
+ case IW_ENCODE_ALG_CCMP:
+ wifi_cfg.ap.authmode = WIFI_AUTH_WPA2_PSK;
+ break;
+
+ case IW_ENCODE_ALG_PMK:
+ case IW_ENCODE_ALG_AES_CMAC:
+ wifi_cfg.ap.authmode = WIFI_AUTH_WPA_WPA2_PSK;
+ break;
+
+ default:
+ wlerr("ERROR: Failed to transfer wireless authmode: %d",
+ ext->alg);
+ return -EINVAL;
+ }
}
ret = esp_wifi_set_config(WIFI_IF_AP, &wifi_cfg);
@@ -6588,7 +6613,7 @@ int esp_wifi_softap_essid(struct iwreq *iwr, bool set)
{
memset(wifi_cfg.ap.ssid, 0x0, SSID_MAX_LEN);
memcpy(wifi_cfg.ap.ssid, pdata, len);
-
+ wifi_cfg.ap.ssid_len = len;
ret = esp_wifi_set_config(WIFI_IF_AP, &wifi_cfg);
if (ret)
{
@@ -6808,11 +6833,14 @@ int esp_wifi_softap_auth(struct iwreq *iwr, bool set)
return -EINVAL;
}
- ret = esp_wifi_set_config(WIFI_IF_AP, &wifi_cfg);
- if (ret)
+ if (wifi_cfg.ap.authmode == WIFI_AUTH_OPEN)
{
- wlerr("ERROR: Failed to set Wi-Fi config data ret=%d\n", ret);
- return wifi_errno_trans(ret);
+ ret = esp_wifi_set_config(WIFI_IF_AP, &wifi_cfg);
+ if (ret)
+ {
+ wlerr("ERROR: Failed to set Wi-Fi config data ret=%d\n", ret);
+ return wifi_errno_trans(ret);
+ }
}
}
else
diff --git a/arch/risc-v/src/esp32c3/esp32c3_wifi_utils.c b/arch/risc-v/src/esp32c3/esp32c3_wifi_utils.c
index 4636045..5e7d47f 100644
--- a/arch/risc-v/src/esp32c3/esp32c3_wifi_utils.c
+++ b/arch/risc-v/src/esp32c3/esp32c3_wifi_utils.c
@@ -158,8 +158,7 @@ int esp_wifi_start_scan(struct iwreq *iwr)
config->ssid[req->essid_len] = '\0';
}
- if (iwr->u.data.flags & IW_SCAN_THIS_FREQ &&
- req->num_channels > 0)
+ if (req->num_channels > 0)
{
/* Scan specific channels */
@@ -364,6 +363,7 @@ void esp_wifi_scan_event_parse(void)
{
priv->scan_status = ESP_SCAN_DONE;
wlinfo("INFO: None AP is scanned\n");
+ nxsem_post(&priv->scan_signal);
return;
}
@@ -372,6 +372,7 @@ void esp_wifi_scan_event_parse(void)
{
priv->scan_status = ESP_SCAN_DONE;
wlerr("ERROR: Failed to calloc buffer to print scan results");
+ nxsem_post(&priv->scan_signal);
return;
}