X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fserial.c;h=df13fc73e11b6f3e25572fa0d49df9f459922437;hb=5b487e31cf5145372e9777e9f82a8cd661d4f1b4;hp=2792df9166b693832aeae4312a73f6401b06b223;hpb=f7ec06bee2b80613d80c314bf864c69209d09829;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/serial.c b/KernelLand/Kernel/drv/serial.c index 2792df91..df13fc73 100644 --- a/KernelLand/Kernel/drv/serial.c +++ b/KernelLand/Kernel/drv/serial.c @@ -5,6 +5,7 @@ * drv/serial.c * - Common serial port code */ +#define DEBUG 0 #include #include #include @@ -12,6 +13,8 @@ #include #include +extern void Validate_VirtualMemoryUsage(void); + // === TYPES === struct sSerialPort { @@ -63,27 +66,37 @@ tSerialPort *Serial_CreatePort(tSerial_OutFcn output, void *handle) void Serial_ByteReceived(tSerialPort *Port, char Ch) { + LOG("Port=%p,Ch=%i", Port, Ch); if( !Port ) return ; if( Port == gSerial_KernelDebugPort ) { + static tDebugHook info; static int serial_debug_mode = 0; // Kernel serial debug hooks. - if( serial_debug_mode ) + if( serial_debug_mode == 2 ) + { + // Leave latched mode + if( Ch == '.' ) + serial_debug_mode = 0; + else + DebugHook_HandleInput(&info, 1, &Ch); + return ; + } + else if( serial_debug_mode ) { - switch(Ch) - { - case 'p': - Threads_Dump(); - break; - case 'h': - Heap_Dump(); - break; - case 'X'-'A'+1: + if( Ch == 'X'-'A'+1 ) { PTY_SendInput(Port->PTY, &Ch, 1); - break; + serial_debug_mode = 0; + } + else if( Ch == '~' ) { + // Enter latched mode + serial_debug_mode = 2; + } + else { + DebugHook_HandleInput(&info, 1, &Ch); + serial_debug_mode = 0; } - serial_debug_mode = 0; return ; } else if( Ch == 'X'-'A'+1 ) @@ -98,6 +111,7 @@ void Serial_ByteReceived(tSerialPort *Port, char Ch) } if( Ch == '\r' ) Ch = '\n'; + LOG("Dispatch to PTY"); PTY_SendInput(Port->PTY, &Ch, 1); }