Implement shift+<key> support, and ...
[lunaix-os.git] / lunaix-os / kernel / k_main.c
index fc57669154f79a48bfd5f004fa98326bca85ecfb..fe5645f9f0427a86331c20d5ab1f0cde783879d3 100644 (file)
@@ -1,27 +1,34 @@
 #include <hal/cpu.h>
-#include <hal/rtc.h>
-#include <libc/stdio.h>
+#include <lunaix/syslog.h>
 #include <lunaix/mm/kalloc.h>
 #include <lunaix/mm/vmm.h>
 #include <lunaix/spike.h>
+#include <lunaix/clock.h>
+#include <lunaix/timer.h>
+#include <lunaix/keyboard.h>
+#include <lunaix/tty/tty.h>
 #include <stdint.h>
 
 extern uint8_t __kernel_start;
 
+LOG_MODULE("LX")
+
+void 
+test_timer(void* payload);
+
 void
 _kernel_main()
 {
     char buf[64];
 
-    printf("Hello higher half kernel world!\nWe are now running in virtual "
+    kprintf(KINFO "Hello higher half kernel world!\nWe are now running in virtual "
            "address space!\n\n");
 
     cpu_get_brand(buf);
-    printf("CPU: %s\n\n", buf);
+    kprintf("CPU: %s\n\n", buf);
 
     void* k_start = vmm_v2p(&__kernel_start);
-    printf(
-      "The kernel's base address mapping: %p->%p\n", &__kernel_start, k_start);
+    kprintf(KINFO "The kernel's base address mapping: %p->%p\n", &__kernel_start, k_start);
 
     // test malloc & free
 
@@ -40,17 +47,35 @@ _kernel_main()
     big_[1] = 23;
     big_[2] = 3;
 
-    printf("%u, %u, %u\n", big_[0], big_[1], big_[2]);
+    kprintf(KINFO "%u, %u, %u\n", big_[0], big_[1], big_[2]);
 
     // good free
     lxfree(arr);
     lxfree(big_);
 
-    rtc_datetime datetime;
+    // timer_run_second(1, test_timer, NULL, TIMER_MODE_PERIODIC);
+
+    while (1)
+    {
+        struct kdb_keyinfo_pkt* keyevent = kbd_try_read_one();
+        if (!keyevent) {
+            continue;
+        }
+        if ((keyevent->state & KBD_KEY_FPRESSED) && (keyevent->keycode & 0xff00) <= KEYPAD) {
+            tty_put_char((char)(keyevent->keycode & 0x00ff));
+        }
+        lxfree(keyevent);
+    }
+
+    spin();
+}
+
+static datetime_t datetime;
 
-    rtc_get_datetime(&datetime);
+void test_timer(void* payload) {
+    clock_walltime(&datetime);
 
-    printf("%u/%u/%u %u:%u:%u",
+    kprintf(KWARN "%u/%02u/%02u %02u:%02u:%02u\r",
            datetime.year,
            datetime.month,
            datetime.day,