diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index b09dbc8170c16ce843bf5edf9e51b3e7248ad76d..3eab8b4b9e6b0b4ea16ba80f05af739109fbdb71 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -1082,7 +1082,7 @@ def Tcdata(tm): #outlist = [] #datastream = BitStream(data) try: - vals_params = read_variable_pckt(data, params) + vals_params = read_variable_pckt(data, params, tc=True) except IndexError: vals_params = None if vals_params: @@ -1192,7 +1192,7 @@ def read_varpack(data, parameters, paramid, outlist, parlist): return outlist, parlist -def read_variable_pckt(tm_data, parameters): +def read_variable_pckt(tm_data, parameters, tc=False): """ Read parameters from a variable length packet :param tm_data: @@ -1202,18 +1202,20 @@ def read_variable_pckt(tm_data, parameters): tms = io.BytesIO(tm_data) result = [] - result = read_stream_recursive(tms, parameters, decoded=result) + result = read_stream_recursive(tms, parameters, decoded=result, tc=tc) return result -def read_stream_recursive(tms, parameters, decoded=None, bit_off=0): +def read_stream_recursive(tms, parameters, decoded=None, bit_off=0, tc=False): """ Recursively operating function for decoding variable length packets - :param tms: - :param parameters: - :param decoded: - :return: + @param tms: + @param parameters: + @param decoded: + @param bit_off: + @param tc: + @return: """ decoded = [] if decoded is None else decoded @@ -1234,7 +1236,8 @@ def read_stream_recursive(tms, parameters, decoded=None, bit_off=0): fixrep = par[-1] - if grp and fixrep: + # don't use fixrep in case of a TC, since it is only defined for TMs + if grp and fixrep and not tc: value = fixrep logger.debug('{} with fixrep={} used'.format(par[1], value)) else: @@ -1244,6 +1247,7 @@ def read_stream_recursive(tms, parameters, decoded=None, bit_off=0): value = read_stream(tms, fmt, offbi=bit_off) bit_off = (bit_off + unaligned) % 8 + # re-read byte if read position is bit-offset after previous parameter if bit_off: tms.seek(tms.tell() - 1) @@ -1253,7 +1257,7 @@ def read_stream_recursive(tms, parameters, decoded=None, bit_off=0): skip = grp rep = value while rep > 0: - decoded = read_stream_recursive(tms, parameters[par_idx + 1:par_idx + 1 + grp], decoded, bit_off=bit_off) + decoded = read_stream_recursive(tms, parameters[par_idx + 1:par_idx + 1 + grp], decoded, bit_off=bit_off, tc=tc) rep -= 1 return decoded