]> granicus.if.org Git - esp-idf/commitdiff
feat(monitor): add new feature allowing disabling log display.
authormichael <xiaoxufeng@espressif.com>
Thu, 16 Nov 2017 06:39:57 +0000 (14:39 +0800)
committermichael <xiaoxufeng@espressif.com>
Thu, 14 Dec 2017 05:48:03 +0000 (13:48 +0800)
docs/get-started/idf-monitor.rst
tools/idf_monitor.py

index 4dac96c59e4f76d14aebfee857c3d75e8cc12995..488b96abb15fef8cf1b0b3a61185f101e2c85725 100644 (file)
@@ -89,6 +89,14 @@ Quick Reset
 The keyboard shortcut ``Ctrl-T Ctrl-R`` will reset the target board via the RTS line (if it is connected.)
 
 
+Toggle Output Display
+=====================
+
+Sometimes you may want to stop new output printed to screen, to see the log before. The keyboard shortcut ``Ctrl-T Ctrl-Y`` will
+toggle the display (discard all serial data when the display is off) so that you can stop to see the log, and revert
+again quickly without quitting the monitor.
+
+
 Simple Monitor
 ==============
 
index 49e2b74b82864f1811660ef7b88b03be903c8bce..d1de35579d5d1e63845d7917700d99cc054784e9 100755 (executable)
@@ -55,6 +55,7 @@ CTRL_F = '\x06'
 CTRL_H = '\x08'
 CTRL_R = '\x12'
 CTRL_T = '\x14'
+CTRL_Y = '\x19'
 CTRL_RBRACKET = '\x1d'  # Ctrl+]
 
 # ANSI terminal codes
@@ -256,6 +257,7 @@ class Monitor(object):
         self._pressed_menu_key = False
         self._read_line = b""
         self._gdb_buffer = b""
+        self._output_enabled = True
 
     def main_loop(self):
         self.console_reader.start()
@@ -299,7 +301,8 @@ class Monitor(object):
         # this may need to be made more efficient, as it pushes out a byte
         # at a time to the console
         for b in data:
-            self.console.write_bytes(b)
+            if self._output_enabled:
+                self.console.write_bytes(b)
             if b == b'\n': # end of line
                 self.handle_serial_input_line(self._read_line.strip())
                 self._read_line = b""
@@ -320,10 +323,13 @@ class Monitor(object):
             self.serial.setRTS(True)
             time.sleep(0.2)
             self.serial.setRTS(False)
+            self.output_enable(True)
         elif c == CTRL_F:  # Recompile & upload
             self.run_make("flash")
         elif c == CTRL_A:  # Recompile & upload app only
             self.run_make("app-flash")
+        elif c == CTRL_Y:  # Toggle output display
+            self.output_toggle()
         else:
             red_print('--- unknown menu character {} --'.format(key_description(c)))
 
@@ -340,13 +346,14 @@ class Monitor(object):
 ---    {reset:7} Reset target board via RTS line
 ---    {make:7} Run 'make flash' to build & flash
 ---    {appmake:7} Run 'make app-flash to build & flash app
+---    {output:7} Toggle output display
 """.format(version=__version__,
            exit=key_description(self.exit_key),
            menu=key_description(self.menu_key),
            reset=key_description(CTRL_R),
            make=key_description(CTRL_F),
            appmake=key_description(CTRL_A),
-
+           output=key_description(CTRL_Y),
            )
 
     def __enter__(self):
@@ -393,6 +400,8 @@ class Monitor(object):
                 p.wait()
             if p.returncode != 0:
                 self.prompt_next_action("Build failed")
+            else:
+                self.output_enable(True)
 
     def lookup_pc_address(self, pc_addr):
         translation = subprocess.check_output(
@@ -430,6 +439,13 @@ class Monitor(object):
                 pass  # happens on Windows, maybe other OSes
             self.prompt_next_action("gdb exited")
 
+    def output_enable(self, enable):
+        self._output_enabled = enable
+
+    def output_toggle(self):
+        self._output_enabled = not self._output_enabled
+        yellow_print("\nToggle output display: {}, Type Ctrl-T Ctrl-Y to show/disable output again.".format(self._output_enabled))
+
 def main():
     parser = argparse.ArgumentParser("idf_monitor - a serial output monitor for esp-idf")