feat(log): add esp_log to internal wifi lib

This commit is contained in:
Zhang Jun Hao
2019-01-28 15:03:51 +08:00
parent 54d31061c1
commit 965fc47ff8
8 changed files with 289 additions and 2 deletions

View File

@ -288,6 +288,127 @@ config WIFI_TX_RATE_SEQUENCE_FROM_HIGH
If this option is enabled, Wifi will try to send packets first from high rate(54M). If it fails, it will
try at low rate until the transmission is successful.
config ESP8266_WIFI_DEBUG_LOG_ENABLE
bool "Enable WiFi debug log"
default n
help
Select this option to enable WiFi debug log
choice ESP8266_WIFI_DEBUG_LOG_LEVEL
depends on ESP8266_WIFI_DEBUG_LOG_ENABLE
prompt "The DEBUG level is enabled"
default ESP8266_WIFI_DEBUG_LOG_ERROR
help
The WiFi log is divided into the following levels: ERROR,WARNING,INFO,DEBUG,VERBOSE.
The ERROR level is enabled by default, and the WARNING,INFO,DEBUG,VERBOSE levels can be enabled here.
config ESP8266_WIFI_DEBUG_LOG_ERROR
bool "Error"
config ESP8266_WIFI_DEBUG_LOG_WARNING
bool "Warning"
config ESP8266_WIFI_DEBUG_LOG_INFO
bool "Info"
config ESP8266_WIFI_DEBUG_LOG_DEBUG
bool "Debug"
config ESP8266_WIFI_DEBUG_LOG_VERBOSE
bool "Verbose"
endchoice
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE
depends on ESP8266_WIFI_DEBUG_LOG_ENABLE
bool "WiFi debug log submodule"
default n
help
Enable this option to set the WiFi debug log submodule.
Currently the log submodule contains the following parts: INIT,IOCTL,CONN,SCAN.
The INIT submodule indicates the initialization process.The IOCTL submodule indicates the API calling
process.
The CONN submodule indicates the connecting process.The SCAN submodule indicates the scaning process.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_CORE
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "core"
default n
help
When this option is enabled, log for core module will be enabled..
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_SCAN
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "scan"
default n
help
When this option is enabled, log for scan module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_PM
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "power management"
default n
help
When this option is enabled, log for power management module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_NVS
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "NVS"
default n
help
When this option is enabled, log for NVS module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_TRC
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "TRC"
default n
help
When this option is enabled, log for TRC module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_EBUF
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "EBUF"
default n
help
When this option is enabled, log for EBUF module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_NET80211
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "NET80211"
default n
help
When this option is enabled, log for net80211 module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_TIMER
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "TIMER"
default n
help
When this option is enabled, log for timer module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_ESPNOW
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "ESPNOW"
default n
help
When this option is enabled, log for espnow module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_MAC
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "MAC layer"
default n
help
When this option is enabled, log for mac layer module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_WPA
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "wpa"
default n
help
When this option is enabled, log for wpa module will be enabled.
config ESP8266_WIFI_DEBUG_LOG_SUBMODULE_WPS
depends on ESP8266_WIFI_DEBUG_LOG_SUBMODULE
bool "wps"
default n
help
When this option is enabled, log for wps module will be enabled.
endmenu
menu PHY

View File

@ -11,8 +11,13 @@ COMPONENT_SRCDIRS := driver source
LIBS ?=
ifndef CONFIG_NO_BLOBS
ifndef CONFIG_ESP8266_WIFI_DEBUG_LOG_ENABLE
LIBS += gcc hal core net80211 \
phy pp smartconfig ssc wpa espnow wps
else
LIBS += gcc hal core_dbg net80211_dbg \
phy pp_dbg smartconfig ssc wpa_dbg espnow_dbg wps_dbg
endif
endif
#Linker scripts used to link the final application.

View File

