@@ -739,6 +739,103 @@ static void event_handler(void* arg, esp_event_base_t event_base,
739739 }
740740}
741741
742+ // macros to format output
743+ #define PRINT_HEADER () ESP_LOGI(TAG, " Wifi Init Param | Default | Host | Actual");
744+ #define PRINT_FOOTER () ESP_LOGI(TAG, " End Wifi Init Param |");
745+ #define PRINT_USE_HOST_VALUE (param_str , default , host , final ) \
746+ ESP_LOGD(TAG, "% 20s | % 7d | % 7d | % 7d", param_str, default, host, final);
747+ #define PRINT_USE_DEFAULT_VALUE (param_str , default , host , final ) \
748+ ESP_LOGW(TAG, "% 20s | % 7d | % 7d | % 7d", param_str, default, host, final);
749+ #define PRINT_HEX64_USE_HOST_VALUE (param_str , default , host , final ) \
750+ ESP_LOGD(TAG, "% 20s | 0x% 5"PRIx32" | 0x% 5"PRIx64" | 0x% 5"PRIx64, param_str, default, host, final);
751+ #define PRINT_HEX64_USE_DEFAULT_VALUE (param_str , default , host , final ) \
752+ ESP_LOGW(TAG, "% 20s | % 7"PRIx32" | % 7"PRIx64" | % 7"PRIx64, param_str, default, host, final);
753+
754+ // macros to copy host or default value
755+ #define USE_HOST_VALUE (PARAM_STR , DEFAULT , PARAM ) \
756+ do { \
757+ dst_config->PARAM = src_config->PARAM; \
758+ PRINT_USE_HOST_VALUE(PARAM_STR, \
759+ DEFAULT, \
760+ src_config->PARAM, \
761+ dst_config->PARAM); \
762+ } while(0);
763+
764+ #define USE_DEFAULT_VALUE (PARAM_STR , DEFAULT , PARAM ) \
765+ do { \
766+ dst_config->PARAM = DEFAULT; \
767+ PRINT_USE_DEFAULT_VALUE(PARAM_STR, \
768+ DEFAULT, \
769+ src_config->PARAM, \
770+ dst_config->PARAM); \
771+ } while(0);
772+
773+ /** Returns the merged wifi init config
774+ * Compares the src config from the host with our Wi-Fi defaults
775+ * and adjust dst_config as necessary.
776+ *
777+ * Also displays the changed configs.
778+ */
779+ static wifi_init_config_t * get_merged_init_config (wifi_init_config_t * dst_config , WifiInitConfig * src_config )
780+ {
781+ /* always use value from host, except for
782+ * - cache_tx_buf_num
783+ * - feature_caps
784+ */
785+ PRINT_HEADER ();
786+ USE_HOST_VALUE ("static_rx_buf" , CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM , static_rx_buf_num );
787+ USE_HOST_VALUE ("dynamic_rx_buf" , CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM , dynamic_rx_buf_num );
788+ USE_HOST_VALUE ("tx_buf_type" , CONFIG_ESP_WIFI_TX_BUFFER_TYPE , tx_buf_type );
789+ USE_HOST_VALUE ("static_tx_buf" , WIFI_STATIC_TX_BUFFER_NUM , static_tx_buf_num );
790+ USE_HOST_VALUE ("dynamic_tx_buf" , WIFI_DYNAMIC_TX_BUFFER_NUM , dynamic_tx_buf_num );
791+ USE_HOST_VALUE ("rx_mgmt_buf_type" , CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF , rx_mgmt_buf_type );
792+ USE_HOST_VALUE ("rx_mgmt_buf" , WIFI_RX_MGMT_BUF_NUM_DEF , rx_mgmt_buf_num );
793+
794+ if (WIFI_ENABLE_CACHE_TX_BUFFER ) {
795+ // use setting from host
796+ USE_HOST_VALUE ("cache_tx_buf" , WIFI_CACHE_TX_BUFFER_NUM , cache_tx_buf_num );
797+ dst_config -> feature_caps = src_config -> feature_caps ;
798+ PRINT_HEX64_USE_HOST_VALUE ("feature_caps" , WIFI_FEATURE_CAPS ,
799+ src_config -> feature_caps ,
800+ dst_config -> feature_caps );
801+ } else {
802+ if (WIFI_FEATURE_CAPS != src_config -> feature_caps ) {
803+ // don't use host setting, which may have enabled CACHE_TX_BUFFER
804+ USE_DEFAULT_VALUE ("cache_tx_buf" , WIFI_CACHE_TX_BUFFER_NUM , cache_tx_buf_num );
805+ dst_config -> feature_caps = WIFI_FEATURE_CAPS ;
806+ PRINT_HEX64_USE_DEFAULT_VALUE ("feature_caps" , WIFI_FEATURE_CAPS ,
807+ src_config -> feature_caps ,
808+ dst_config -> feature_caps );
809+ } else {
810+ USE_HOST_VALUE ("cache_tx_buf" , WIFI_CACHE_TX_BUFFER_NUM , cache_tx_buf_num );
811+ dst_config -> feature_caps = src_config -> feature_caps ;
812+ PRINT_HEX64_USE_HOST_VALUE ("feature_caps" , WIFI_FEATURE_CAPS ,
813+ src_config -> feature_caps ,
814+ dst_config -> feature_caps );
815+ }
816+ }
817+
818+ USE_HOST_VALUE ("csi_enable" , WIFI_CSI_ENABLED , csi_enable );
819+ USE_HOST_VALUE ("ampdu_rx_enable" , WIFI_AMPDU_RX_ENABLED , ampdu_rx_enable );
820+ USE_HOST_VALUE ("ampdu_tx_enable" , WIFI_AMPDU_TX_ENABLED , ampdu_tx_enable );
821+ USE_HOST_VALUE ("amsdu_tx_enable" , WIFI_AMSDU_TX_ENABLED , amsdu_tx_enable );
822+ USE_HOST_VALUE ("nvs_enable" , WIFI_NVS_ENABLED , nvs_enable );
823+ USE_HOST_VALUE ("nano_enable" , WIFI_NANO_FORMAT_ENABLED , nano_enable );
824+ USE_HOST_VALUE ("rx_ba_win" , WIFI_DEFAULT_RX_BA_WIN , rx_ba_win );
825+ USE_HOST_VALUE ("wifi_task_core" , WIFI_TASK_CORE_ID , wifi_task_core_id );
826+ USE_HOST_VALUE ("beacon_max_len" , WIFI_SOFTAP_BEACON_MAX_LEN , beacon_max_len );
827+ USE_HOST_VALUE ("mgmt_sbuf_num" , WIFI_MGMT_SBUF_NUM , mgmt_sbuf_num );
828+ USE_HOST_VALUE ("sta_disconnected_pm" , WIFI_STA_DISCONNECTED_PM_ENABLED , sta_disconnected_pm );
829+ USE_HOST_VALUE ("espnow_max_encrypt" ,CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM , espnow_max_encrypt_num );
830+ USE_HOST_VALUE ("tx_hetb_queue" , WIFI_TX_HETB_QUEUE_NUM , tx_hetb_queue_num );
831+ USE_HOST_VALUE ("dump_hesigb_enable" , WIFI_DUMP_HESIGB_ENABLED , dump_hesigb_enable );
832+ PRINT_FOOTER ();
833+
834+ dst_config -> magic = src_config -> magic ;
835+
836+ return dst_config ;
837+ }
838+
742839static esp_err_t req_wifi_init (Rpc * req , Rpc * resp , void * priv_data )
743840{
744841 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT ();
@@ -748,28 +845,7 @@ static esp_err_t req_wifi_init(Rpc *req, Rpc *resp, void *priv_data)
748845 rpc__resp__wifi_init__init );
749846
750847 RPC_RET_FAIL_IF (!req_payload -> cfg );
751- cfg .static_rx_buf_num = req_payload -> cfg -> static_rx_buf_num ;
752- cfg .dynamic_rx_buf_num = req_payload -> cfg -> dynamic_rx_buf_num ;
753- cfg .tx_buf_type = req_payload -> cfg -> tx_buf_type ;
754- cfg .static_tx_buf_num = req_payload -> cfg -> static_tx_buf_num ;
755- cfg .dynamic_tx_buf_num = req_payload -> cfg -> dynamic_tx_buf_num ;
756- cfg .cache_tx_buf_num = req_payload -> cfg -> cache_tx_buf_num ;
757- cfg .csi_enable = req_payload -> cfg -> csi_enable ;
758- cfg .ampdu_rx_enable = req_payload -> cfg -> ampdu_rx_enable ;
759- cfg .ampdu_tx_enable = req_payload -> cfg -> ampdu_tx_enable ;
760- cfg .amsdu_tx_enable = req_payload -> cfg -> amsdu_tx_enable ;
761- cfg .nvs_enable = req_payload -> cfg -> nvs_enable ;
762- cfg .nano_enable = req_payload -> cfg -> nano_enable ;
763- cfg .rx_ba_win = req_payload -> cfg -> rx_ba_win ;
764- cfg .wifi_task_core_id = req_payload -> cfg -> wifi_task_core_id ;
765- cfg .beacon_max_len = req_payload -> cfg -> beacon_max_len ;
766- cfg .mgmt_sbuf_num = req_payload -> cfg -> mgmt_sbuf_num ;
767- cfg .feature_caps = req_payload -> cfg -> feature_caps ;
768- cfg .sta_disconnected_pm = req_payload -> cfg -> sta_disconnected_pm ;
769- cfg .espnow_max_encrypt_num = req_payload -> cfg -> espnow_max_encrypt_num ;
770- cfg .magic = req_payload -> cfg -> magic ;
771-
772- RPC_RET_FAIL_IF (esp_wifi_init (& cfg ));
848+ RPC_RET_FAIL_IF (esp_wifi_init (get_merged_init_config (& cfg , req_payload -> cfg )));
773849
774850 ESP_ERROR_CHECK (esp_event_handler_instance_register (WIFI_EVENT ,
775851 ESP_EVENT_ANY_ID ,
0 commit comments