From 99a06d92b3ca9a1abc9f1385a3182fc0daa2f243 Mon Sep 17 00:00:00 2001 From: Marko Mecina <marko.mecina@univie.ac.at> Date: Thu, 18 Apr 2024 17:14:50 +0200 Subject: [PATCH] add support for deduced TC parameter types --- Ccs/ccs_function_lib.py | 92 +++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 36 deletions(-) diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index 8d2f517..c33cd6c 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -2604,7 +2604,7 @@ def Tcbuild(cmd, *args, sdid=0, ack=None, no_check=False, hack_value=None, sourc if len(padded) != 0: for n in padded: x = list(params[n]) - x[-4:-2] = 'SPARE', x[-6] + x[8:10] = 'SPARE', x[6] params.remove(params[n]) params.insert(n, tuple(x)) @@ -2638,7 +2638,7 @@ def _get_tc_params(cmd, paf_cal=False): 'WHERE BINARY ccf_descr="%s"' % cmd else: que = 'SELECT ccf_type,ccf_stype,ccf_apid,ccf_npars,cdf.cdf_grpsize,cdf.cdf_eltype,cdf.cdf_ellen,' \ - 'cdf.cdf_value,cpc.cpc_ptc,cpc.cpc_pfc,cpc.cpc_descr,cpc.cpc_pname FROM ccf LEFT JOIN cdf ON ' \ + 'cdf.cdf_value,cpc.cpc_ptc,cpc.cpc_pfc,cpc.cpc_categ,cpc.cpc_descr,cpc.cpc_pname FROM ccf LEFT JOIN cdf ON ' \ 'cdf.cdf_cname=ccf.ccf_cname LEFT JOIN cpc ON cpc.cpc_pname=cdf.cdf_pname ' \ 'WHERE BINARY ccf_descr="%s"' % cmd @@ -2725,9 +2725,29 @@ def encode_pus(params, *values, params_as_fmt_string=False): fmts = [parameter_ptt_type_tc(par) for par in params] - # deduced parameter types are not supported for TCs TODO if 'deduced' in fmts: - raise NotImplementedError("Deduced parameter types in TCs are not supported! ({})".format(', '.join([p[-2] for p in params if p[8] == 11]))) + + pfmt = None + + vidx = 0 + for i, p in enumerate(params): + + if fmts[i] == 'deduced': + if pfmt is None: + raise ValueError('Configuration error: no format for parameter of deduced type has yet been defined! {}'.format(p)) + else: + fmts[i] = pfmt + vidx += 1 + + elif p[10] == 'P': + pfmt = _dp_items[values[vidx]]['fmt'] + vidx += 1 + + elif not fmts[i].endswith('x'): + vidx += 1 + + else: + pass # nothing to do for spares try: fmt_string = '>'+''.join(fmts) @@ -2856,7 +2876,7 @@ def parameter_ptt_type_tc(par): :param par: :return: """ - return ptt(par[-4], par[-3]) + return ptt(par[8], par[9]) ## @@ -3296,37 +3316,37 @@ def PUSpack(version=0, typ=0, dhead=0, apid=0, gflags=0b11, sc=0, pktl=0, # @param varpos Position of the parameter indicating repetition # @param grpsize Parameter group size # @param repfac Number of parameter (group) repetitions -def build_packstr_11(st, sst, apid, params, varpos, grpsize, repfac, *args, no_check=False): - """ - - :param st: - :param sst: - :param apid: - :param params: - :param varpos: - :param grpsize: - :param repfac: - :param args: - :param no_check: - :return: - """ - ptypeindex = [i[-1] == FMT_TYPE_PARAM for i in params].index(True) # check where fmt type defining parameter is - ptype = args[varpos + ptypeindex::grpsize] - args2 = list(args) - args2[varpos + 1:] = [tc_param_alias(param[-1], val, no_check=no_check) for param, val in - zip(params[varpos + 1:] * repfac, args[varpos + 1:])] - ptc = 0 - varlist = [] - for par in params[varpos + 1:] * repfac: - if par[-4] != 11: - #varlist.append(ptt[par[-4]][par[-3]]) - varlist.append(parameter_ptt_type_tc(par)) - else: - varlist.append( - ptt(par[-4], par[-3])[tc_param_alias(FMT_TYPE_PARAM, ptype[ptc], no_check=no_check)]) - #varlist.append(ptt[par[-4]][par[-3]][tc_param_alias('DPP70044', ptype[ptc], no_check=no_check)]) - ptc += 1 - return varlist, args2 +# def build_packstr_11(st, sst, apid, params, varpos, grpsize, repfac, *args, no_check=False): +# """ +# +# :param st: +# :param sst: +# :param apid: +# :param params: +# :param varpos: +# :param grpsize: +# :param repfac: +# :param args: +# :param no_check: +# :return: +# """ +# ptypeindex = [i[-1] == FMT_TYPE_PARAM for i in params].index(True) # check where fmt type defining parameter is +# ptype = args[varpos + ptypeindex::grpsize] +# args2 = list(args) +# args2[varpos + 1:] = [tc_param_alias(param[-1], val, no_check=no_check) for param, val in +# zip(params[varpos + 1:] * repfac, args[varpos + 1:])] +# ptc = 0 +# varlist = [] +# for par in params[varpos + 1:] * repfac: +# if par[-4] != 11: +# #varlist.append(ptt[par[-4]][par[-3]]) +# varlist.append(parameter_ptt_type_tc(par)) +# else: +# varlist.append( +# ptt(par[-4], par[-3])[tc_param_alias(FMT_TYPE_PARAM, ptype[ptc], no_check=no_check)]) +# #varlist.append(ptt[par[-4]][par[-3]][tc_param_alias('DPP70044', ptype[ptc], no_check=no_check)]) +# ptc += 1 +# return varlist, args2 ## -- GitLab