diff options
| author | Michal Idziorek <m.i@gmx.at> | 2015-05-17 20:40:29 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2015-05-17 20:40:29 +0200 |
| commit | 042e25e19b5fc0cec1d47440c26246c886cf39f6 (patch) | |
| tree | 9f3e49ccae2ec8a48fdb34d264da3adef06f64bf /xxx/lib/logger/log.c | |
| parent | d98828d08eb1f6c1394f38a1df69c73fef0cfefa (diff) | |
started big cleanup!
Diffstat (limited to 'xxx/lib/logger/log.c')
| -rw-r--r-- | xxx/lib/logger/log.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/xxx/lib/logger/log.c b/xxx/lib/logger/log.c new file mode 100644 index 0000000..430f982 --- /dev/null +++ b/xxx/lib/logger/log.c @@ -0,0 +1,94 @@ +#define FOOLOS_MODULE_NAME "log" + +#include <stdarg.h> +#include <stdbool.h> + +#include "log.h" +#include "kernel/config.h" +#include "terminal/vt52.h" +#include "lib/printf/printf.h" +#include "kernel/timer.h" + + +static char buffer[LOG_BUF_SIZE]; +static int first=0; +static int last=0; +static bool init=true;// + +static void init_log() +{ +} + +void log(char *module_name, int log_level, char *format_string, ...) +{ + + #ifdef FOOLOS_LOG_OFF + return; + #endif + + if(log_level<FOOLOS_LOG_INFO)return; + + char buf_info[256]; + char buf_log[256]; + char buf_time[20]; + + uint32_t t=timer_get_ticks(); + uint32_t s=t/25; + uint32_t ms=t*1000/25-1000*s; + + tfp_sprintf(buf_time,"[%3d.%05d]",s,ms); + + va_list va; + va_start(va,format_string); + tfp_vsprintf(buf_info,format_string,va); + va_end(va); + + tfp_sprintf(buf_log,"%s %s: %s\n",buf_time,module_name,buf_info); + + if(init)console_put_str_gray(buf_log); + + for(int i=0;buf_log[i]!=0;i++) + { + buffer[last]=buf_log[i]; + last=(last+1)%LOG_BUF_SIZE; + if(first<last)if(last-first>=LOG_BUF_SIZE)first=(first+1)%LOG_BUF_SIZE; + if(last>first)if(LOG_BUF_SIZE-last+first>=LOG_BUF_SIZE)first=(first+1)%LOG_BUF_SIZE; + } + + +} + +void panic(char *module_name, char *message) +{ + char buf_log[256]; + tfp_sprintf(buf_log,"KERNEL PANIC !! %s: %s\n",module_name,message); + //console_put_str_red(buf_log); + + while(1) + { + asm volatile("cli"); + asm volatile("hlt"); + } + +} + +// unused shit! +/* +static void log_log() +{ + #ifdef FOOLOS_LOG_OFF + return; + #endif + + char buf_log[256]; + tfp_sprintf(buf_log,"[ 0.00000] log: buffer state: first=%d, last=%d, buf_size=%d\n",first,last,LOG_BUF_SIZE); + console_put_str_gray(buf_log); + for(int i=first;i!=last;i++) + { + console_put_char_gray(buffer[i]); + + } + + init=true; +} +*/ |
