#include <fs_devfs.h>
#include <drv_serial.h>
#include <drv_pty.h>
+#include <debug_hooks.h>
+
+extern void Validate_VirtualMemoryUsage(void);
// === TYPES ===
struct sSerialPort
{
tSerialPort *ret = malloc( sizeof(tSerialPort) );
// 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 = {
- .OutputMode = PTYBUFFMT_TEXT,
- .InputMode = PTYIMODE_CANON|PTYIMODE_ECHO
- };
struct ptydims dims = {
.W = 80, .H = 25,
.PW = 0, .PH = 0
};
- PTY_SetAttrib(ret->PTY, &dims, &mode, 0);
+ struct ptymode mode = {
+ .OutputMode = PTYBUFFMT_TEXT,
+ .InputMode = PTYIMODE_CANON|PTYIMODE_ECHO
+ };
+ ret->PTY = PTY_Create("serial#", ret,
+ Serial_int_PTYOutput, Serial_int_PTYSetDims, Serial_int_PTYSetArrib,
+ &dims, &mode
+ );
+ ret->OutputFcn = output;
+ ret->OutHandle = handle;
return ret;
}
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 )
{
- switch(Ch)
- {
- case 'p':
- Threads_Dump();
- break;
- case 'h':
- Heap_Dump();
- break;
- case 'X'-'A'+1:
+ // Leave latched mode
+ if( Ch == '.' )
+ serial_debug_mode = 0;
+ else
+ DebugHook_HandleInput(&info, 1, &Ch);
+ return ;
+ }
+ else if( serial_debug_mode )
+ {
+ 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 )