diff --git a/src/system/kernel/debug/debug.cpp b/src/system/kernel/debug/debug.cpp index 43fb6b561c..ea9c462882 100644 --- a/src/system/kernel/debug/debug.cpp +++ b/src/system/kernel/debug/debug.cpp @@ -82,6 +82,7 @@ static bool sSyslogOutputEnabled = true; static bool sBlueScreenEnabled = false; // must always be false on startup static bool sDebugScreenEnabled = false; +static bool sSerialInputEnabled = false; static bool sBlueScreenOutput = true; static bool sEmergencyKeysEnabled = true; static spinlock sSpinlock = B_SPINLOCK_INITIALIZER; @@ -662,6 +663,9 @@ read_line(char* buffer, int32 maxLength, char kgetc(void) { + if (sSerialInputEnabled) + return arch_debug_serial_getchar(); + // give the kernel debugger modules a chance first for (uint32 i = 0; i < kMaxDebuggerModules; i++) { if (sDebuggerModules[i] && sDebuggerModules[i]->debugger_getchar) { @@ -996,6 +1000,16 @@ cmd_dump_syslog(int argc, char** argv) } +static int +cmd_serial_input(int argc, char** argv) +{ + sSerialInputEnabled = !sSerialInputEnabled; + kprintf("Serial input is turned %s now.\n", + sSerialInputEnabled ? "on" : "off"); + return 0; +} + + static int cmd_switch_cpu(int argc, char** argv) { @@ -1209,6 +1223,9 @@ syslog_init(struct kernel_args* args) "[-n]\nDumps the whole syslog buffer, or, if -n is specified, only " "the part that hasn't been sent yet.\n", 0); + add_debugger_command("serial_input", &cmd_serial_input, + "Enable or disable serial input"); + return B_OK; err2: