From c1924a82ba8bd63149d7ed6d2d1bce8b19d47b8e Mon Sep 17 00:00:00 2001 From: Liu Shuo Date: Fri, 6 May 2022 10:25:58 +0800 Subject: [PATCH] [feature] add skyeye state machine for checking command excute permission --- Makefile.am | 1 + utils/pycli/skyeye_command/__init__.py | 6 +- utils/pycli/skyeye_command/_base_.py | 32 +++++++- utils/pycli/skyeye_command/bp_create.py | 9 +-- utils/pycli/skyeye_command/bp_delete.py | 9 +-- utils/pycli/skyeye_command/bp_list.py | 13 +-- utils/pycli/skyeye_command/cd.py | 9 +-- .../skyeye_command/close_instr_record.py | 13 +-- utils/pycli/skyeye_command/configure_read.py | 9 +-- utils/pycli/skyeye_command/configure_write.py | 9 +-- utils/pycli/skyeye_command/define_conf.py | 14 ++-- .../skyeye_command/disable_device_work.py | 13 +-- utils/pycli/skyeye_command/disassemble.py | 11 +-- .../skyeye_command/enable_device_work.py | 13 +-- utils/pycli/skyeye_command/fj_clear.py | 9 +-- utils/pycli/skyeye_command/fj_list.py | 7 +- utils/pycli/skyeye_command/fj_set.py | 9 +-- utils/pycli/skyeye_command/get_pc.py | 13 +-- utils/pycli/skyeye_command/help.py | 9 +-- utils/pycli/skyeye_command/history.py | 8 +- utils/pycli/skyeye_command/init_ok.py | 7 +- utils/pycli/skyeye_command/list_attr.py | 15 ++-- utils/pycli/skyeye_command/list_class.py | 7 +- utils/pycli/skyeye_command/list_connect.py | 15 ++-- utils/pycli/skyeye_command/list_cpu.py | 7 +- utils/pycli/skyeye_command/list_device.py | 11 +-- utils/pycli/skyeye_command/list_iface.py | 13 +-- utils/pycli/skyeye_command/list_machines.py | 7 +- utils/pycli/skyeye_command/list_modules.py | 7 +- utils/pycli/skyeye_command/list_register.py | 11 +-- utils/pycli/skyeye_command/load_binary.py | 21 ++--- utils/pycli/skyeye_command/load_file.py | 19 ++--- utils/pycli/skyeye_command/ls.py | 9 +-- utils/pycli/skyeye_command/md.py | 11 +-- utils/pycli/skyeye_command/mm_info.py | 9 +-- .../pycli/skyeye_command/open_instr_record.py | 17 ++-- utils/pycli/skyeye_command/quit.py | 7 +- utils/pycli/skyeye_command/remote_gdb.py | 15 +--- utils/pycli/skyeye_command/reset.py | 7 +- utils/pycli/skyeye_command/reverse.py | 13 +-- utils/pycli/skyeye_command/reverse_disable.py | 7 +- utils/pycli/skyeye_command/reverse_enable.py | 7 +- utils/pycli/skyeye_command/run.py | 7 +- utils/pycli/skyeye_command/run_command.py | 9 +-- utils/pycli/skyeye_command/run_py.py | 7 +- utils/pycli/skyeye_command/run_script.py | 20 ++--- utils/pycli/skyeye_command/set_mode.py | 11 +-- utils/pycli/skyeye_command/set_pc.py | 9 +-- utils/pycli/skyeye_command/set_register.py | 11 +-- utils/pycli/skyeye_command/shell.py | 7 +- utils/pycli/skyeye_command/speed.py | 6 +- utils/pycli/skyeye_command/stepi.py | 9 +-- utils/pycli/skyeye_command/stop.py | 7 +- utils/pycli/state_machine/permission.py | 33 ++++++++ .../state_machine/skyeye_state_machine.py | 80 +++++++++++++++++++ 55 files changed, 281 insertions(+), 393 deletions(-) create mode 100644 utils/pycli/state_machine/permission.py create mode 100644 utils/pycli/state_machine/skyeye_state_machine.py diff --git a/Makefile.am b/Makefile.am index 0738c536..2fcdf333 100644 --- a/Makefile.am +++ b/Makefile.am @@ -267,6 +267,7 @@ endif cp -a $(top_srcdir)/utils/pycli/doc $(prefix)/bin/ cp -a $(top_srcdir)/utils/pycli/command $(prefix)/bin/ cp -a $(top_srcdir)/utils/pycli/skyeye_command $(prefix)/bin/ + cp -a $(top_srcdir)/utils/pycli/state_machine $(prefix)/bin/ cp -a $(top_srcdir)/utils/pycli/grpc_package $(prefix)/bin/ cp -a $(top_srcdir)/kerneldlls $(prefix)/bin cp -a $(top_srcdir)/common/include $(prefix)/include diff --git a/utils/pycli/skyeye_command/__init__.py b/utils/pycli/skyeye_command/__init__.py index a4aa37e1..a0dafd72 100644 --- a/utils/pycli/skyeye_command/__init__.py +++ b/utils/pycli/skyeye_command/__init__.py @@ -8,7 +8,7 @@ else: def load_one_command(this, name): m = import_module('.'+name, __name__) - command = m.Command() + command = m.Command(name) this._commands[name] = command def load_package(this, name): @@ -32,6 +32,10 @@ def load_all_commands(this): for name, command in this._commands.items(): setattr(this, name, command) +def get_all_command_name(): + return list(this_module._commands.keys()) + this_module = import_module(__name__) this_module._commands = {} load_all_commands(this_module) + diff --git a/utils/pycli/skyeye_command/_base_.py b/utils/pycli/skyeye_command/_base_.py index 034ba5f5..22d0ee4e 100644 --- a/utils/pycli/skyeye_command/_base_.py +++ b/utils/pycli/skyeye_command/_base_.py @@ -1,22 +1,46 @@ -from abc import abstractmethod +from abc import ABC, abstractmethod +from exception import SkyeyeAPIException, ERROR_ALL_F +from state_machine.skyeye_state_machine import state_machine -class SkyeyeCommand: +class SkyeyeCommand(ABC): export = [] + need_check_arg = True - def __init__(self): + def __init__(self, name=None): + self.name = name self.argparser = self.create_argparser() def print_help(self): self.argparser.print_help() @abstractmethod - def __call__(self, *args): + def call(self, *args, **kwargs): pass @abstractmethod def create_argparser(self): pass + def check_arg(self, arg): + try: + return self.argparser.parse_args(arg.split()) + except: + raise SkyeyeAPIException([ERROR_ALL_F, '']) + + def __call__(self, *args, **kwargs): + # CHECK + ## 2.check state + state_machine.check(self.name) + ## 1.check arg + if self.need_check_arg: + kwargs['arg_ns'] = self.check_arg(kwargs['arg']) + + try: + res = self.call(*args, **kwargs) + except Exception as e: + raise e + state_machine.transition(self.name) + # util func def convert_int(x): return int(x, 0) diff --git a/utils/pycli/skyeye_command/bp_create.py b/utils/pycli/skyeye_command/bp_create.py index 147e10f7..e9f10eab 100644 --- a/utils/pycli/skyeye_command/bp_create.py +++ b/utils/pycli/skyeye_command/bp_create.py @@ -28,11 +28,6 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - SkyEyeCreateBreakpoint(ns.cpu, ns.bp_addr) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + SkyEyeCreateBreakpoint(arg_ns.cpu, arg_ns.bp_addr) return False diff --git a/utils/pycli/skyeye_command/bp_delete.py b/utils/pycli/skyeye_command/bp_delete.py index 79794f0e..bcdf9b19 100644 --- a/utils/pycli/skyeye_command/bp_delete.py +++ b/utils/pycli/skyeye_command/bp_delete.py @@ -28,11 +28,6 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - SkyEyeDeleteBreakpointByAddr(ns.cpu, ns.bp_addr) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + SkyEyeDeleteBreakpointByAddr(arg_ns.cpu, arg_ns.bp_addr) return False diff --git a/utils/pycli/skyeye_command/bp_list.py b/utils/pycli/skyeye_command/bp_list.py index 2f65d7a7..2ce24e97 100644 --- a/utils/pycli/skyeye_command/bp_list.py +++ b/utils/pycli/skyeye_command/bp_list.py @@ -20,19 +20,14 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): temp = [] - n = SkyEyeGetBpNumbers(ns.cpu) + n = SkyEyeGetBpNumbers(arg_ns.cpu) for i in range(n): - temp.append(SkyEyeGetBreakpointAddrById(ns.cpu, i)) + temp.append(SkyEyeGetBreakpointAddrById(arg_ns.cpu, i)) print("%-25s%-25s" % ("CPU","Address(HEX)")) for i in temp: - print("%-25s0x%-25x" % (ns.cpu, i)) + print("%-25s0x%-25x" % (arg_ns.cpu, i)) return False diff --git a/utils/pycli/skyeye_command/cd.py b/utils/pycli/skyeye_command/cd.py index 50498c74..a1f0e42c 100644 --- a/utils/pycli/skyeye_command/cd.py +++ b/utils/pycli/skyeye_command/cd.py @@ -19,11 +19,6 @@ class Command(SkyeyeCommand): ) return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - os.chdir(ns.path) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + os.chdir(arg_ns.path) return False diff --git a/utils/pycli/skyeye_command/close_instr_record.py b/utils/pycli/skyeye_command/close_instr_record.py index 9e70cf6f..1e86cf91 100644 --- a/utils/pycli/skyeye_command/close_instr_record.py +++ b/utils/pycli/skyeye_command/close_instr_record.py @@ -24,22 +24,17 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - if ns.cpu not in config.get_cpu_list(): - raise SkyeyeAPIException(['0x401f0004', ns.cpu]) + if arg_ns.cpu not in config.get_cpu_list(): + raise SkyeyeAPIException(['0x401f0004', arg_ns.cpu]) try: - ret = SkyEyeCloseInstrRecord(ns.cpu) + ret = SkyEyeCloseInstrRecord(arg_ns.cpu) except Exception as e: raise SkyeyeAPIException(['0x401f0000', e]) if ret == 0: diff --git a/utils/pycli/skyeye_command/configure_read.py b/utils/pycli/skyeye_command/configure_read.py index b65fb695..4dde7d99 100644 --- a/utils/pycli/skyeye_command/configure_read.py +++ b/utils/pycli/skyeye_command/configure_read.py @@ -25,12 +25,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' @@ -38,7 +33,7 @@ class Command(SkyeyeCommand): t_cwd = os.getcwd() try: - full_dir = tools.cmd_get_chp_dir(ns.snapshot) + full_dir = tools.cmd_get_chp_dir(arg_ns.snapshot) except IOError as e: raise SkyeyeAPIException(['0x40110000', e.message]) diff --git a/utils/pycli/skyeye_command/configure_write.py b/utils/pycli/skyeye_command/configure_write.py index 5632e208..093eb82d 100644 --- a/utils/pycli/skyeye_command/configure_write.py +++ b/utils/pycli/skyeye_command/configure_write.py @@ -25,19 +25,14 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) mach_list = config.get_mach_list() - cmd_dir = ns.snapshot + cmd_dir = arg_ns.snapshot json_file = config.get_current_fp() skyeye_script = GetGlobalScript() diff --git a/utils/pycli/skyeye_command/define_conf.py b/utils/pycli/skyeye_command/define_conf.py index 89440602..54f9ea38 100644 --- a/utils/pycli/skyeye_command/define_conf.py +++ b/utils/pycli/skyeye_command/define_conf.py @@ -21,17 +21,12 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): if script: script_dir = os.path.dirname(script) - path = os.path.join(script_dir, ns.path) + path = os.path.join(script_dir, arg_ns.path) else: - path = ns.path + path = arg_ns.path if not os.path.exists(path): raise SkyeyeAPIException(['0x401c0002', path]) @@ -43,4 +38,7 @@ class Command(SkyeyeCommand): raise SkyeyeAPIException([ERROR_ALL_F, 'Config can\'t instance.']) SetGlobalConfig(Config) + if cli: + cli.open_conf_flag = True + return False diff --git a/utils/pycli/skyeye_command/disable_device_work.py b/utils/pycli/skyeye_command/disable_device_work.py index 845224a0..eeb40983 100644 --- a/utils/pycli/skyeye_command/disable_device_work.py +++ b/utils/pycli/skyeye_command/disable_device_work.py @@ -23,21 +23,16 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - if ns.device not in config.get_device_list(): - raise SkyeyeAPIException(['0x40050004', ns.device]) + if arg_ns.device not in config.get_device_list(): + raise SkyeyeAPIException(['0x40050004', arg_ns.device]) try: - SkyEyeDisableDeviceWork(ns.device) + SkyEyeDisableDeviceWork(arg_ns.device) except Exception as e: raise SkyeyeAPIException(['0x40050000', e]) diff --git a/utils/pycli/skyeye_command/disassemble.py b/utils/pycli/skyeye_command/disassemble.py index bb6ffd1f..8ada4ab3 100644 --- a/utils/pycli/skyeye_command/disassemble.py +++ b/utils/pycli/skyeye_command/disassemble.py @@ -30,19 +30,14 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - disas_str =SkyEyeDisassemble(ns.cpu, ns.addr) + disas_str =SkyEyeDisassemble(arg_ns.cpu, arg_ns.addr) print ("%-20s%-20s" % ("Addr(HEX)", "Value")) - print ("%-20x%-20s" % (ns.addr, disas_str)) + print ("%-20x%-20s" % (arg_ns.addr, disas_str)) return False diff --git a/utils/pycli/skyeye_command/enable_device_work.py b/utils/pycli/skyeye_command/enable_device_work.py index 385c27f1..599a8e16 100644 --- a/utils/pycli/skyeye_command/enable_device_work.py +++ b/utils/pycli/skyeye_command/enable_device_work.py @@ -23,22 +23,17 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - if ns.device not in config.get_device_list(): - raise SkyeyeAPIException(['0x40080004', ns.device]) + if arg_ns.device not in config.get_device_list(): + raise SkyeyeAPIException(['0x40080004', arg_ns.device]) try: - SkyEyeEnableDeviceWork(ns.device) + SkyEyeEnableDeviceWork(arg_ns.device) except Exception as e: raise SkyeyeAPIException(['0x40080000', e]) diff --git a/utils/pycli/skyeye_command/fj_clear.py b/utils/pycli/skyeye_command/fj_clear.py index a6873de8..ebd4a9f5 100644 --- a/utils/pycli/skyeye_command/fj_clear.py +++ b/utils/pycli/skyeye_command/fj_clear.py @@ -51,13 +51,8 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - ret = sfi.skyeye_clear_fj(ns.machine, ns.device, ns.device_addr, ns.bit_index, ns.mode) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + ret = sfi.skyeye_clear_fj(arg_ns.machine, arg_ns.device, arg_ns.device_addr, arg_ns.bit_index, arg_ns.mode) if not ret: msg = 'Failure deletion failed.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) diff --git a/utils/pycli/skyeye_command/fj_list.py b/utils/pycli/skyeye_command/fj_list.py index 55ebdb93..3336cfbe 100644 --- a/utils/pycli/skyeye_command/fj_list.py +++ b/utils/pycli/skyeye_command/fj_list.py @@ -17,12 +17,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): ret = sfi.skyeye_get_fj() if ret is False: msg = 'Call sfi.skyeye_get_fj() Failed' diff --git a/utils/pycli/skyeye_command/fj_set.py b/utils/pycli/skyeye_command/fj_set.py index 8e3b53e5..c83b9faa 100644 --- a/utils/pycli/skyeye_command/fj_set.py +++ b/utils/pycli/skyeye_command/fj_set.py @@ -51,13 +51,8 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - ret = sfi.skyeye_set_fj(ns.machine, ns.device, ns.device_addr, ns.bit_index, ns.mode) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + ret = sfi.skyeye_set_fj(arg_ns.machine, arg_ns.device, arg_ns.device_addr, arg_ns.bit_index, arg_ns.mode) if not ret: msg = 'Injection failure failed' raise SkyeyeAPIException([ERROR_ALL_F, msg]) diff --git a/utils/pycli/skyeye_command/get_pc.py b/utils/pycli/skyeye_command/get_pc.py index 2f8da6ba..34fe9ff3 100644 --- a/utils/pycli/skyeye_command/get_pc.py +++ b/utils/pycli/skyeye_command/get_pc.py @@ -24,21 +24,16 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - if ns.cpu not in config.get_cpu_list(): - raise SkyeyeAPIException(['0x40200004', ns.cpu]) + if arg_ns.cpu not in config.get_cpu_list(): + raise SkyeyeAPIException(['0x40200004', arg_ns.cpu]) try: - pc = SkyEyeGetPC(ns.cpu) + pc = SkyEyeGetPC(arg_ns.cpu) print("Current PC: 0x%x" % pc) except Exception as e: raise SkyeyeAPIException(['0x40200000', e]) diff --git a/utils/pycli/skyeye_command/help.py b/utils/pycli/skyeye_command/help.py index e21c6a47..359d2786 100644 --- a/utils/pycli/skyeye_command/help.py +++ b/utils/pycli/skyeye_command/help.py @@ -22,12 +22,7 @@ class Command(SkyeyeCommand): ) return parser - - def __call__(self, arg='', cli=None, script=None, **meta): - arg = arg.replace('-', '_') - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + arg = arg.replace('-', '_') return super(skyeye_cli.SkyEyeCli, cli).do_help(arg) diff --git a/utils/pycli/skyeye_command/history.py b/utils/pycli/skyeye_command/history.py index 71275362..ff71c5cb 100644 --- a/utils/pycli/skyeye_command/history.py +++ b/utils/pycli/skyeye_command/history.py @@ -14,14 +14,8 @@ class Command(SkyeyeCommand): add_help=False) return parser - - def __call__(self, arg='', cli=None, script=None, **meta): - arg = arg.replace('-', '_') - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): hist_len = cli.readline.get_current_history_length() for i in range(1, hist_len+1): hist_item = cli.readline.get_history_item(i) diff --git a/utils/pycli/skyeye_command/init_ok.py b/utils/pycli/skyeye_command/init_ok.py index 99f212a1..a6de1af6 100644 --- a/utils/pycli/skyeye_command/init_ok.py +++ b/utils/pycli/skyeye_command/init_ok.py @@ -16,12 +16,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): SkyEyePrepareToRun() if ss.system is None: diff --git a/utils/pycli/skyeye_command/list_attr.py b/utils/pycli/skyeye_command/list_attr.py index 750ead81..ef2858eb 100644 --- a/utils/pycli/skyeye_command/list_attr.py +++ b/utils/pycli/skyeye_command/list_attr.py @@ -22,24 +22,19 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): attr_info_l = [] cls_l = SkyEyeGetClassList() - if ns.cls not in cls_l: - msg = '"%s" ATTR information was not found' % ns.cls + if arg_ns.cls not in cls_l: + msg = '"%s" ATTR information was not found' % arg_ns.cls raise SkyeyeAPIException([ERROR_ALL_F, msg]) - attr_l = SkyEyeGetClassAttrList(ns.cls) + attr_l = SkyEyeGetClassAttrList(arg_ns.cls) attr_l.sort() attr_info_l = [] for attr in attr_l: - info_l = SkyEyeGetClassAttrInfo(ns.cls, attr) + info_l = SkyEyeGetClassAttrInfo(arg_ns.cls, attr) attr_info_l.append(info_l) print ("%-20s%-20s%s" % ("AttrName", "Type", "Description")) diff --git a/utils/pycli/skyeye_command/list_class.py b/utils/pycli/skyeye_command/list_class.py index 456e8ee1..611ecd61 100644 --- a/utils/pycli/skyeye_command/list_class.py +++ b/utils/pycli/skyeye_command/list_class.py @@ -17,12 +17,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): cls_l = SkyEyeGetClassList() cls_l.sort() table_print(cls_l) diff --git a/utils/pycli/skyeye_command/list_connect.py b/utils/pycli/skyeye_command/list_connect.py index f3e0be13..731523ce 100644 --- a/utils/pycli/skyeye_command/list_connect.py +++ b/utils/pycli/skyeye_command/list_connect.py @@ -1,4 +1,4 @@ -from . import SkyeyeCommand, convert_int +from . import SkyeyeCommand, convert_int, table_print import argparse import os from skyeye_common_module import SkyEyeGetClassList, SkyEyeGetClassConnectList @@ -22,18 +22,13 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): cls_l = SkyEyeGetClassList() - if ns.cls not in cls_l: - msg = 'information CONNECT "%s" was not found' % ns.cls + if arg_ns.cls not in cls_l: + msg = 'information CONNECT "%s" was not found' % arg_ns.cls raise SkyeyeAPIException([ERROR_ALL_F, msg]) - connect_l = SkyEyeGetClassConnectList(ns.cls) + connect_l = SkyEyeGetClassConnectList(arg_ns.cls) connect_l.sort() table_print(connect_l) diff --git a/utils/pycli/skyeye_command/list_cpu.py b/utils/pycli/skyeye_command/list_cpu.py index 9c2d8934..983a95e5 100644 --- a/utils/pycli/skyeye_command/list_cpu.py +++ b/utils/pycli/skyeye_command/list_cpu.py @@ -16,12 +16,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' diff --git a/utils/pycli/skyeye_command/list_device.py b/utils/pycli/skyeye_command/list_device.py index 4d4583d4..09038de0 100644 --- a/utils/pycli/skyeye_command/list_device.py +++ b/utils/pycli/skyeye_command/list_device.py @@ -23,18 +23,13 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - if ns.machine is None: + if arg_ns.machine is None: print ("%-30s%-30s" % ("DeviceName", "BelongBoard")) machlist = config.get_mach_list() for mach in machlist: @@ -51,7 +46,7 @@ class Command(SkyeyeCommand): print ("%-30s%-30s" % (device, mach)) else: print ("%-30s%-30s" % ("ID", "DeviceName")) - device_list = config.get_device_list_by_mach(ns.machine) + device_list = config.get_device_list_by_mach(arg_ns.machine) for i in range(0, len(device_list)): print ("%-30s%-30s" % (i+1, device_list[i])) diff --git a/utils/pycli/skyeye_command/list_iface.py b/utils/pycli/skyeye_command/list_iface.py index 0c3152ee..569f64a6 100644 --- a/utils/pycli/skyeye_command/list_iface.py +++ b/utils/pycli/skyeye_command/list_iface.py @@ -23,18 +23,13 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): cls_l = SkyEyeGetClassList() - if ns.cls not in cls_l: - msg = 'information IFACE "%s" was not found' % ns.cls + if arg_ns.cls not in cls_l: + msg = 'information IFACE "%s" was not found' % arg_ns.cls raise SkyeyeAPIException([ERROR_ALL_F, msg]) - iface_l = SkyEyeGetClassIfaceList(ns.cls) + iface_l = SkyEyeGetClassIfaceList(arg_ns.cls) iface_l.sort() table_print(iface_l) diff --git a/utils/pycli/skyeye_command/list_machines.py b/utils/pycli/skyeye_command/list_machines.py index 78a54738..cebf88af 100644 --- a/utils/pycli/skyeye_command/list_machines.py +++ b/utils/pycli/skyeye_command/list_machines.py @@ -15,12 +15,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' diff --git a/utils/pycli/skyeye_command/list_modules.py b/utils/pycli/skyeye_command/list_modules.py index 8e8428d3..cac7e6af 100644 --- a/utils/pycli/skyeye_command/list_modules.py +++ b/utils/pycli/skyeye_command/list_modules.py @@ -15,11 +15,6 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): SkyEyeListModules() return False diff --git a/utils/pycli/skyeye_command/list_register.py b/utils/pycli/skyeye_command/list_register.py index 54cbcb43..e16af193 100644 --- a/utils/pycli/skyeye_command/list_register.py +++ b/utils/pycli/skyeye_command/list_register.py @@ -29,20 +29,15 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - ret = sfi.get_device_register_info(ns.machine, ns.device) + ret = sfi.get_device_register_info(arg_ns.machine, arg_ns.device) if not ret: - print('Device "%s" doesn\'t have any register.' % ns.device) + print('Device "%s" doesn\'t have any register.' % arg_ns.device) else: print ("%-20s%-20s%-20s" % ("Register", "Value(HEX)", "Address(HEX)")) for i in ret: diff --git a/utils/pycli/skyeye_command/load_binary.py b/utils/pycli/skyeye_command/load_binary.py index 31e87db3..a3f716fa 100644 --- a/utils/pycli/skyeye_command/load_binary.py +++ b/utils/pycli/skyeye_command/load_binary.py @@ -28,27 +28,22 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): if script: script_dir = os.path.dirname(script) - path = os.path.join(script_dir, ns.path) + path = os.path.join(script_dir, arg_ns.path) else: - path = ns.path + path = arg_ns.path config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - if ns.cpu not in config.get_cpu_list(): - raise SkyeyeAPIException(['0x40030004', ns.cpu]) + if arg_ns.cpu not in config.get_cpu_list(): + raise SkyeyeAPIException(['0x40030004', arg_ns.cpu]) if not os.path.exists(path): - raise SkyeyeAPIException(['0x40030002', ns.path]) - ret = SkyEyeLoadBinary(ns.cpu, path) - binary_l[ns.cpu] = path + raise SkyeyeAPIException(['0x40030002', arg_ns.path]) + ret = SkyEyeLoadBinary(arg_ns.cpu, path) + binary_l[arg_ns.cpu] = path return False diff --git a/utils/pycli/skyeye_command/load_file.py b/utils/pycli/skyeye_command/load_file.py index 6316e119..80be4163 100644 --- a/utils/pycli/skyeye_command/load_file.py +++ b/utils/pycli/skyeye_command/load_file.py @@ -35,17 +35,12 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): if script: script_dir = os.path.dirname(script) - path = os.path.join(script_dir, ns.path) + path = os.path.join(script_dir, arg_ns.path) else: - path = ns.path + path = arg_ns.path config = GetGlobalConfig() if not config: @@ -55,11 +50,11 @@ class Command(SkyeyeCommand): if not config: raise SkyeyeAPIException(['0x40030003']) - if ns.cpu not in config.get_cpu_list(): - raise SkyeyeAPIException(['0x40030004', ns.cpu]) + if arg_ns.cpu not in config.get_cpu_list(): + raise SkyeyeAPIException(['0x40030004', arg_ns.cpu]) if not os.path.exists(path): - raise SkyeyeAPIException(['0x40030002', ns.path]) + raise SkyeyeAPIException(['0x40030002', arg_ns.path]) - SkyEyeLoadFile(ns.cpu, path, ns.addr) + SkyEyeLoadFile(arg_ns.cpu, path, arg_ns.addr) return False diff --git a/utils/pycli/skyeye_command/ls.py b/utils/pycli/skyeye_command/ls.py index 0d574a18..25b9f749 100644 --- a/utils/pycli/skyeye_command/ls.py +++ b/utils/pycli/skyeye_command/ls.py @@ -23,13 +23,8 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns =self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - if ns.path and not os.path.exists(ns.path): + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + if arg_ns.path and not os.path.exists(arg_ns.path): raise SkyeyeAPIException([ERROR_ALL_F, "No such file or directory"]) SkyEyeListDir(arg) diff --git a/utils/pycli/skyeye_command/md.py b/utils/pycli/skyeye_command/md.py index 150b590c..138aa5f5 100644 --- a/utils/pycli/skyeye_command/md.py +++ b/utils/pycli/skyeye_command/md.py @@ -30,19 +30,14 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - ret = SkyEyeReadMemory8(ns.cpu, ns.addr) + ret = SkyEyeReadMemory8(arg_ns.cpu, arg_ns.addr) print ("%-20s%-20s" % ("Addr(HEX)", "Value(HEX)")) - print ("%-20x%-20x" % (ns.addr, ret)) + print ("%-20x%-20x" % (arg_ns.addr, ret)) return False diff --git a/utils/pycli/skyeye_command/mm_info.py b/utils/pycli/skyeye_command/mm_info.py index c9b124d3..cd1e502e 100644 --- a/utils/pycli/skyeye_command/mm_info.py +++ b/utils/pycli/skyeye_command/mm_info.py @@ -24,12 +24,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - SkyEyeMemoryInfo(ns.func) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + SkyEyeMemoryInfo(arg_ns.func) return False diff --git a/utils/pycli/skyeye_command/open_instr_record.py b/utils/pycli/skyeye_command/open_instr_record.py index 12e7655b..9e28d3c5 100644 --- a/utils/pycli/skyeye_command/open_instr_record.py +++ b/utils/pycli/skyeye_command/open_instr_record.py @@ -31,27 +31,20 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - if ns.cpu not in config.get_cpu_list(): - raise SkyeyeAPIException(['0x40210004', ns.cpu]) - print(ns.cpu, ns.log_file) + if arg_ns.cpu not in config.get_cpu_list(): + raise SkyeyeAPIException(['0x40210004', arg_ns.cpu]) + print(arg_ns.cpu, arg_ns.log_file) try: - ret = SkyEyeOpenInstrRecord(ns.cpu, ns.log_file) + ret = SkyEyeOpenInstrRecord(arg_ns.cpu, arg_ns.log_file) except Exception as e: - print('HAHA') raise SkyeyeAPIException(['0x40210000', e]) if ret == 0: - print('HOHO') raise SkyeyeAPIException(['0x40212101', e]) return False diff --git a/utils/pycli/skyeye_command/quit.py b/utils/pycli/skyeye_command/quit.py index 8d4ddedc..898134c0 100644 --- a/utils/pycli/skyeye_command/quit.py +++ b/utils/pycli/skyeye_command/quit.py @@ -19,12 +19,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): cli.postloop() if mips.mips_thread != None: mips.mips_thread.stop() diff --git a/utils/pycli/skyeye_command/remote_gdb.py b/utils/pycli/skyeye_command/remote_gdb.py index 3eaa047e..2d262458 100644 --- a/utils/pycli/skyeye_command/remote_gdb.py +++ b/utils/pycli/skyeye_command/remote_gdb.py @@ -38,23 +38,16 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - raise SkyeyeAPIException([ERROR_ALL_F, msg]) - - try: - ret = SkyEyeCreateRemoteGdb(ns.cpu, ns.port, ns.ip) + ret = SkyEyeCreateRemoteGdb(arg_ns.cpu, arg_ns.port, arg_ns.ip) except: msg = "An error has occurred happend when remote gdb start!\n" - msg += "Target CPU name: %s, Ip: %s, Port: %d" % (ns.cpu, ns.ip, ns.port) + msg += "Target CPU name: %s, Ip: %s, Port: %d" % (arg_ns.cpu, arg_ns.ip, arg_ns.port) raise SkyeyeAPIException([ERROR_ALL_F, msg]) if ret != 1: - msg = "Remote Gdb Start error, Target Cpu Name: %s, Ip: %s, Port: %d" % (ns.cpu, ns.ip, ns.port) + msg = "Remote Gdb Start error, Target Cpu Name: %s, Ip: %s, Port: %d" % (arg_ns.cpu, arg_ns.ip, arg_ns.port) raise SkyeyeAPIException([ERROR_ALL_F, msg]) print("Remote Gdb Start OK!") diff --git a/utils/pycli/skyeye_command/reset.py b/utils/pycli/skyeye_command/reset.py index f72f23b3..81965625 100644 --- a/utils/pycli/skyeye_command/reset.py +++ b/utils/pycli/skyeye_command/reset.py @@ -18,12 +18,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): SkyEyeReset() pytimer.set_running(False) self.open_conf_flag = False diff --git a/utils/pycli/skyeye_command/reverse.py b/utils/pycli/skyeye_command/reverse.py index 164ded0f..024fc14d 100644 --- a/utils/pycli/skyeye_command/reverse.py +++ b/utils/pycli/skyeye_command/reverse.py @@ -36,12 +36,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' @@ -65,10 +60,10 @@ class Command(SkyeyeCommand): msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - if ns.cpu not in config.get_cpu_list(): - raise SkyeyeAPIException(['0x40130004', ns.cpu]) + if arg_ns.cpu not in config.get_cpu_list(): + raise SkyeyeAPIException(['0x40130004', arg_ns.cpu]) - reverse_steps = tools.str_to_uint(ns.size) + reverse_steps = tools.str_to_uint(arg_ns.size) steps = tools.ckpt_get_steps(ckpt, core) current_steps = SkyEyeGetCpuSteps(core) run_steps = current_steps - steps - reverse_steps diff --git a/utils/pycli/skyeye_command/reverse_disable.py b/utils/pycli/skyeye_command/reverse_disable.py index fb66bd6c..55330432 100644 --- a/utils/pycli/skyeye_command/reverse_disable.py +++ b/utils/pycli/skyeye_command/reverse_disable.py @@ -29,12 +29,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' diff --git a/utils/pycli/skyeye_command/reverse_enable.py b/utils/pycli/skyeye_command/reverse_enable.py index 79281a4c..dbce0f2f 100644 --- a/utils/pycli/skyeye_command/reverse_enable.py +++ b/utils/pycli/skyeye_command/reverse_enable.py @@ -27,12 +27,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' diff --git a/utils/pycli/skyeye_command/run.py b/utils/pycli/skyeye_command/run.py index 496f8c9c..9cb492f2 100644 --- a/utils/pycli/skyeye_command/run.py +++ b/utils/pycli/skyeye_command/run.py @@ -18,12 +18,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): SkyEyeRun() pytimer.set_running(True) diff --git a/utils/pycli/skyeye_command/run_command.py b/utils/pycli/skyeye_command/run_command.py index cf333c23..4ca7beb9 100644 --- a/utils/pycli/skyeye_command/run_command.py +++ b/utils/pycli/skyeye_command/run_command.py @@ -26,13 +26,8 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - name, arg = ns.command[0], ' '.join(ns.command[1:]) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + name, arg = arg_ns.command[0], ' '.join(arg_ns.command[1:]) skyeye_command = import_module('skyeye_command') command = getattr(skyeye_command, name, None) if command is None: diff --git a/utils/pycli/skyeye_command/run_py.py b/utils/pycli/skyeye_command/run_py.py index 9e813b99..7c014289 100644 --- a/utils/pycli/skyeye_command/run_py.py +++ b/utils/pycli/skyeye_command/run_py.py @@ -22,12 +22,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns =self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): try: self._run_python_expr(arg) except: diff --git a/utils/pycli/skyeye_command/run_script.py b/utils/pycli/skyeye_command/run_script.py index e6112f7e..af8e91dc 100644 --- a/utils/pycli/skyeye_command/run_script.py +++ b/utils/pycli/skyeye_command/run_script.py @@ -25,27 +25,17 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - if cli.open_conf_flag: - raise SkyeyeAPIException([ERROR_ALL_F, 'Do not reload until RESET is performed']) - - SetGlobalScript(ns.path) - full_file_name = os.path.realpath(ns.path) - if not os.path.exists(ns.path): - raise SkyeyeAPIException(['0x40160002', ns.path]) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + SetGlobalScript(arg_ns.path) + full_file_name = os.path.realpath(arg_ns.path) + if not os.path.exists(arg_ns.path): + raise SkyeyeAPIException(['0x40160002', arg_ns.path]) SkyEyeSetScriptPath(full_file_name) commands = self._get_commands_form_script(full_file_name) for command, arg in commands: command(arg=arg, cli=cli, script=full_file_name) - cli.open_conf_flag = True - return False def _get_commands_form_script(self, path): diff --git a/utils/pycli/skyeye_command/set_mode.py b/utils/pycli/skyeye_command/set_mode.py index 3e47831c..1fbadb43 100644 --- a/utils/pycli/skyeye_command/set_mode.py +++ b/utils/pycli/skyeye_command/set_mode.py @@ -25,17 +25,12 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): config = GetGlobalConfig() if not config: msg = 'Can\'t get the config.' raise SkyeyeAPIException([ERROR_ALL_F, msg]) - print ("--%d--" % ns.mode) - SetAllToDyncom(ns.mode) + print ("--%d--" % arg_ns.mode) + SetAllToDyncom(arg_ns.mode) return False diff --git a/utils/pycli/skyeye_command/set_pc.py b/utils/pycli/skyeye_command/set_pc.py index cf951b64..aed30838 100644 --- a/utils/pycli/skyeye_command/set_pc.py +++ b/utils/pycli/skyeye_command/set_pc.py @@ -31,13 +31,8 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - ret = SkyEyeSetPC(ns.cpu, ns.value) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + ret = SkyEyeSetPC(arg_ns.cpu, arg_ns.value) if ret == 0: msg = 'SkyEyeSetPC Failed!' diff --git a/utils/pycli/skyeye_command/set_register.py b/utils/pycli/skyeye_command/set_register.py index 56799d19..6118a126 100644 --- a/utils/pycli/skyeye_command/set_register.py +++ b/utils/pycli/skyeye_command/set_register.py @@ -43,13 +43,8 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - regid = SkyEyeGetDevRegIdByName(ns.machine, ns.device, ns.register) - ret = SkyEyeSetDevRegValueById(ns.machine, ns.device, ns.value, regid) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + regid = SkyEyeGetDevRegIdByName(arg_ns.machine, arg_ns.device, arg_ns.register) + ret = SkyEyeSetDevRegValueById(arg_ns.machine, arg_ns.device, arg_ns.value, regid) return False diff --git a/utils/pycli/skyeye_command/shell.py b/utils/pycli/skyeye_command/shell.py index 1746c23b..f6c13057 100644 --- a/utils/pycli/skyeye_command/shell.py +++ b/utils/pycli/skyeye_command/shell.py @@ -7,6 +7,7 @@ import shlex class Command(SkyeyeCommand): export = ['cli'] + need_check_arg = False def create_argparser(self): parser = argparse.ArgumentParser( @@ -23,11 +24,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - # try: - # ns =self.argparser.parse_args(arg.split()) - # except: - # raise SkyeyeAPIException([ERROR_ALL_F, '']) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): if arg: try: subprocess.run(shlex.split(arg)) diff --git a/utils/pycli/skyeye_command/speed.py b/utils/pycli/skyeye_command/speed.py index 4e5f5172..c0b19ea0 100644 --- a/utils/pycli/skyeye_command/speed.py +++ b/utils/pycli/skyeye_command/speed.py @@ -18,11 +18,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): mips_dic = mips.get() for item in mips_dic: diff --git a/utils/pycli/skyeye_command/stepi.py b/utils/pycli/skyeye_command/stepi.py index 02cecba4..f4741aac 100644 --- a/utils/pycli/skyeye_command/stepi.py +++ b/utils/pycli/skyeye_command/stepi.py @@ -31,12 +31,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - - SkyEyeStepi(ns.cpu, str(ns.size)) + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): + SkyEyeStepi(arg_ns.cpu, str(arg_ns.size)) return False diff --git a/utils/pycli/skyeye_command/stop.py b/utils/pycli/skyeye_command/stop.py index c97033b0..50613047 100644 --- a/utils/pycli/skyeye_command/stop.py +++ b/utils/pycli/skyeye_command/stop.py @@ -18,12 +18,7 @@ class Command(SkyeyeCommand): return parser - def __call__(self, arg='', cli=None, script=None, **meta): - try: - ns = self.argparser.parse_args(arg.split()) - except: - raise SkyeyeAPIException([ERROR_ALL_F, '']) - + def call(self, arg='', arg_ns=None, cli=None, script=None, **meta): SkyEyeStop() pytimer.set_running(False) diff --git a/utils/pycli/state_machine/permission.py b/utils/pycli/state_machine/permission.py new file mode 100644 index 00000000..f6490d4d --- /dev/null +++ b/utils/pycli/state_machine/permission.py @@ -0,0 +1,33 @@ +class Permission: + always_allow = { + 'history', 'help', + 'ls', 'cd', + 'shell', 'run_py', + 'quit', 'q', + 'run_script', + 'list_modules', 'list_class', 'list_attr', 'list_connect', 'list_iface', + 'configure_read', + } + +class PermissionUnConfigured(Permission): + allow = {'define_conf'} + +class PermissionConfigured(Permission): + allow = { + 'reset', + 'init_ok', + 'load_binary', 'load_file', + 'md', + 'list_cpu', 'list_machine', 'list_device', 'list_register', + } + +class PermissionStop(Permission): + disallow = {'define_conf', 'init_ok'} + +class PermissionRunning(Permission): + allow = { + 'stop', + 'speed', + 'bp_list', + 'list_cpu', 'list_machine', 'list_device', 'list_register', + } diff --git a/utils/pycli/state_machine/skyeye_state_machine.py b/utils/pycli/state_machine/skyeye_state_machine.py new file mode 100644 index 00000000..e399ca57 --- /dev/null +++ b/utils/pycli/state_machine/skyeye_state_machine.py @@ -0,0 +1,80 @@ +from abc import ABC, abstractproperty, abstractmethod +from exception import SkyeyeAPIException, ERROR_ALL_F +from .permission import PermissionUnConfigured, PermissionConfigured, PermissionStop, PermissionRunning + +class State(ABC): + name = '' + prompt_string = '' + + @abstractmethod + def transition(self, action): + pass + + def check(self, action): + if (action not in self.always_allow) and \ + ((hasattr(self, 'allow') and action not in self.allow) or \ + (hasattr(self, 'disallow') and action in self.disallow)): + msg = 'state machine: Can\'t excute "%s" in %s.\n%s' % (action, self.name, self.prompt_string) + raise SkyeyeAPIException([ERROR_ALL_F, msg]) + +class UnConfiguredState(State, PermissionUnConfigured): + name = 'UN_CONFIGURED_STATE' + prompt_string = '(please try excuting "run-script" or "define-conf" first.)' + + def transition(self, action): + if action == 'define_conf': + return ConfiguredState.name + return self.name + +class ConfiguredState(State, PermissionConfigured): + name = 'CONFIGURED_STATE' + prompt_string = '(please try excuting "init-ok" or "reset" first.)' + + def transition(self, action): + if action == 'init_ok': + return StopState.name + if action == 'reset': + return UnConfiguredState.name + return self.name + +class StopState(State, PermissionStop): + name = 'STOP_STATE' + prompt_string = '(please try excuting "reset" first.)' + + def transition(self, action): + if action == 'run': + return RunningState.name + + if action == 'reset': + return UnConfiguredState.name + + return self.name + +class RunningState(State, PermissionRunning): + name = 'RUNNING_STATE' + prompt_string = '(please try excuting "stop" first.)' + + def transition(self, action): + if action == 'stop': + return StopState.name + return self.name + +class StateMachine: + def __init__(self, state_cls_list, start_state_name): + self.add_all_states(state_cls_list) + self.current_state = self.states[start_state_name] + + def add_all_states(self, state_cls_list): + self.states = {} + for S in state_cls_list: + self.states[S.name] = S() + + def check(self, action): + self.current_state.check(action) + + def transition(self, action): + state_name = self.current_state.transition(action) + self.current_state = self.states[state_name] + +state_cls_list = [UnConfiguredState, ConfiguredState, StopState, RunningState] +state_machine = StateMachine(state_cls_list, UnConfiguredState.name) -- Gitee