From 1ef008bfea0001d300bd382824183c82dedef0ef Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 5 Jan 2014 23:01:28 +0800 Subject: [PATCH] Kernel/Serial - Add serial debug hooks --- KernelLand/Kernel/drv/serial.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/KernelLand/Kernel/drv/serial.c b/KernelLand/Kernel/drv/serial.c index 7a4192c4..1b62b1bf 100644 --- a/KernelLand/Kernel/drv/serial.c +++ b/KernelLand/Kernel/drv/serial.c @@ -42,8 +42,8 @@ int Serial_Install(char **Arguments) tSerialPort *Serial_CreatePort(tSerial_OutFcn output, void *handle) { tSerialPort *ret = malloc( sizeof(tSerialPort) ); - // TODO: Make PTY code handle 'serial#' and auto-number - ret->PTY = PTY_Create("serial0", ret, Serial_int_PTYOutput, Serial_int_PTYSetDims, Serial_int_PTYSetArrib); + // Automatically indexed + ret->PTY = PTY_Create("serial#", ret, Serial_int_PTYOutput, Serial_int_PTYSetDims, Serial_int_PTYSetArrib); ret->OutputFcn = output; ret->OutHandle = handle; struct ptymode mode = { @@ -62,6 +62,34 @@ void Serial_ByteReceived(tSerialPort *Port, char Ch) { if( !Port ) return ; + if( Port == gSerial_KernelDebugPort ) + { + static int serial_debug_mode = 0; + // Kernel serial debug hooks. + if( serial_debug_mode ) + { + switch(Ch) + { + case 'p': + Threads_Dump(); + break; + case 'X'-'A'+1: + PTY_SendInput(Port->PTY, &Ch, 1); + break; + } + serial_debug_mode = 0; + return ; + } + else if( Ch == 'X'-'A'+1 ) + { + serial_debug_mode = 1; + return ; + } + else + { + // Fall + } + } if( Ch == '\r' ) Ch = '\n'; PTY_SendInput(Port->PTY, &Ch, 1); -- 2.20.1