From 08ba79cc2b7d0fbe1d3f18fc05ce320547a61898 Mon Sep 17 00:00:00 2001 From: Andrew Dikarev Date: Sat, 18 Nov 2017 16:27:06 +0200 Subject: [PATCH] return old handler from esp_log_set_vprintf() Merges #1286 --- components/log/include/esp_log.h | 9 ++++++--- components/log/log.c | 11 ++++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/components/log/include/esp_log.h b/components/log/include/esp_log.h index 085970c51..e525bca3c 100644 --- a/components/log/include/esp_log.h +++ b/components/log/include/esp_log.h @@ -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 * * 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 diff --git a/components/log/log.c b/components/log/log.c index 038e8e163..370c8b01c 100644 --- a/components/log/log.c +++ b/components/log/log.c @@ -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 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; + + xSemaphoreGive(s_log_mutex); + return orig_func; } void esp_log_level_set(const char* tag, esp_log_level_t level)