Browse Source

Merge branch 'bugfix/fix_some_wifi_bugs_0105_v3.3' into 'release/v3.3'

Bugfix/fix some wifi bugs 0105 v3.3 (backport v3.3)

See merge request espressif/esp-idf!11945
Jiang Jiang Jian 5 years ago
parent
commit
3f15854d96

+ 7 - 0
components/esp32/include/esp_phy_init.h

@@ -244,6 +244,13 @@ esp_err_t esp_modem_sleep_deregister(modem_sleep_module_t module);
  *                   microsecond since boot when phy/rf was last switched on
 */
 int64_t esp_phy_rf_get_on_ts(void);
+
+/**
+ * @brief Get PHY lib version
+ * @return PHY lib version.
+ */
+char * get_phy_version_str(void);
+
 #ifdef __cplusplus
 }
 #endif

+ 5 - 3
components/esp32/include/esp_wifi.h

@@ -442,6 +442,8 @@ esp_err_t esp_wifi_scan_get_ap_records(uint16_t *number, wifi_ap_record_t *ap_re
 /**
   * @brief     Get information of AP which the ESP32 station is associated with
   *
+  * @attention When the obtained country information is empty, it means that the AP does not carry country information
+  *
   * @param     ap_info  the wifi_ap_record_t to hold AP information
   *            sta can get the connected ap's phy mode info through the struct member
   *            phy_11b,phy_11g,phy_11n,phy_lr in the wifi_ap_record_t struct.
@@ -905,9 +907,9 @@ esp_err_t esp_wifi_set_vendor_ie_cb(esp_vendor_ie_cb_t cb, void *ctx);
   * @attention 1. Maximum power before wifi startup is limited by PHY init data bin.
   * @attention 2. The value set by this API will be mapped to the max_tx_power of the structure wifi_country_t variable.
   * @attention 3. Mapping Table {Power, max_tx_power} = {{8,   2}, {20,  5}, {28,  7}, {34,  8}, {44, 11},
-  *                                                      {52, 13}, {56, 14}, {60, 15}, {66, 16}, {72, 18}, {78, 20}}.
-  * @attention 4. Param power unit is 0.25dBm, range is [8, 78] corresponding to 2dBm - 20dBm.
-  * @attention 5. Relationship between set value and actual value. As follows: {set value range, actual value} = {{[8,  19],8}, {[20, 27],20}, {[28, 33],28}, {[34, 43],34}, {[44, 51],44}, {[52, 55],52}, {[56, 59],56}, {[60, 65],60}, {[66, 71],66}, {[72, 77],72}, {78,78}}
+  *                                                      {52, 13}, {56, 14}, {60, 15}, {66, 16}, {72, 18}, {80, 20}}.
+  * @attention 4. Param power unit is 0.25dBm, range is [8, 84] corresponding to 2dBm - 20dBm.
+  * @attention 5. Relationship between set value and actual value. As follows: {set value range, actual value} = {{[8,  19],8}, {[20, 27],20}, {[28, 33],28}, {[34, 43],34}, {[44, 51],44}, {[52, 55],52}, {[56, 59],56}, {[60, 65],60}, {[66, 71],66}, {[72, 79],72}, {[80, 84],80}}.
   *
   * @param     power  Maximum WiFi transmitting power.
   *

+ 5 - 4
components/esp32/include/esp_wifi_types.h

@@ -33,10 +33,10 @@ typedef enum {
     WIFI_MODE_MAX
 } wifi_mode_t;
 
-typedef esp_interface_t wifi_interface_t;
-
-#define WIFI_IF_STA ESP_IF_WIFI_STA
-#define WIFI_IF_AP  ESP_IF_WIFI_AP
+typedef enum {
+    WIFI_IF_STA = ESP_IF_WIFI_STA,
+    WIFI_IF_AP  = ESP_IF_WIFI_AP,
+} wifi_interface_t;
 
 typedef enum {
     WIFI_COUNTRY_POLICY_AUTO,   /**< Country policy is auto, use the country info of AP to which the station is connected */
@@ -364,6 +364,7 @@ typedef enum {
 #define WIFI_PROMIS_FILTER_MASK_MISC        (1<<3)        /**< filter the packets with type of WIFI_PKT_MISC */
 #define WIFI_PROMIS_FILTER_MASK_DATA_MPDU   (1<<4)        /**< filter the MPDU which is a kind of WIFI_PKT_DATA */
 #define WIFI_PROMIS_FILTER_MASK_DATA_AMPDU  (1<<5)        /**< filter the AMPDU which is a kind of WIFI_PKT_DATA */
+#define WIFI_PROMIS_FILTER_MASK_FCSFAIL     (1<<6)        /**< filter the FCS failed packets, do not open it in general */
 
 #define WIFI_PROMIS_CTRL_FILTER_MASK_ALL         (0xFF800000)  /**< filter all control packets */
 #define WIFI_PROMIS_CTRL_FILTER_MASK_WRAPPER     (1<<23)       /**< filter the control packets with subtype of Control Wrapper */

+ 9 - 0
components/esp32/ld/esp32_fragments.lf

@@ -52,6 +52,10 @@ entries:
 entries:
     .wifi0iram+
 
+[sections:phy_iram]
+entries:
+    .phyiram+
+
 [scheme:default]
 entries:
     text -> flash_text
@@ -67,6 +71,7 @@ entries:
     rtc_bss -> rtc_bss
     wifi_iram -> flash_text
     wifi_rx_iram -> flash_text
+    phy_iram -> flash_text
 
 [scheme:rtc]
 entries:
@@ -96,3 +101,7 @@ entries:
 [scheme:wifi_rx_iram]
 entries:
     wifi_rx_iram -> iram0_text
+
+[scheme:phy_iram]
+entries:
+    phy_iram -> iram0_text

+ 1 - 1
components/esp32/lib

@@ -1 +1 @@
-Subproject commit a88a4f31015e667fa6ca93aca38a86d85e90aa9d
+Subproject commit c323de3a272ff064f72fdb99f45d2e3ec32f6b88

+ 3 - 0
components/esp32/phy_init.c

@@ -621,6 +621,9 @@ static void esp_phy_reduce_tx_power(esp_phy_init_data_t* init_data)
 
 void esp_phy_load_cal_and_init(phy_rf_module_t module)
 {
+    char * phy_version = get_phy_version_str();
+    ESP_LOGI(TAG, "phy_version %s", phy_version);
+
     esp_phy_calibration_data_t* cal_data =
             (esp_phy_calibration_data_t*) calloc(sizeof(esp_phy_calibration_data_t), 1);
     if (cal_data == NULL) {

+ 1 - 1
components/esp32/phy_init_data.h

@@ -77,7 +77,7 @@ static const esp_phy_init_data_t phy_init_data= { {
         0x18,
         0x18,
         0x18,
-        LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 40, 78),
+        LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 40, 84),
         LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 40, 72),
         LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 40, 66),
         LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 40, 60),

+ 1 - 1
components/esp32/test/test_phy_rtc.c

@@ -81,7 +81,7 @@ TEST_CASE("Test PHY/RTC functions called when cache is disabled", "[phy_rtc][cac
 {
     semphr_done = xSemaphoreCreateCounting(1, 0);
 
-    xTaskCreatePinnedToCore(test_phy_rtc_cache_task, "phy_rtc_test_task", 2048,
+    xTaskCreatePinnedToCore(test_phy_rtc_cache_task, "phy_rtc_test_task", 2176,
                             NULL, configMAX_PRIORITIES-1, NULL, 0);
 
     TEST_ASSERT( xSemaphoreTake(semphr_done, portMAX_DELAY) );

+ 1 - 1
components/lwip/port/esp32/netif/wlanif.c

@@ -114,7 +114,7 @@ low_level_output(struct netif *netif, struct pbuf *p)
   struct pbuf *q = p;
   err_t ret;
 
-  if (wifi_if >= ESP_IF_MAX) {
+  if (wifi_if > WIFI_IF_AP) {
     return ERR_IF;
   }
 

+ 1 - 1
examples/protocols/asio/chat_client/components/wifi_asio.cpp

@@ -95,7 +95,7 @@ void wifi_init_sta()
     strcpy((char*)(wifi_config.sta.password), EXAMPLE_ESP_WIFI_PASS);
 
     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
-    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
+    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
     ESP_ERROR_CHECK(esp_wifi_start() );
 
     ESP_LOGI(TAG, "wifi_init_sta finished.");

+ 1 - 1
examples/protocols/asio/chat_server/components/wifi_asio.cpp

@@ -95,7 +95,7 @@ void wifi_init_sta()
     strcpy((char*)(wifi_config.sta.password), EXAMPLE_ESP_WIFI_PASS);
 
     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
-    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
+    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
     ESP_ERROR_CHECK(esp_wifi_start() );
 
     ESP_LOGI(TAG, "wifi_init_sta finished.");

+ 1 - 1
examples/protocols/asio/tcp_echo_server/components/wifi_asio.cpp

@@ -95,7 +95,7 @@ void wifi_init_sta()
     strcpy((char*)(wifi_config.sta.password), EXAMPLE_ESP_WIFI_PASS);
 
     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
-    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
+    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
     ESP_ERROR_CHECK(esp_wifi_start() );
 
     ESP_LOGI(TAG, "wifi_init_sta finished.");

+ 1 - 1
examples/protocols/asio/udp_echo_server/components/wifi_asio.cpp

@@ -95,7 +95,7 @@ void wifi_init_sta()
     strcpy((char*)(wifi_config.sta.password), EXAMPLE_ESP_WIFI_PASS);
 
     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
-    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
+    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
     ESP_ERROR_CHECK(esp_wifi_start() );
 
     ESP_LOGI(TAG, "wifi_init_sta finished.");

+ 1 - 1
examples/protocols/asio/wifi_init/wifi_asio.cpp

@@ -95,7 +95,7 @@ void wifi_init_sta()
     strcpy((char*)(wifi_config.sta.password), EXAMPLE_ESP_WIFI_PASS);
 
     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
-    ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
+    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
     ESP_ERROR_CHECK(esp_wifi_start() );
 
     ESP_LOGI(TAG, "wifi_init_sta finished.");