eive-tmtc/pus_tm/service_8_hook.py

47 lines
1.6 KiB
Python

import struct
from typing import Tuple
from config.object_ids import ObjIdIds
from pus_tc.ploc import PlocActionIds
def user_analyze_service_8_data(
object_id: int, action_id: int, custom_data: bytearray) -> Tuple[list, list]:
"""
This function is called by the TMTC core if a Service 8 data reply (subservice 130)
is received. The user can return a tuple of two lists, where the first list
is a list of header strings to print and the second list is a list of values to print.
The TMTC core will take care of printing both lists and logging them.
@param object_id:
@param action_id:
@param custom_data:
@return:
"""
if object_id == ObjIdIds.PDU2_HANDLER_ID.value:
header_list = ['PDU2 Service 8 Reply']
data_string = str()
for index in range(len(custom_data)):
data_string += str(hex(custom_data[index])) + " , "
data_string = data_string.rstrip()
data_string = data_string.rstrip(',')
data_string = data_string.rstrip()
content_list = [data_string]
elif object_id == ObjIdIds.PLOC_ID:
return handle_ploc_replies(custom_data)
else:
header_list = []
content_list = []
return header_list, content_list
def handle_ploc_replies(custom_data: bytearray) -> Tuple[list, list]:
header_list = []
content_list = []
action_id = struct.unpack('!I', custom_data[0:4])
if action_id == PlocActionIds.tc_mem_read:
header_list = ['PLOC Read Memory Data']
memory_data = struct.unpack('!I', custom_data[4:8])
content_list = [memory_data]
return header_list, content_list