diff --git a/Makefile.am b/Makefile.am index 0738c5362c99036d1a012b6bdb1b2d2573c85136..2fcdf33372c341f6658463f75805b6ef111be5eb 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 a4aa37e1f1054c89c401ae21fdc627d0800184f7..a0dafd727fba13f62c910f36d8f9568600f7fbb4 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 034ba5f52170b8ac5bc5ead2e262b586604532ba..22d0ee4e42591d8f97ccf8e90456d756d055d99f 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 147e10f760435611202da62d4956e4ad18771ba7..e9f10eabd0a2a4b305b4ee482dcc88897bef2482 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 79794f0efe8cd9826555715c84a81bb4be616837..bcdf9b19f796b4de464dbab36a7b537a2bdff18b 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 2f65d7a74b807432d51fe4a4bff757e48f4f4b8e..2ce24e974244023fc55af937b6e0033da7673a66 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 50498c740136fdbe371e16c3742ca9890fd01eed..a1f0e42c1b9afe05616bd6911e315711a4d2e01c 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 9e70cf6f2e2b69418fe826e955a500599bdc68d9..1e86cf91987b3071e32f9534b3bbeaec098023b8 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 b65fb6957bfd0699b28334862fd977774d53ed74..4dde7d99b6bc38c9c5cce5a55fe2bb91273eb744 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 5632e208ed32d204a7aa47918279156e999c3d32..093eb82d34348e7a733b3b8e6f003d8f5748b0fd 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 894406024ef6e33a9eba3ece24d685bf87951fd7..54f9ea38e419e9a877dc6e22d98c229c872242df 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 845224a06eff0a0dc3c94a07227528fb3370e3e9..eeb40983781de0b67c74a81d78110857e2aa90e7 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 bb6ffd1f7497e95e4b4a6154a90dd3a10cfb2b9e..8ada4ab332eb40038bcf5ddf69c6ab775fbeb259 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 385c27f19b835f6dc830c6c1de0025b446d03dca..599a8e164b74b1ab6e538139ca603c2e3910f9b1 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 a6873de85c1fcd458378ecca64bbdcaaa9b22448..ebd4a9f511bbf38883b56212819138fc5a6cd629 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 55ebdb938155dca6ea775b43df79b5b19ba90b39..3336cfbeb434df3e582ec8bb34f13345fb9dbd96 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 8e3b53e542c56f63017ce75287b9d08f74c693da..c83b9faa36f05ff8537095ca307f633942524266 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 2f8da6ba8c0c6f133559b132780212b083a49135..34fe9ff36474dcbe1effe75c050e9a114cad1265 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 e21c6a474dced69d6610073dbe58051b84984692..359d278668110a6fe4d2f6e2c136cffc12368825 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 71275362edd9ffd4c0c58988d649e906572a29c2..ff71c5cb2220b2506db07cf032e5965115eb390e 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 99f212a1301e566b8b2bfe56dadcd04ab053e5f7..a6de1af657536a7d10fa5d9de84e633ea81b3dcd 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 750ead81b8060118994cea5058af8a5725ea75ff..ef2858ebf04fe48236afbc330ebe42c14bbdbb93 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 456e8ee1a562e4e81389b3b29d602019bcbfd5bf..611ecd61b940d5987db30ff3dd03f0ad32976991 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 f3e0be139dbfc4ea12ee97a3ef62e224736246db..731523ce88b22b2bc2206b6e927f8cf5228b4a37 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 9c2d89348afb01ba18accd31c6c3d8221f312e35..983a95e500220b0c658c38829baa66672f18c994 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 4d4583d438879046801dac6a69a57e210ef6461c..09038de0141c3346c38d3fd6be219e7a033371e9 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 0c3152ee15f880ae1ad0df95b63d8d70733847c6..569f64a64663b1f24655f6986f22f2dd5f0e91a6 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 78a5473838836dbd90c12892f350343b44a63fb8..cebf88afdc4c31e2c0c7f10a75d4aec48dd10926 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 8e8428d30bfb0a6f6daf12363f2704185fa1638f..cac7e6af6140080eeec96b808cb1b3f8fc5a3f3e 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 54cbcb43a695732c0a9c38abbf31969973bc680c..e16af1935c267a6c1c00743368e80f23a421240d 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 31e87db36d2a2a6af9081e2aa859b31eff94dbc0..a3f716fa883854c6e0114a2274d9c319a233c8eb 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 6316e1192743a4033a55f11c3d809671a018f113..80be41638022d123a9d7efad2757031349713d56 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 0d574a18fe8070fa0bcd252fca20fc2c4c8bfdce..25b9f74956404589e7fd02bc70bf804d50335cc4 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 150b590c92d5dfd7ac971b6fc2d1b7e64fae0c34..138aa5f57b5e01ce63801613a5a631284a500c15 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 c9b124d3fa0fa909b897cef4716e6db7a6f1c610..cd1e502e6885d771b8edfcd3d11d3c59cbcbc80a 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 12e7655b286f67fd61f2de052db3b583c82da83c..9e28d3c503db50264718b13d29adbc2f2562804d 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 8d4ddedc07d20e93dc554fbe04f7dad317345079..898134c05ce61081896a28662cf242cf17d78254 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 3eaa047efaf5ed539ef0100baa39cda6b60456a0..2d2624582260a7e5d66703bf06f26e2b539d674b 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 f72f23b31a32eddbfe963351a38a662ce74afdc8..8196562532a450d52f9ccd55432e8cd05bdc06a8 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 164ded0f67c3a82c87fff544960fe6e5b76c2d2b..024fc14da8b61c70384597ed50ee64cf2703e735 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 fb66bd6caf238d411d221b6c8ca5a45f1611d2cc..55330432085ccb3f3deb3d79e470050888590c63 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 79281a4ccbd6e479c35b764502c9e2e202ab7a75..dbce0f2fbb4d8e5b8a230fc9147c4a67051a1f27 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 496f8c9c482d7a4fe15ee9e3cc877dc0c2c61feb..9cb492f2bc2e673ea50c2b1ea4d26debc6c9d4bf 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 cf333c23c3379589cb479f54cd37409843fd9d7c..4ca7beb94b6c63f7825c2d4df8a6adbc13473656 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 9e813b99b9d52a05010ef3f48da488c3bc78d480..7c014289b327f588abd8e7cb081cfb9a8d814213 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 e6112f7e41190455b52854f113e122fa0c41c794..af8e91dcaf566bb7cb45e89be96434a7af5aa3b9 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 3e47831c0ebb88e96e2948d2c020944de2218060..1fbadb4323d964956e5d3d58d06268f7c15149cc 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 cf951b644a20affe379b15c1ab6f865cc1230406..aed30838ab5977df6511beb2e93b460c1b1a2053 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 56799d197253c08fbbe1eb34dbe1368f44a5a290..6118a126e27585281beae9004821db1421e47da1 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 1746c23b5172540256db88c57f7b3b86a23cb7b6..f6c1305748835906c777dca4321f375fb7767e47 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 4e5f5172784d9f2470bd7ffe7ccbb21a5fdf1f06..c0b19ea0097df0bbec3ea3be7a516987530bd62a 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 02cecba4c6aa53abd1d2700ef6cf4117ec509761..f4741aac73332d546d2ba6cc6131a03a30fe5a83 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 c97033b0e19762e094c59af4f323bd9d6f70fe09..50613047874724d124cf39c091e2beedb591d9c0 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 0000000000000000000000000000000000000000..f6490d4d8bb900122491bd881769aa187c76afe9 --- /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 0000000000000000000000000000000000000000..e399ca57365cd9c55ebdcaa5abe4899f8ff454ce --- /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)