diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index bdbb140e53a3d296a58b0f8ec57a899e81e39f71..357c1bd68ed8c4ba1005331f23650d9fdd9df47f 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -2552,7 +2552,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 @@ -2610,6 +2610,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