3#ifndef PRINTLINES_ALLOWED
4#define PRINTLINES_ALLOWED 0
7static const char *FNAME =
"kest_lv_log.c";
9#ifdef KEST_USE_FREERTOS
10#ifdef KEST_ENABLE_LV_LOGGING
11SemaphoreHandle_t kest_lv_log_mutex;
14static int kest_lv_log_wrapped = 0;
15static int kest_lv_log_pos = 0;
17char *waiting_buf = NULL;
19static const char *TAG =
"kest_lv_log.c";
21void kest_lv_log_flush_task(
void *param);
26 kest_lv_log_buf[i] = 0;
28 kest_lv_log_mutex = xSemaphoreCreateMutex();
29 assert(kest_lv_log_mutex != NULL);
32 kest_lv_log_flush_task,
43void kest_lv_log_flush()
46 int local_buf_position = 0;
48 if (xSemaphoreTake(kest_lv_log_mutex, pdMS_TO_TICKS(0)) != pdTRUE)
54 if (!kest_lv_log_pos && !kest_lv_log_wrapped)
56 xSemaphoreGive(kest_lv_log_mutex);
60 if (kest_lv_log_wrapped)
64 local_buf[local_buf_position] = kest_lv_log_buf[local_buf_position + kest_lv_log_pos + 2];
70 local_buf[local_buf_position++] = kest_lv_log_buf[i];
72 local_buf[local_buf_position++] = 0;
77 kest_lv_log_buf[i] = 0;
80 kest_lv_log_wrapped = 0;
82 xSemaphoreGive(kest_lv_log_mutex);
104 if (local_waiting_buf)
113 if (xSemaphoreTake(kest_lv_log_mutex, pdMS_TO_TICKS(50)) != pdTRUE)
121 int len = strlen(buf);
124 for (
int i = 0; i < len; i++)
126 kest_lv_log_buf[kest_lv_log_pos] = buf[i];
129 if (new_pos < kest_lv_log_pos)
130 kest_lv_log_wrapped = 1;
131 kest_lv_log_pos = new_pos;
135 kest_lv_log_buf[kest_lv_log_pos + 1] = 0;
137 xSemaphoreGive(kest_lv_log_mutex);
140void kest_lv_log_flush_task(
void *param)
142 TickType_t last_wake = xTaskGetTickCount();
147 vTaskDelayUntil(&last_wake, pdMS_TO_TICKS(100));
void kest_free(void *ptr)
char * kest_strndup(const char *str, size_t n)
#define KEST_INT_LV_LOG_BUF_LEN
void kest_lv_log_cb(lv_log_level_t level, const char *buf)