luat_log_win32.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "luat_base.h"
  2. #include "luat_log.h"
  3. #include "luat_uart.h"
  4. #include "luat_malloc.h"
  5. #include "printf.h"
  6. #include <stdio.h>
  7. #include "FreeRTOS.h"
  8. #include "queue.h"
  9. #include "task.h"
  10. typedef struct log_msg {
  11. char* buff;
  12. }log_msg_t;
  13. static QueueHandle_t xQueue = NULL;
  14. static uint8_t luat_log_uart_port = 0;
  15. static uint8_t luat_log_level_cur = LUAT_LOG_DEBUG;
  16. void luat_log_thread_task(void* args) {
  17. log_msg_t msg = {0};
  18. while (1) {
  19. if (pdTRUE == xQueueReceive(xQueue, &msg, -1)) {
  20. printf("%s", msg.buff);
  21. luat_heap_free(msg.buff);
  22. };
  23. }
  24. }
  25. void luat_log_init_win32(void) {
  26. xQueue = xQueueCreate(1024, sizeof(void*));
  27. xTaskCreate( luat_log_thread_task, "log", 1024*2, NULL, 23, NULL );
  28. }
  29. void luat_log_set_uart_port(int port) {
  30. luat_log_uart_port = port;
  31. }
  32. void luat_print(const char* _str) {
  33. luat_nprint((char*)_str, strlen(_str));
  34. }
  35. void luat_nprint(char *s, size_t l) {
  36. //luat_uart_write(luat_log_uart_port, s, l);
  37. char* buff = luat_heap_malloc(l + 1);
  38. if (buff == NULL)
  39. return;
  40. memcpy(buff, s, l);
  41. buff[l] = 0x00;
  42. log_msg_t msg = {
  43. .buff = buff
  44. };
  45. xQueueSendFromISR(xQueue, &msg, NULL);
  46. }
  47. void luat_log_set_level(int level) {
  48. luat_log_level_cur = level;
  49. }
  50. int luat_log_get_level() {
  51. return luat_log_level_cur;
  52. }
  53. #define LOGLOG_SIZE 1024
  54. void luat_log_log(int level, const char* tag, const char* _fmt, ...) {
  55. if (luat_log_level_cur > level) return;
  56. char buff[LOGLOG_SIZE] = {0};
  57. char *tmp = (char *)buff;
  58. switch (level)
  59. {
  60. case LUAT_LOG_DEBUG:
  61. buff[0] = 'D';
  62. break;
  63. case LUAT_LOG_INFO:
  64. buff[0] = 'I';
  65. break;
  66. case LUAT_LOG_WARN:
  67. buff[0] = 'W';
  68. break;
  69. case LUAT_LOG_ERROR:
  70. buff[0] = 'E';
  71. break;
  72. default:
  73. buff[0] = '?';
  74. break;
  75. }
  76. buff[1] = '/';
  77. tmp += 2;
  78. memcpy(tmp, tag, strlen(tag));
  79. buff[2+strlen(tag)] = ' ';
  80. tmp += strlen(tag) + 1;
  81. va_list args;
  82. va_start(args, _fmt);
  83. size_t len = vsnprintf_(tmp, LOGLOG_SIZE, _fmt, args);
  84. va_end(args);
  85. if (len > 0) {
  86. len = strlen(buff);
  87. // if (len > LOGLOG_SIZE - 2)
  88. // len = LOGLOG_SIZE - 2;
  89. // buff[len] = '\r';
  90. // buff[len+1] = '\n';
  91. // luat_nprint(buff, len+2);
  92. if (len > LOGLOG_SIZE - 1)
  93. len = LOGLOG_SIZE - 1;
  94. buff[len] = '\n';
  95. luat_nprint(buff, len+1);
  96. }
  97. }