diff --git a/clks/include/clks/shell.h b/clks/include/clks/shell.h index cd445cb..533f47e 100644 --- a/clks/include/clks/shell.h +++ b/clks/include/clks/shell.h @@ -4,6 +4,7 @@ #include void clks_shell_init(void); +void clks_shell_pump_input(u32 max_chars); void clks_shell_tick(u64 tick); #endif \ No newline at end of file diff --git a/clks/kernel/keyboard.c b/clks/kernel/keyboard.c index 04f532c..132c255 100644 --- a/clks/kernel/keyboard.c +++ b/clks/kernel/keyboard.c @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -145,7 +146,9 @@ void clks_keyboard_handle_scancode(u8 scancode) { char translated = clks_keyboard_translate_scancode(code); if (translated != '\0') { - (void)clks_keyboard_queue_push(translated); + if (clks_keyboard_queue_push(translated) == CLKS_TRUE) { + clks_shell_pump_input(1U); + } } } } diff --git a/clks/kernel/kmain.c b/clks/kernel/kmain.c index 73b78ae..601343a 100644 --- a/clks/kernel/kmain.c +++ b/clks/kernel/kmain.c @@ -194,7 +194,7 @@ void clks_kernel_main(void) { clks_log(CLKS_LOG_WARN, "SCHED", "FAILED TO ADD KELFD TASK"); } - if (clks_scheduler_add_kernel_task_ex("usrd", 2U, clks_task_usrd) == CLKS_FALSE) { + if (clks_scheduler_add_kernel_task_ex("usrd", 4U, clks_task_usrd) == CLKS_FALSE) { clks_log(CLKS_LOG_WARN, "SCHED", "FAILED TO ADD USRD TASK"); } diff --git a/clks/kernel/shell.c b/clks/kernel/shell.c index ce9febd..3098a2c 100644 --- a/clks/kernel/shell.c +++ b/clks/kernel/shell.c @@ -13,7 +13,7 @@ #define CLKS_SHELL_NAME_MAX 96U #define CLKS_SHELL_PATH_MAX 192U #define CLKS_SHELL_CAT_LIMIT 512U -#define CLKS_SHELL_INPUT_BUDGET 32U +#define CLKS_SHELL_INPUT_BUDGET 128U #define CLKS_SHELL_CLEAR_LINES 56U static clks_bool clks_shell_ready = CLKS_FALSE; @@ -420,17 +420,15 @@ void clks_shell_init(void) { clks_log(CLKS_LOG_INFO, "SHELL", "INTERACTIVE LOOP ONLINE"); } -void clks_shell_tick(u64 tick) { +static void clks_shell_drain_input(u32 budget_limit) { u32 budget = 0U; char ch; - (void)tick; - - if (clks_shell_ready == CLKS_FALSE) { + if (budget_limit == 0U || clks_shell_ready == CLKS_FALSE) { return; } - while (budget < CLKS_SHELL_INPUT_BUDGET) { + while (budget < budget_limit) { if (clks_keyboard_pop_char(&ch) == CLKS_FALSE) { break; } @@ -438,4 +436,13 @@ void clks_shell_tick(u64 tick) { clks_shell_handle_char(ch); budget++; } +} + +void clks_shell_pump_input(u32 max_chars) { + clks_shell_drain_input(max_chars); +} + +void clks_shell_tick(u64 tick) { + (void)tick; + clks_shell_drain_input(CLKS_SHELL_INPUT_BUDGET); } \ No newline at end of file