diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index 7f1dfa957ed551d6ef5f24f06823c826d9e19c39..e4fe4e276ab682f655af996306a6b15c7ec67a9a 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -2546,7 +2546,7 @@ def Tcsend_DB(cmd, *args, ack=None, pool_name=None, sleep=0., no_check=False, pk ## # Generate TC -def Tcbuild(cmd, *args, sdid=0, ack=None, no_check=False, hack_value=None, source_data_only=False, **kwargs): +def Tcbuild(cmd, *args, sdid=0, ack=None, no_check=False, hack_value=None, source_data_only=False, fmt='raw', **kwargs): """ Create TC bytestring for CMD with corresponding parameters @@ -2604,6 +2604,9 @@ def Tcbuild(cmd, *args, sdid=0, ack=None, no_check=False, hack_value=None, sourc else: values = hack_value + if fmt == 'tcl': + return cmd, params, values + pdata = encode_pus(params, *values) if source_data_only: diff --git a/Ccs/tools/convert_to_tcl.py b/Ccs/tools/convert_to_tcl.py new file mode 100644 index 0000000000000000000000000000000000000000..576763dc9ea2583bebfa747706eec941902c7d63 --- /dev/null +++ b/Ccs/tools/convert_to_tcl.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 + +import sys +sys.path.insert(0, '..') + +import ccs_function_lib as cfl + +TCL_CMD_STR = "tcsend {} {} checks ALL ackFlags 15" + +TCL_PKT_VER_STR = 'subscribepacket {} referby {}\nwaitfor {} -timeout {}\nsyslog "{} received"\nunsubscribepacket {}' + +def get_cname(cdescr): + try: + descr, = cfl.scoped_session_idb.execute('select ccf_cname from ccf where ccf_descr="{}"'.format(cdescr)).fetchall()[0] + except IndexError: + descr = cdescr + finally: + cfl.scoped_session_idb.close() + return descr + +def get_tm_info(st, sst, pi1): + return cfl.scoped_session_idb.execute('select pid_spid from pid where pid_type="{}" and pid_stype="{}" and pid_pi1_val="{}"'.format(st, sst, pi1)).fetchall()[0] + +def build_tcl_cmd(cmd, *args, **kwargs): + + cdescr, params, values = cfl.Tcbuild(cmd, *args, fmt='tcl', **kwargs) + cname = get_cname(cdescr) + + ed_pars = [param for param in params if param[5] not in ['A', 'F']] + if len(ed_pars) != len(values): + raise ValueError('Wrong number of parameters: Expected {}, but got {}.\n{}'.format(len(ed_pars), len(values), ', '.join(x[10] for x in ed_pars))) + + + pconfig = [(p[12], v) for p, v in zip(ed_pars, values)] + pstr = ["{{{} {}}}".format(*pv) for pv in pconfig] + + return TCL_CMD_STR.format(cname, " ".join(pstr)) + +def build_tcl_pkt_ver(st, sst, pi1, wait=5.): + + spid, descr = get_tm_info(st, sst, pi1) + + return TCL_PKT_VER_STR.format(spid, descr, descr, wait, descr, spid) + + + +# MemoryID16 = "MRAM" # JA0H0124 +# # N_16 = 1 # JA0H0042 [NOT EDITABLE] +# StartAddress = 0x80000 # JA0H0125 +# Length = 8 # JA0H0123 +# Data = b'DEADBEEF' # JA0H0122 +# tc=build_tcl_cmd('BSW_SetParamValue', 2818572294, 42, pool_name='LIVE') +# pass \ No newline at end of file