Добавление доски отладки

This commit is contained in:
Aren Elchinyan 2023-12-07 13:15:25 +03:00
parent 11f07cb832
commit ad38cbda6b
2 changed files with 87 additions and 3 deletions

1
.gitignore vendored
View File

@ -6,6 +6,7 @@ ovmf/
iso_root/ iso_root/
output/ output/
sdk/ sdk/
_sdk/
*.so *.so
*.o *.o
*.ko *.ko

83
kernel/debug.c Normal file
View File

@ -0,0 +1,83 @@
/**
* debug.c
* Функции отладочных сообщений
*
* Функционал управления выводом отладочных сообщений
*
*/
#include <fb.h>
#include <mem.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <tool.h>
typedef struct msg {
uint64_t level;
char *message;
struct msg *next;
} msg_t;
msg_t *log = NULL;
msg_t *last_message = NULL;
uint32_t level_colors[] = {
0x0000FF00, // Зеленый
0x00FFFF00, // Желтый
0x00FF0000, // Красный
0x0000FFFF, // Голубой
0x000000FF, // Синий
0x00FF00FF // Пурпурный
};
// Функция для добавления сообщения в лог
void add_message(uint64_t level, char *message) {
msg_t *new_msg = (msg_t *)mem_alloc(sizeof(msg_t));
new_msg->level = level;
new_msg->message = mem_alloc(tool_strlen(message) + 1);
tool_strcpy(new_msg->message, message);
new_msg->next = NULL;
if (log == NULL) {
log = new_msg;
} else {
msg_t *current = log;
while (current->next != NULL) { current = current->next; }
current->next = new_msg;
}
last_message = new_msg;
}
// Функция для добавления символа в сообщение
void add_char_to_message(char c, msg_t *msg) {
uint64_t length = tool_strlen(msg->message);
msg->message = mem_realloc(msg->message, length + 1);
msg->message[length] = c;
msg->message[length + 1] = '\0';
}
void debug_putc(char c) {
add_char_to_message(c, last_message);
}
void debug_printf(uint8_t level, char *info, char *format, ...) {
va_list args;
va_start(args, format);
add_message(level, info);
tool_format(debug_putc, format, args);
va_end(args);
}
// Функция для вывода всего лога
void print_log( ) {
msg_t *current = log;
while (current != NULL) {
fb_set_text_color(level_colors[current->level]);
fb_printf("Message: %s\n", current->message);
fb_set_text_color(0x00D000);
current = current->next;
}
}