2021-04-26 14:56:51 +02:00
|
|
|
import struct
|
2021-02-09 12:35:10 +01:00
|
|
|
from typing import Tuple
|
2021-06-11 13:51:56 +02:00
|
|
|
from config.object_ids import *
|
2021-04-25 17:46:53 +02:00
|
|
|
from pus_tc.imtq import ImtqActionIds
|
2021-04-24 13:27:57 +02:00
|
|
|
from pus_tc.ploc import PlocReplyIds
|
2021-02-09 12:35:10 +01:00
|
|
|
|
|
|
|
|
|
|
|
def user_analyze_service_8_data(
|
2021-05-17 17:42:04 +02:00
|
|
|
object_id: bytes, action_id: int, custom_data: bytearray) -> Tuple[list, list]:
|
2021-02-09 12:35:10 +01:00
|
|
|
"""
|
|
|
|
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:
|
|
|
|
"""
|
2021-05-17 17:42:04 +02:00
|
|
|
if object_id == PDU_2_HANDLER_ID:
|
2021-02-11 08:18:42 +01:00
|
|
|
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]
|
2021-06-11 13:51:56 +02:00
|
|
|
elif object_id == IMTQ_HANDLER_ID:
|
2021-04-25 17:46:53 +02:00
|
|
|
return handle_imtq_replies(action_id, custom_data)
|
2021-06-11 13:51:56 +02:00
|
|
|
elif object_id == PLOC_ID:
|
2021-04-24 13:27:57 +02:00
|
|
|
return handle_ploc_replies(action_id, custom_data)
|
2021-02-09 12:35:10 +01:00
|
|
|
else:
|
|
|
|
header_list = []
|
|
|
|
content_list = []
|
|
|
|
return header_list, content_list
|
2021-04-25 17:46:53 +02:00
|
|
|
|
|
|
|
|
|
|
|
def handle_imtq_replies(action_id: int, custom_data: bytearray) -> Tuple[list, list]:
|
|
|
|
header_list = []
|
|
|
|
content_list = []
|
2021-04-26 14:56:51 +02:00
|
|
|
if action_id == struct.unpack('!I', ImtqActionIds.get_commanded_dipole)[0]:
|
2021-04-25 17:46:53 +02:00
|
|
|
header_list = ['Commanded X-Dipole', 'Commanded Y-Dipole', 'Commanded Z-Dipole']
|
2021-04-26 14:56:51 +02:00
|
|
|
x_dipole = struct.unpack('!H', custom_data[:2])
|
|
|
|
y_dipole = struct.unpack('!H', custom_data[2:4])
|
|
|
|
z_dipole = struct.unpack('!H', custom_data[4:6])
|
|
|
|
content_list = [x_dipole[0], y_dipole[0], z_dipole[0]]
|
2021-04-26 15:01:22 +02:00
|
|
|
|
|
|
|
|
2021-04-24 13:27:57 +02:00
|
|
|
def handle_ploc_replies(action_id: int, custom_data: bytearray) -> Tuple[list, list]:
|
2021-04-11 11:08:52 +02:00
|
|
|
header_list = []
|
|
|
|
content_list = []
|
2021-04-24 13:27:57 +02:00
|
|
|
if action_id == PlocReplyIds.tm_mem_read_report:
|
|
|
|
header_list = ['PLOC Memory Address', 'PLOC Mem Len', 'PLOC Read Memory Data']
|
|
|
|
content_list = [custom_data[:4], custom_data[4:6], custom_data[6:10]]
|
2021-04-25 17:46:53 +02:00
|
|
|
return header_list, content_list
|