From: John Hodge Date: Sun, 5 Jan 2014 15:01:28 +0000 (+0800) Subject: Kernel/Serial - Add serial debug hooks X-Git-Tag: rel0.15~23 X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=1ef008bfea0001d300bd382824183c82dedef0ef;p=tpg%2Facess2.git Kernel/Serial - Add serial debug hooks --- 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);