return old handler from esp_log_set_vprintf()

Merges #1286
This commit is contained in:
Andrew Dikarev 2017-11-18 16:27:06 +02:00 committed by Ivan Grokhotkov
parent cf768380b1
commit 08ba79cc2b
2 changed files with 16 additions and 4 deletions

View File

@ -55,11 +55,14 @@ void esp_log_level_set(const char* tag, esp_log_level_t level);
* @brief Set function used to output log entries * @brief Set function used to output log entries
* *
* By default, log output goes to UART0. This function can be used to redirect log * By default, log output goes to UART0. This function can be used to redirect log
* output to some other destination, such as file or network. * output to some other destination, such as file or network. Returns the original
* log handler, which may be necessary to return output to the previous destination.
* *
* @param func Function used for output. Must have same signature as vprintf. * @param func new Function used for output. Must have same signature as vprintf.
*
* @return func old Function used for output.
*/ */
void esp_log_set_vprintf(vprintf_like_t func); vprintf_like_t esp_log_set_vprintf(vprintf_like_t func);
/** /**
* @brief Function which returns timestamp to be used in log output * @brief Function which returns timestamp to be used in log output

View File

@ -106,9 +106,18 @@ static inline void heap_swap(int i, int j);
static inline bool should_output(esp_log_level_t level_for_message, esp_log_level_t level_for_tag); static inline bool should_output(esp_log_level_t level_for_message, esp_log_level_t level_for_tag);
static inline void clear_log_level_list(); static inline void clear_log_level_list();
void esp_log_set_vprintf(vprintf_like_t func) vprintf_like_t esp_log_set_vprintf(vprintf_like_t func)
{ {
if (!s_log_mutex) {
s_log_mutex = xSemaphoreCreateMutex();
}
xSemaphoreTake(s_log_mutex, portMAX_DELAY);
vprintf_like_t orig_func = s_log_print_func;
s_log_print_func = func; s_log_print_func = func;
xSemaphoreGive(s_log_mutex);
return orig_func;
} }
void esp_log_level_set(const char* tag, esp_log_level_t level) void esp_log_level_set(const char* tag, esp_log_level_t level)