eive-tmtc/eive_tmtc/tmtc/tcs/tm.py

129 lines
5.2 KiB
Python
Raw Normal View History

2023-02-21 02:28:32 +01:00
import logging
2022-09-29 17:41:37 +02:00
import pprint
2022-05-19 13:20:22 +02:00
import struct
2022-11-29 16:53:29 +01:00
from eive_tmtc.pus_tm.defs import PrintWrapper
2023-02-21 02:28:32 +01:00
from tmtccmd.fsfw import validity_buffer_list
2022-07-08 16:25:46 +02:00
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
2023-01-31 15:41:51 +01:00
from .defs import CtrlSetId
2023-02-21 02:28:32 +01:00
from .heater import HEATER_LOCATION
_LOGGER = logging.getLogger(__name__)
2022-06-01 11:59:45 +02:00
2022-05-19 13:20:22 +02:00
def handle_thermal_controller_hk_data(
2022-07-05 02:12:54 +02:00
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
2022-05-19 13:20:22 +02:00
):
2022-09-29 17:41:37 +02:00
# need a better solutuon for this is this is used again..
"""
if TCP_TEMP_SENS_SERVER is None:
TCP_TEMP_SENS_SERVER = TmTcpServer("localhost", 7305)
if TCP_TEMP_DEV_SERVER:
TCP_TEMP_DEV_SERVER = TmTcpServer("localhost", 7306)
"""
2023-01-31 15:41:51 +01:00
if set_id == CtrlSetId.PRIMARY_SENSORS:
2022-05-19 13:20:22 +02:00
pw = PrintWrapper(printer)
2022-06-01 10:47:57 +02:00
pw.dlog("Received sensor temperature data")
2022-05-19 13:20:22 +02:00
# get all the floats
2023-02-21 02:28:32 +01:00
fmt_str = "!fffffffffffffffffffff"
fmt_len = struct.calcsize(fmt_str)
tm_data = struct.unpack(fmt_str, hk_data[:fmt_len])
valid_list = validity_buffer_list(hk_data[fmt_len:], 21)
2022-07-04 15:22:53 +02:00
parsed_data = {
"SENSOR_PLOC_HEATSPREADER": tm_data[0],
"SENSOR_PLOC_MISSIONBOARD": tm_data[1],
"SENSOR_4K_CAMERA": tm_data[2],
"SENSOR_DAC_HEATSPREADER": tm_data[3],
"SENSOR_STARTRACKER": tm_data[4],
"SENSOR_RW1": tm_data[5],
"SENSOR_DRO": tm_data[6],
"SENSOR_SCEX": tm_data[7],
"SENSOR_X8": tm_data[8],
"SENSOR_HPA": tm_data[9],
"SENSOR_TX_MODUL": tm_data[10],
"SENSOR_MPA": tm_data[11],
"SENSOR_ACU": tm_data[12],
"SENSOR_PLPCDU_HEATSPREADER": tm_data[13],
"SENSOR_TCS_BOARD": tm_data[14],
"SENSOR_MAGNETTORQUER": tm_data[15],
2022-12-02 16:16:19 +01:00
"TMP1075 TCS 0": tm_data[16],
"TMP1075 TCS 1": tm_data[17],
"TMP1075 PL PCDU 0": tm_data[18],
"TMP1075 PL PCDU 1": tm_data[19],
"TMP1075 IF BOARD": tm_data[20],
2022-07-04 15:22:53 +02:00
}
2023-02-21 02:28:32 +01:00
for idx, (k, v) in enumerate(parsed_data.items()):
print(f"{str(k).ljust(30)}: Valid: {valid_list[idx]}, Value: {v}")
2023-01-31 15:41:51 +01:00
elif set_id == CtrlSetId.DEVICE_SENSORS:
2022-06-01 10:47:57 +02:00
pw = PrintWrapper(printer)
pw.dlog("Received device temperature data")
fmt_str = "!fhhhhiiiifffhffffffffffffff"
2023-02-21 14:29:40 +01:00
fmt_len = struct.calcsize(fmt_str)
tm_data = struct.unpack(fmt_str, hk_data[:98])
2023-02-21 14:29:40 +01:00
valid_list = validity_buffer_list(hk_data[fmt_len:], 25)
2022-06-01 10:47:57 +02:00
parsed_data = {
"Q7S_TEMPERATURE": tm_data[0],
"BATTERY_TEMPERATURE_1": tm_data[1],
"BATTERY_TEMPERATURE_2": tm_data[2],
"BATTERY_TEMPERATURE_3": tm_data[3],
"BATTERY_TEMPERATURE_4": tm_data[4],
"RW_1_TEMPERATURE": tm_data[5],
"RW_2_TEMPERATURE": tm_data[6],
"RW_3_TEMPERATURE": tm_data[7],
"RW_4_TEMPERATURE": tm_data[8],
"STARTRACKER_TEMPERATURE": tm_data[9],
"SYRLINKS_POWER_AMPLIFIER_TEMPERATURE": tm_data[10],
"SYRLINKS_BASEBAND_BOARD_TEMPERATURE": tm_data[11],
"MGT_TEMPERATURE": tm_data[12],
2023-02-21 14:29:40 +01:00
"ACU_TEMPERATURES": (tm_data[13], tm_data[14], tm_data[15]),
2022-06-01 10:47:57 +02:00
"PDU1_TEMPERATURE": tm_data[16],
"PDU2_TEMPERATURE": tm_data[17],
"P60DOCK_TEMPERATURE_1": tm_data[18],
"P60DOCK_TEMPERATURE_2": tm_data[19],
"GYRO_0_TEMPERATURE": tm_data[20],
"GYRO_1_TEMPERATURE": tm_data[21],
"GYRO_2_TEMPERATURE": tm_data[22],
"GYRO_3_TEMPERATURE": tm_data[23],
2023-02-21 14:29:40 +01:00
"MGM_0_LIS3_TEMPERATURE": tm_data[24],
"MGM_2_LIS3_TEMPERATURE": tm_data[25],
2022-06-01 10:47:57 +02:00
"ADC_PL_PCDU_TEMPERATURE": tm_data[26],
}
2023-02-21 14:29:40 +01:00
for idx, (k, v) in enumerate(parsed_data.items()):
print(f"{str(k).ljust(30)}: Valid: {valid_list[idx]}, Value: {v}")
2023-01-31 15:41:51 +01:00
elif set_id == CtrlSetId.SUS_TEMP_SENSORS:
2023-01-18 16:30:11 +01:00
pw = PrintWrapper(printer)
pw.dlog("Received SUS temperature data")
2023-02-21 14:29:40 +01:00
fmt_str = "!ffffffffffff"
fmt_len = struct.calcsize(fmt_str)
tm_data = struct.unpack(fmt_str, hk_data[: 12 * 4])
valid_list = validity_buffer_list(hk_data[fmt_len:], 12)
2023-01-18 16:30:11 +01:00
parsed_data = {
"SUS_0": tm_data[0],
"SUS_1": tm_data[1],
"SUS_2": tm_data[2],
"SUS_3": tm_data[3],
"SUS_4": tm_data[4],
"SUS_5": tm_data[5],
"SUS_6": tm_data[6],
"SUS_7": tm_data[7],
"SUS_8": tm_data[8],
"SUS_9": tm_data[9],
"SUS_10": tm_data[10],
"SUS_11": tm_data[11],
}
2023-02-21 14:29:40 +01:00
for idx, (k, v) in enumerate(parsed_data.items()):
print(f"{str(k).ljust(30)}: Valid: {valid_list[idx]}, Value: {v}")
2023-02-21 02:28:32 +01:00
elif set_id == CtrlSetId.HEATER_INFO:
print("Heater Switch States")
for i in range(8):
print(
f"{HEATER_LOCATION[i].ljust(25)}: {'On' if hk_data[i] == 1 else 'Off'}"
)
current_draw = struct.unpack("!H", hk_data[8:10])[0]
print(f"Heater Power Channel Current Draw: {current_draw} mA")
else:
_LOGGER.warning(f"Unimplemented set ID {set_id}")