Midnight Sun Firmware
Loading...
Searching...
No Matches
log.h
1#pragma once
2
3/************************************************************************************************
4 * @file log.h
5 *
6 * @brief Header file for the logging library used to debug all modules
7 *
8 * @date 2024-11-02
9 * @author Midnight Sun Team #24 - MSXVI
10 ************************************************************************************************/
11
12/* Standard library Headers */
13#include <stdio.h>
14#include <stdlib.h>
15
16/* Inter-component Headers */
17#include "FreeRTOS.h"
18#include "task.h"
19
20/* Intra-component Headers */
21#include "gpio.h"
22#include "ms_semaphore.h"
23#include "tasks.h"
24#include "uart.h"
25
32#define MAX_LOG_SIZE (size_t)200
33#define LOG_TIMEOUT_MS 10
34#define MS_LOG 0
35
36#ifdef STM32L433xx
37#define LOG_UART_PORT UART_PORT_1
38#define LOG_GPIO_PORT GPIO_PORT_B
39#define LOG_TX_PIN 6
40#define LOG_RX_PIN 7
41#endif
42
43#ifdef STM32L4P5xx
44#define LOG_UART_PORT UART_PORT_1
45#define LOG_GPIO_PORT GPIO_PORT_A
46#define LOG_TX_PIN 9
47#define LOG_RX_PIN 10
48#endif
49
50#ifdef STM32L496xx
51#define LOG_UART_PORT UART_PORT_3
52#define LOG_GPIO_PORT GPIO_PORT_C
53#define LOG_TX_PIN 10
54#define LOG_RX_PIN 11
55#endif
56
57#ifndef LOG_UART_PORT
58#define LOG_UART_PORT UART_PORT_1
59#endif
60
61#ifndef LOG_GPIO_PORT
62#define LOG_GPIO_PORT GPIO_PORT_B
63#endif
64
65#ifndef LOG_TX_PIN
66#define LOG_TX_PIN 6
67#endif
68
69#ifndef LOG_RX_PIN
70#define LOG_RX_PIN 7
71#endif
72
73#ifndef IN_ORDER_LOGS
74#define IN_ORDER_LOGS 1
75#endif
76
77typedef enum {
82} LogLevel;
83
84extern char g_log_buffer[MAX_LOG_SIZE];
85extern UartSettings log_uart_settings;
86
87#define LOG_DEBUG(fmt, ...) LOG(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
88#define LOG_WARN(fmt, ...) LOG(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
89#define LOG_CRITICAL(fmt, ...) LOG(LOG_LEVEL_CRITICAL, fmt, ##__VA_ARGS__)
90
91#define log_init() \
92 { uart_init(LOG_UART_PORT, &log_uart_settings); }
93
94#ifdef MS_PLATFORM_X86
95#define LOG(level, fmt, ...) printf("[%u] %s:%u: " fmt, (level), __FILE__, __LINE__, ##__VA_ARGS__)
96#elif MS_DEBUG_LOG
97#define LOG(level, fmt, ...) \
98 do { \
99 if (xTaskGetSchedulerState() == taskSCHEDULER_RUNNING) { \
100 size_t msg_size = (size_t)snprintf(g_log_buffer, MAX_LOG_SIZE, "\r[%u] %s:%u: " fmt, (level), __FILE__, __LINE__, ##__VA_ARGS__); \
101 uart_tx(LOG_UART_PORT, (uint8_t *)g_log_buffer, msg_size); \
102 } \
103 } while (0)
104#else
105#define LOG(level, fmt, ...) \
106 do { \
107 } while (0);
108#endif
109
LogLevel
Definition: log.h:77
@ LOG_LEVEL_CRITICAL
Definition: log.h:80
@ NUM_LOG_LEVELS
Definition: log.h:81
@ LOG_LEVEL_DEBUG
Definition: log.h:78
@ LOG_LEVEL_WARN
Definition: log.h:79
UART Settings.
Definition: network.h:67