@ -24,6 +24,36 @@ typedef enum {
WIFI_RX_PBUF_DRAM, /** save rx buffer to dram and upload to tcpip */
} wifi_rx_pbuf_mem_type_t;
/**
* @brief WiFi log level
*
*/
typedef enum {
WIFI_LOG_ERROR = 0, /*enabled by default*/
WIFI_LOG_WARNING, /*can be set in menuconfig*/
WIFI_LOG_INFO, /*can be set in menuconfig*/
WIFI_LOG_DEBUG, /*can be set in menuconfig*/
WIFI_LOG_VERBOSE, /*can be set in menuconfig*/
} wifi_log_level_t;
/**
* @brief WiFi log submodule definition
*
*/
#define WIFI_LOG_SUBMODULE_NULL (0)
#define WIFI_LOG_SUBMODULE_CORE (1<<0)
#define WIFI_LOG_SUBMODULE_SCAN (1<<1)
#define WIFI_LOG_SUBMODULE_PM (1<<2)
#define WIFI_LOG_SUBMODULE_NVS (1<<3)
#define WIFI_LOG_SUBMODULE_TRC (1<<4)
#define WIFI_LOG_SUBMODULE_EBUF (1<<5)
#define WIFI_LOG_SUBMODULE_NET80211 (1<<6)
#define WIFI_LOG_SUBMODULE_TIMER (1<<7)
#define WIFI_LOG_SUBMODULE_ESPNOW (1<<8)
#define WIFI_LOG_SUBMODULE_MAC (1<<9)
#define WIFI_LOG_SUBMODULE_WPA (1<<10)
#define WIFI_LOG_SUBMODULE_WPS (1<<11)
/**
* @brief Set WIFI received TCP/IP data cache ram type
*
@ -106,6 +136,41 @@ typedef esp_err_t (*wifi_rxcb_t)(void *buffer, uint16_t len, void *eb);
*/
esp_err_t esp_wifi_internal_reg_rxcb(wifi_interface_t ifx, wifi_rxcb_t fn);
/**
* @brief Set current WiFi log level
*
* @param level Log level.
*
* @return
* - ESP_OK: succeed
* - ESP_FAIL: level is invalid
*/
esp_err_t esp_wifi_internal_set_log_level(wifi_log_level_t level);
/**
* @brief Set current log module and submodule
*
* @param module Log module
* @param submodule Log submodule
*
* @return
* - ESP_OK: succeed
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init
* - ESP_ERR_WIFI_ARG: invalid argument
*/
esp_err_t esp_wifi_internal_set_log_mod(uint32_t submodule);
/**
* @brief Get current WiFi log info
*
* @param log_level the return log level.
* @param log_mod the return log module and submodule
*
* @return
* - ESP_OK: succeed
*/
esp_err_t esp_wifi_internal_get_log(wifi_log_level_t *log_level, uint32_t *log_mod);
#ifdef __cplusplus
}
#endif

View File

