forked from espressif/esp-idf
tools: Correct coding style of idf_monitor
This commit is contained in:
1
.flake8
1
.flake8
@@ -125,7 +125,6 @@ exclude =
|
|||||||
tools/esp_prov/utils/convenience.py,
|
tools/esp_prov/utils/convenience.py,
|
||||||
tools/gen_esp_err_to_name.py,
|
tools/gen_esp_err_to_name.py,
|
||||||
tools/idf.py,
|
tools/idf.py,
|
||||||
tools/idf_monitor.py,
|
|
||||||
tools/idf_size.py,
|
tools/idf_size.py,
|
||||||
tools/kconfig_new/confgen.py,
|
tools/kconfig_new/confgen.py,
|
||||||
tools/kconfig_new/confserver.py,
|
tools/kconfig_new/confserver.py,
|
||||||
|
@@ -29,8 +29,6 @@
|
|||||||
#
|
#
|
||||||
from __future__ import print_function, division
|
from __future__ import print_function, division
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
from future import standard_library
|
|
||||||
standard_library.install_aliases()
|
|
||||||
from builtins import chr
|
from builtins import chr
|
||||||
from builtins import object
|
from builtins import object
|
||||||
from builtins import bytes
|
from builtins import bytes
|
||||||
@@ -71,16 +69,20 @@ ANSI_RED = '\033[1;31m'
|
|||||||
ANSI_YELLOW = '\033[0;33m'
|
ANSI_YELLOW = '\033[0;33m'
|
||||||
ANSI_NORMAL = '\033[0m'
|
ANSI_NORMAL = '\033[0m'
|
||||||
|
|
||||||
|
|
||||||
def color_print(message, color):
|
def color_print(message, color):
|
||||||
""" Print a message to stderr with colored highlighting """
|
""" Print a message to stderr with colored highlighting """
|
||||||
sys.stderr.write("%s%s%s\n" % (color, message, ANSI_NORMAL))
|
sys.stderr.write("%s%s%s\n" % (color, message, ANSI_NORMAL))
|
||||||
|
|
||||||
|
|
||||||
def yellow_print(message):
|
def yellow_print(message):
|
||||||
color_print(message, ANSI_YELLOW)
|
color_print(message, ANSI_YELLOW)
|
||||||
|
|
||||||
|
|
||||||
def red_print(message):
|
def red_print(message):
|
||||||
color_print(message, ANSI_RED)
|
color_print(message, ANSI_RED)
|
||||||
|
|
||||||
|
|
||||||
__version__ = "1.1"
|
__version__ = "1.1"
|
||||||
|
|
||||||
# Tags for tuples in queues
|
# Tags for tuples in queues
|
||||||
@@ -95,6 +97,7 @@ DEFAULT_TOOLCHAIN_PREFIX = "xtensa-esp32-elf-"
|
|||||||
|
|
||||||
DEFAULT_PRINT_FILTER = ""
|
DEFAULT_PRINT_FILTER = ""
|
||||||
|
|
||||||
|
|
||||||
class StoppableThread(object):
|
class StoppableThread(object):
|
||||||
"""
|
"""
|
||||||
Provide a Thread-like class which can be 'cancelled' via a subclass-provided
|
Provide a Thread-like class which can be 'cancelled' via a subclass-provided
|
||||||
@@ -138,6 +141,7 @@ class StoppableThread(object):
|
|||||||
self._cancel()
|
self._cancel()
|
||||||
old_thread.join()
|
old_thread.join()
|
||||||
|
|
||||||
|
|
||||||
class ConsoleReader(StoppableThread):
|
class ConsoleReader(StoppableThread):
|
||||||
""" Read input keys from the console and push them to the queue,
|
""" Read input keys from the console and push them to the queue,
|
||||||
until stopped.
|
until stopped.
|
||||||
@@ -192,9 +196,11 @@ class ConsoleReader(StoppableThread):
|
|||||||
# TODO: introduce some workaround to make it work there.
|
# TODO: introduce some workaround to make it work there.
|
||||||
#
|
#
|
||||||
# Note: This would throw exception in testing mode when the stdin is connected to PTY.
|
# Note: This would throw exception in testing mode when the stdin is connected to PTY.
|
||||||
import fcntl, termios
|
import fcntl
|
||||||
|
import termios
|
||||||
fcntl.ioctl(self.console.fd, termios.TIOCSTI, b'\0')
|
fcntl.ioctl(self.console.fd, termios.TIOCSTI, b'\0')
|
||||||
|
|
||||||
|
|
||||||
class SerialReader(StoppableThread):
|
class SerialReader(StoppableThread):
|
||||||
""" Read serial data from the serial port and push to the
|
""" Read serial data from the serial port and push to the
|
||||||
event queue, until stopped.
|
event queue, until stopped.
|
||||||
@@ -227,9 +233,10 @@ class SerialReader(StoppableThread):
|
|||||||
if hasattr(self.serial, 'cancel_read'):
|
if hasattr(self.serial, 'cancel_read'):
|
||||||
try:
|
try:
|
||||||
self.serial.cancel_read()
|
self.serial.cancel_read()
|
||||||
except:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class LineMatcher(object):
|
class LineMatcher(object):
|
||||||
"""
|
"""
|
||||||
Assembles a dictionary of filtering rules based on the --print_filter
|
Assembles a dictionary of filtering rules based on the --print_filter
|
||||||
@@ -267,6 +274,7 @@ class LineMatcher(object):
|
|||||||
else:
|
else:
|
||||||
raise ValueError('Missing ":" in filter ' + f)
|
raise ValueError('Missing ":" in filter ' + f)
|
||||||
self._dict[s[0]] = lev
|
self._dict[s[0]] = lev
|
||||||
|
|
||||||
def match(self, line):
|
def match(self, line):
|
||||||
try:
|
try:
|
||||||
m = self._re.search(line)
|
m = self._re.search(line)
|
||||||
@@ -282,12 +290,14 @@ class LineMatcher(object):
|
|||||||
# We need something more than "*.N" for printing.
|
# We need something more than "*.N" for printing.
|
||||||
return self._dict.get("*", self.LEVEL_N) > self.LEVEL_N
|
return self._dict.get("*", self.LEVEL_N) > self.LEVEL_N
|
||||||
|
|
||||||
|
|
||||||
class SerialStopException(Exception):
|
class SerialStopException(Exception):
|
||||||
"""
|
"""
|
||||||
This exception is used for stopping the IDF monitor in testing mode.
|
This exception is used for stopping the IDF monitor in testing mode.
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Monitor(object):
|
class Monitor(object):
|
||||||
"""
|
"""
|
||||||
Monitor application main class.
|
Monitor application main class.
|
||||||
@@ -381,7 +391,7 @@ class Monitor(object):
|
|||||||
# Cancelling _invoke_processing_last_line_timer is not
|
# Cancelling _invoke_processing_last_line_timer is not
|
||||||
# important here because receiving empty data doesn't matter.
|
# important here because receiving empty data doesn't matter.
|
||||||
self._invoke_processing_last_line_timer = None
|
self._invoke_processing_last_line_timer = None
|
||||||
except:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
sys.stderr.write(ANSI_NORMAL + "\n")
|
sys.stderr.write(ANSI_NORMAL + "\n")
|
||||||
|
|
||||||
@@ -427,7 +437,7 @@ class Monitor(object):
|
|||||||
# to make a decision.
|
# to make a decision.
|
||||||
if self._last_line_part != b"":
|
if self._last_line_part != b"":
|
||||||
if self._force_line_print or (finalize_line and self._line_matcher.match(self._last_line_part.decode(errors="ignore"))):
|
if self._force_line_print or (finalize_line and self._line_matcher.match(self._last_line_part.decode(errors="ignore"))):
|
||||||
self._force_line_print = True;
|
self._force_line_print = True
|
||||||
if self._output_enabled:
|
if self._output_enabled:
|
||||||
self.console.write_bytes(self._last_line_part)
|
self.console.write_bytes(self._last_line_part)
|
||||||
self.handle_possible_pc_address_in_line(self._last_line_part)
|
self.handle_possible_pc_address_in_line(self._last_line_part)
|
||||||
@@ -559,7 +569,7 @@ class Monitor(object):
|
|||||||
["%saddr2line" % self.toolchain_prefix,
|
["%saddr2line" % self.toolchain_prefix,
|
||||||
"-pfiaC", "-e", self.elf_file, pc_addr],
|
"-pfiaC", "-e", self.elf_file, pc_addr],
|
||||||
cwd=".")
|
cwd=".")
|
||||||
if not b"?? ??:0" in translation:
|
if b"?? ??:0" not in translation:
|
||||||
yellow_print(translation.decode())
|
yellow_print(translation.decode())
|
||||||
|
|
||||||
def check_gdbstub_trigger(self, line):
|
def check_gdbstub_trigger(self, line):
|
||||||
@@ -577,7 +587,6 @@ class Monitor(object):
|
|||||||
else:
|
else:
|
||||||
red_print("Malformed gdb message... calculated checksum %02x received %02x" % (chsum, calc_chsum))
|
red_print("Malformed gdb message... calculated checksum %02x received %02x" % (chsum, calc_chsum))
|
||||||
|
|
||||||
|
|
||||||
def run_gdb(self):
|
def run_gdb(self):
|
||||||
with self: # disable console control
|
with self: # disable console control
|
||||||
sys.stderr.write(ANSI_NORMAL)
|
sys.stderr.write(ANSI_NORMAL)
|
||||||
@@ -594,12 +603,12 @@ class Monitor(object):
|
|||||||
try:
|
try:
|
||||||
# on Linux, maybe other OSes, gdb sometimes seems to be alive even after wait() returns...
|
# on Linux, maybe other OSes, gdb sometimes seems to be alive even after wait() returns...
|
||||||
process.terminate()
|
process.terminate()
|
||||||
except:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
try:
|
try:
|
||||||
# also on Linux, maybe other OSes, gdb sometimes exits uncleanly and breaks the tty mode
|
# also on Linux, maybe other OSes, gdb sometimes exits uncleanly and breaks the tty mode
|
||||||
subprocess.call(["stty", "sane"])
|
subprocess.call(["stty", "sane"])
|
||||||
except:
|
except Exception:
|
||||||
pass # don't care if there's no stty, we tried...
|
pass # don't care if there's no stty, we tried...
|
||||||
self.prompt_next_action("gdb exited")
|
self.prompt_next_action("gdb exited")
|
||||||
|
|
||||||
@@ -610,6 +619,7 @@ class Monitor(object):
|
|||||||
self._output_enabled = not self._output_enabled
|
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))
|
yellow_print("\nToggle output display: {}, Type Ctrl-T Ctrl-Y to show/disable output again.".format(self._output_enabled))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser("idf_monitor - a serial output monitor for esp-idf")
|
parser = argparse.ArgumentParser("idf_monitor - a serial output monitor for esp-idf")
|
||||||
|
|
||||||
@@ -690,6 +700,7 @@ def main():
|
|||||||
|
|
||||||
monitor.main_loop()
|
monitor.main_loop()
|
||||||
|
|
||||||
|
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
# Windows console stuff
|
# Windows console stuff
|
||||||
|
|
||||||
@@ -745,10 +756,10 @@ if os.name == 'nt':
|
|||||||
data = bytearray(data, 'utf-8')
|
data = bytearray(data, 'utf-8')
|
||||||
for b in data:
|
for b in data:
|
||||||
b = bytes([b])
|
b = bytes([b])
|
||||||
l = len(self.matched)
|
length = len(self.matched)
|
||||||
if b == b'\033': # ESC
|
if b == b'\033': # ESC
|
||||||
self.matched = b
|
self.matched = b
|
||||||
elif (l == 1 and b == b'[') or (1 < l < 7):
|
elif (length == 1 and b == b'[') or (1 < length < 7):
|
||||||
self.matched += b
|
self.matched += b
|
||||||
if self.matched == ANSI_NORMAL.encode('latin-1'): # reset console
|
if self.matched == ANSI_NORMAL.encode('latin-1'): # reset console
|
||||||
# Flush is required only with Python3 - switching color before it is printed would mess up the console
|
# Flush is required only with Python3 - switching color before it is printed would mess up the console
|
||||||
|
Reference in New Issue
Block a user