make log a bit verbose for some useful information
[lunaix-os.git] / lunaix-os / kernel / kprint / kprintf.c
index 4c1ee404a90b8a9355b7579b902ecbb0c2e3f5b4..363abc687b5d770113e74fd98f848e529dbe8a7c 100644 (file)
@@ -5,6 +5,7 @@
 #include <lunaix/syslog.h>
 #include <lunaix/device.h>
 #include <lunaix/owloysius.h>
+#include <lunaix/ds/flipbuf.h>
 
 #include <hal/term.h>
 
 
 #include "kp_records.h"
 
-#define MAX_BUFSZ 512
 #define MAX_BUFSZ_HLF 256
 #define MAX_KPENT_NUM 1024
 
-static char tmp_buf[MAX_BUFSZ];
+static char tmp_buf[MAX_BUFSZ_HLF * 2];
+static DEFINE_FLIPBUF(fmtbuf, MAX_BUFSZ_HLF, tmp_buf);
 
 static struct kp_records kprecs = {
     .kp_ents = { .ents = { .next = &kprecs.kp_ents.ents,
@@ -40,23 +41,43 @@ shift_level(const char* str, int* level)
 }
 
 static inline void
-kprintf_put(int level, const char* buf, size_t sz)
+__put_console(const struct kp_entry* ent)
 {
-    kprec_put(&kprecs, level, buf, sz);
+    char* buf;
+    time_t s, ms;
+    size_t sz;
 
-    if (likely(sysconsole)) {
-        sysconsole->ops.write(sysconsole, buf, 0, sz);
+    if (unlikely(!sysconsole)) {
+        return;
     }
+
+    s   = ent->time / 1000;
+    ms  = ent->time % 1000;
+    buf = flipbuf_flip(&fmtbuf);
+    sz  = ksnprintf(buf, MAX_BUFSZ_HLF, 
+                    "[%04d.%03d] %s", s, ms, ent->content);
+    
+    sysconsole->ops.write(sysconsole, buf, 0, sz);
+}
+
+static inline void
+kprintf_put(int level, const char* buf, size_t sz)
+{
+    __put_console(kprec_put(&kprecs, level, buf, sz));
 }
 
 static inline void
 kprintf_ml(const char* component, int level, const char* fmt, va_list args)
 {
-    char* buf = &tmp_buf[MAX_BUFSZ_HLF];
+    char* buf;
+    size_t sz;
+
+    buf = flipbuf_top(&fmtbuf);
     ksnprintf(buf, MAX_BUFSZ_HLF, "%s: %s\n", component, fmt);
 
-    size_t sz = ksnprintfv(tmp_buf, buf, MAX_BUFSZ_HLF, args);
-    kprintf_put(level, tmp_buf, sz);
+    sz = ksnprintfv(flipbuf_flip(&fmtbuf), buf, MAX_BUFSZ_HLF, args);
+    
+    kprintf_put(level, flipbuf_top(&fmtbuf), sz);
 }
 
 void
@@ -68,6 +89,15 @@ kprintf_m(const char* component, const char* fmt, va_list args)
     kprintf_ml(component, level, fmt, args);
 }
 
+void
+kprintf_v(const char* component, const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    kprintf_m(component, fmt, args);
+    va_end(args);
+}
+
 static void
 __twimap_kprintf_read(struct twimap* map)
 {
@@ -103,7 +133,7 @@ kprintf_dump_logs() {
     struct kp_entry *pos, *n;
     llist_for_each(pos, n, kprecs.kp_ent_wp, ents)
     {
-        sysconsole->ops.write(sysconsole, pos->content, 0, pos->len);
+        __put_console(pos);
     }
 }