log.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "log.h"
  2. #include "check.h"
  3. #include "mutex.h"
  4. #include <cmsis_os2.h>
  5. #include <furi_hal.h>
  6. #define FURI_LOG_LEVEL_DEFAULT FuriLogLevelInfo
  7. typedef struct {
  8. FuriLogLevel log_level;
  9. FuriLogPuts puts;
  10. FuriLogTimestamp timetamp;
  11. osMutexId_t mutex;
  12. } FuriLogParams;
  13. static FuriLogParams furi_log;
  14. void furi_log_init() {
  15. // Set default logging parameters
  16. furi_log.log_level = FURI_LOG_LEVEL_DEFAULT;
  17. furi_log.puts = furi_hal_console_puts;
  18. furi_log.timetamp = furi_hal_get_tick;
  19. furi_log.mutex = osMutexNew(NULL);
  20. }
  21. void furi_log_print(FuriLogLevel level, const char* format, ...) {
  22. if(level <= furi_log.log_level && osMutexAcquire(furi_log.mutex, osWaitForever) == osOK) {
  23. string_t string;
  24. // Timestamp
  25. string_init_printf(string, "%lu ", furi_log.timetamp());
  26. furi_log.puts(string_get_cstr(string));
  27. string_clear(string);
  28. va_list args;
  29. va_start(args, format);
  30. string_init_vprintf(string, format, args);
  31. va_end(args);
  32. furi_log.puts(string_get_cstr(string));
  33. string_clear(string);
  34. osMutexRelease(furi_log.mutex);
  35. }
  36. }
  37. void furi_log_set_level(FuriLogLevel level) {
  38. if(level == FuriLogLevelDefault) {
  39. level = FURI_LOG_LEVEL_DEFAULT;
  40. }
  41. furi_log.log_level = level;
  42. }
  43. FuriLogLevel furi_log_get_level(void) {
  44. return furi_log.log_level;
  45. }
  46. void furi_log_set_puts(FuriLogPuts puts) {
  47. furi_assert(puts);
  48. furi_log.puts = puts;
  49. }
  50. void furi_log_set_timestamp(FuriLogTimestamp timestamp) {
  51. furi_assert(timestamp);
  52. furi_log.timetamp = timestamp;
  53. }