@ -106,7 +106,11 @@ SECTIONS
*(.init)
*(.iram1 .iram1.*)
*libspi_flash.a:spi_flash_raw.o(.literal .text .literal.* .text.*)
#ifdef CONFIG_ESP8266_WIFI_DEBUG_LOG_ENABLE
*libpp_dbg.a:(.literal .text .literal.* .text.*)
#else
*libpp.a:(.literal .text .literal.* .text.*)
#endif
*libphy.a:(.literal .text .literal.* .text.*)
*(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*(.fini.literal)
@ -122,8 +126,12 @@ SECTIONS
#endif
#ifdef CONFIG_ESP8266_CORE_GLOBAL_DATA_LINK_IRAM
#ifdef CONFIG_ESP8266_WIFI_DEBUG_LOG_ENABLE
*libcore_dbg.a:(.bss .data .bss.* .data.* COMMON)
#else
*libcore.a:(.bss .data .bss.* .data.* COMMON)
#endif
#endif
#ifdef CONFIG_FREERTOS_GLOBAL_DATA_LINK_IRAM
*libfreertos.a:tasks.o(.bss .data .bss.* .data.* COMMON)
@ -157,7 +165,11 @@ SECTIONS
.rodata : ALIGN(4)
{
_rodata_start = ABSOLUTE(.);
#ifdef CONFIG_ESP8266_WIFI_DEBUG_LOG_ENABLE
*libpp_dbg.a:(.rodata.* .rodata)
#else
*libpp.a:(.rodata.* .rodata)
#endif
*liblog.a:(.rodata.* .rodata)
*(.gnu.linkonce.r.*)
*(.rodata1)

View File

@ -23,6 +23,68 @@ const size_t _g_esp_wifi_ppt_task_stk_size = CONFIG_WIFI_PPT_TASKSTACK_SIZE;
esp_err_t esp_wifi_init_internal(const wifi_init_config_t *config);
static void esp_wifi_set_debug_log()
{
/* set WiFi log level and module */
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_ENABLE
uint32_t wifi_log_level = WIFI_LOG_ERROR;
uint32_t wifi_log_submodule = WIFI_LOG_SUBMODULE_NULL;
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_WARNING
wifi_log_level = WIFI_LOG_WARNING;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_INFO
wifi_log_level = WIFI_LOG_INFO;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_DEBUG
wifi_log_level = WIFI_LOG_DEBUG;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_VERBOSE
wifi_log_level = WIFI_LOG_VERBOSE;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_CORE
wifi_log_submodule |= WIFI_LOG_SUBMODULE_CORE;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_SCAN
wifi_log_submodule |= WIFI_LOG_SUBMODULE_SCAN;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_PM
wifi_log_submodule |= WIFI_LOG_SUBMODULE_PM;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_NVS
wifi_log_submodule |= WIFI_LOG_SUBMODULE_NVS;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_TRC
wifi_log_submodule |= WIFI_LOG_SUBMODULE_TRC;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_EBUF
wifi_log_submodule |= WIFI_LOG_SUBMODULE_EBUF;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_NET80211
wifi_log_submodule |= WIFI_LOG_SUBMODULE_NET80211;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_TIMER
wifi_log_submodule |= WIFI_LOG_SUBMODULE_TIMER;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_ESPNOW
wifi_log_submodule |= WIFI_LOG_SUBMODULE_ESPNOW;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_MAC
wifi_log_submodule |= WIFI_LOG_SUBMODULE_MAC;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_WPA
wifi_log_submodule |= WIFI_LOG_SUBMODULE_WPA;
#endif
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_SUBMODULE_WPS
wifi_log_submodule |= WIFI_LOG_SUBMODULE_WPS;
#endif
esp_wifi_internal_set_log_level(wifi_log_level);
esp_wifi_internal_set_log_mod(wifi_log_submodule);
#else
esp_wifi_internal_set_log_level(WIFI_LOG_ERROR);
esp_wifi_internal_set_log_mod(WIFI_LOG_SUBMODULE_NULL);
#endif /* CONFIG_ESP8266_WIFI_DEBUG_LOG_ENABLE*/
}
/**
* @brief Init WiFi
* Alloc resource for WiFi driver, such as WiFi control structure, RX/TX buffer,
@ -45,7 +107,11 @@ esp_err_t esp_wifi_init_internal(const wifi_init_config_t *config);
esp_err_t esp_wifi_init(const wifi_init_config_t *config)
{
esp_event_set_default_wifi_handlers();
return esp_wifi_init_internal(config);
esp_err_t result = esp_wifi_init_internal(config);
if (result == ESP_OK) {
esp_wifi_set_debug_log();
}
return result;
}
void esp_deep_sleep_set_rf_option(uint8_t option)

View File

@ -58,7 +58,11 @@
#define configCPU_CLOCK_HZ ( ( unsigned long ) 80000000 )
#define configTICK_RATE_HZ ( ( portTickType ) CONFIG_FREERTOS_HZ )
#define configMAX_PRIORITIES 15
#if CONFIG_ESP8266_WIFI_DEBUG_LOG_ENABLE
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 2048 )
#else
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 768 )
#endif
//#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 16 )

View File

@ -78,6 +78,20 @@ void esp_log_level_set(const char* tag, esp_log_level_t level);
*/
putchar_like_t esp_log_set_putchar(putchar_like_t func);
/**
* @brief Function which returns timestamp to be used in log output
*
* This function is used in expansion of ESP_LOGx macros.
* In the 2nd stage bootloader, and at early application startup stage
* this function uses CPU cycle counter as time source. Later when
* FreeRTOS scheduler start running, it switches to FreeRTOS tick count.
*
* For now, we ignore millisecond counter overflow.
*
* @return timestamp, in milliseconds
*/
uint32_t esp_log_timestamp(void);
/**
* @brief Function which returns timestamp to be used in log output
*

View File

@ -190,7 +190,7 @@ static int esp_log_write_str(const char *s)
return ret;
}
static uint32_t esp_log_timestamp()
uint32_t esp_log_timestamp()
{
static uint32_t base = 0;