Ver código fonte

feat(tty): show control char on screen

greatbridf 1 ano atrás
pai
commit
400d5597f6
1 arquivos alterados com 24 adições e 16 exclusões
  1. 24 16
      src/kernel/tty.cpp

+ 24 - 16
src/kernel/tty.cpp

@@ -79,8 +79,8 @@ void serial_tty::recvchar(char c)
     case '\r':
         buf.put('\n');
         if (echo) {
-            serial_send_data(PORT_SERIAL0, '\r');
-            serial_send_data(PORT_SERIAL0, '\n');
+            serial_send_data(id, '\r');
+            serial_send_data(id, '\n');
         }
         this->m_cv.notify();
         break;
@@ -90,10 +90,10 @@ void serial_tty::recvchar(char c)
             buf.pop();
 
             if (echo) {
-                serial_send_data(PORT_SERIAL0, 0x08);
-                serial_send_data(PORT_SERIAL0, '\x1b');
-                serial_send_data(PORT_SERIAL0, '[');
-                serial_send_data(PORT_SERIAL0, 'K');
+                serial_send_data(id, 0x08);
+                serial_send_data(id, '\x1b');
+                serial_send_data(id, '[');
+                serial_send_data(id, 'K');
             }
         }
         break;
@@ -104,15 +104,15 @@ void serial_tty::recvchar(char c)
 
             if (echo) {
                 // clear the line
-                // serial_send_data(PORT_SERIAL0, '\r');
-                // serial_send_data(PORT_SERIAL0, '\x1b');
-                // serial_send_data(PORT_SERIAL0, '[');
-                // serial_send_data(PORT_SERIAL0, '2');
-                // serial_send_data(PORT_SERIAL0, 'K');
-                serial_send_data(PORT_SERIAL0, 0x08);
-                serial_send_data(PORT_SERIAL0, '\x1b');
-                serial_send_data(PORT_SERIAL0, '[');
-                serial_send_data(PORT_SERIAL0, 'K');
+                // serial_send_data(id, '\r');
+                // serial_send_data(id, '\x1b');
+                // serial_send_data(id, '[');
+                // serial_send_data(id, '2');
+                // serial_send_data(id, 'K');
+                serial_send_data(id, 0x08);
+                serial_send_data(id, '\x1b');
+                serial_send_data(id, '[');
+                serial_send_data(id, 'K');
             }
         }
         break;
@@ -130,6 +130,14 @@ void serial_tty::recvchar(char c)
         procs->send_signal_grp(fg_pgroup, kernel::SIGSTOP);
         this->m_cv.notify();
         break;
+    // ^[: ESCAPE
+    case 0x1b:
+        buf.put('\x1b');
+        if (echo) {
+            serial_send_data(id, '^');
+            serial_send_data(id, '[');
+        }
+        break;
     // ^\: SIGQUIT
     case 0x1c:
         procs->send_signal_grp(fg_pgroup, kernel::SIGQUIT);
@@ -138,7 +146,7 @@ void serial_tty::recvchar(char c)
     default:
         buf.put(c);
         if (echo)
-            serial_send_data(PORT_SERIAL0, c);
+            serial_send_data(id, c);
         break;
     }
 }