Usermode/libc++ - Implement map::insert and map::erase
[tpg/acess2.git] / KernelLand / Kernel / drv / serial.c
index 2792df9..df13fc7 100644 (file)
@@ -5,6 +5,7 @@
  * drv/serial.c
  * - Common serial port code
  */
+#define DEBUG  0
 #include <acess.h>
 #include <modules.h>
 #include <fs_devfs.h>
@@ -12,6 +13,8 @@
 #include <drv_pty.h>
 #include <debug_hooks.h>
 
+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);
 }
 

UCC git Repository :: git.ucc.asn.au