From b2fbe14af7f3b7eb9d851030c02b3f32a1b4b82b Mon Sep 17 00:00:00 2001 From: Marko Mecina <marko.mecina@univie.ac.at> Date: Wed, 7 Sep 2022 14:09:59 +0200 Subject: [PATCH] add convenience function to calculate parameter CRC --- Ccs/ccs_function_lib.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index e4e2525..ca4b476 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -1747,7 +1747,7 @@ def Tcsend_DB(cmd, *args, ack=None, pool_name=None, sleep=0., no_check=False, pk # @param cmd CCF_DESCR string of the requested TC # @param args Parameters required by the cmd # @param ack Override the I-DB TC acknowledment value (4-bit binary string, e.g., '0b1011') -def Tcbuild(cmd, *args, sdid=0, ack=None, no_check=False, hack_value=None, **kwargs): +def Tcbuild(cmd, *args, sdid=0, ack=None, no_check=False, hack_value=None, source_data_only=False, **kwargs): # with self.poolmgr.lock: 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 ' \ @@ -1824,6 +1824,9 @@ def Tcbuild(cmd, *args, sdid=0, ack=None, no_check=False, hack_value=None, **kwa pdata = encode_pus(params, *values) + if source_data_only: + return pdata + return Tcpack(st=st, sst=sst, apid=int(apid), data=pdata, sdid=sdid, ack=ack, **kwargs), (st, sst, apid) @@ -2140,6 +2143,7 @@ def Tmpack(data=b'', apid=321, st=1, sst=1, destid=0, version=0, typ=0, timestam return tm + ## # Generate PUS packet # @@ -2524,6 +2528,20 @@ def str_to_num(string, fmt=None): return num +def calc_param_crc(cmd, *args, no_check=False, hack_value=None): + """ + Calculates the CRC over the packet source data (excluding the checksum parameter). + Uses the same CRC algo as packet CRC and assumes the checksum is at the end of the packet source data. + @param cmd: + @param args: + @param no_check: + @param hack_value: + @return: + """ + pdata = Tcbuild(cmd, *args, no_check=no_check, hack_value=hack_value, source_data_only=True) + return crc(pdata[:-PEC_LEN]) + + def tc_load_to_memory(data, memid, mempos, slicesize=1000, sleep=0., ack=None, pool_name='LIVE'): """ Function for loading large data to DPU memory. Splits the input _data_ into slices and sequentially sends them -- GitLab