log.c 1.6 KB

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