Compare commits
6 Commits
v1.5.0
...
3e466f06ef
Author | SHA1 | Date | |
---|---|---|---|
3e466f06ef | |||
934b79a2f1 | |||
5fe23be649 | |||
85f5bf2e6e | |||
f40b70f66e | |||
80ee42089e |
@ -15,3 +15,4 @@ class CustomServiceList(enum.Enum):
|
||||
TMP1075_1 = "tmp1075_1"
|
||||
TMP1075_2 = "tmp1075_2"
|
||||
HEATER = "heater"
|
||||
IMTQ = "imtq"
|
||||
|
@ -18,6 +18,7 @@ TMP_1075_2_HANDLER_ID = bytearray([0x44, 0x00, 0x00, 0x6])
|
||||
HEATER_ID = bytearray([0x54, 0x00, 0x00, 0x1])
|
||||
PCDU_HANDLER_ID = bytearray([0x44, 0x00, 0x10, 0x00])
|
||||
SOLAR_ARRAY_DEPLOYMENT_ID = bytearray([0x44, 0x00, 0x10, 0x01])
|
||||
IMTQ_HANDLER_ID = bytearray([0x44, 0x00, 0x10, 0x14])
|
||||
|
||||
|
||||
class ObjIdIds(enum.IntEnum):
|
||||
@ -32,6 +33,7 @@ class ObjIdIds(enum.IntEnum):
|
||||
TMP1075_2_HANDLER_ID = 8
|
||||
HEATER_ID = 9
|
||||
SOLAR_ARRAY_DEPLOYMENT_ID = 10
|
||||
IMTQ_HANDLER_ID = 11
|
||||
|
||||
|
||||
def set_object_ids() -> Dict[int, bytearray]:
|
||||
@ -47,5 +49,6 @@ def set_object_ids() -> Dict[int, bytearray]:
|
||||
ObjIdIds.HEATER_ID: HEATER_ID,
|
||||
ObjIdIds.PCDU_HANDLER_ID: PCDU_HANDLER_ID,
|
||||
ObjIdIds.SOLAR_ARRAY_DEPLOYMENT_ID: SOLAR_ARRAY_DEPLOYMENT_ID,
|
||||
ObjIdIds.IMTQ_HANDLER_ID: IMTQ_HANDLER_ID,
|
||||
})
|
||||
return object_id_dict
|
||||
|
@ -6,6 +6,11 @@ class PDUConfigTable:
|
||||
out_en_1 = TableEntry(bytearray([0x00, 0x49]), TableEntry.uint8_size)
|
||||
out_en_2 = TableEntry(bytearray([0x00, 0x4A]), TableEntry.uint8_size)
|
||||
out_en_3 = TableEntry(bytearray([0x00, 0x4B]), TableEntry.uint8_size)
|
||||
out_en_4 = TableEntry(bytearray([0x00, 0x4C]), TableEntry.uint8_size)
|
||||
out_en_5 = TableEntry(bytearray([0x00, 0x4D]), TableEntry.uint8_size)
|
||||
out_en_6 = TableEntry(bytearray([0x00, 0x4E]), TableEntry.uint8_size)
|
||||
out_en_7 = TableEntry(bytearray([0x00, 0x4F]), TableEntry.uint8_size)
|
||||
out_en_8 = TableEntry(bytearray([0x00, 0x50]), TableEntry.uint8_size)
|
||||
# When channel consumes more than cur_lu_lim, channel is turned of immediately
|
||||
cur_lu_lim_0 = TableEntry(bytearray([0x00, 0xB8]), TableEntry.uint16_size)
|
||||
|
||||
|
58
pus_tc/imtq.py
Normal file
58
pus_tc/imtq.py
Normal file
@ -0,0 +1,58 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
@file imtq.py
|
||||
@brief Tests for the ISIS IMTQ (Magnettorquer) device handler
|
||||
@author J. Meier
|
||||
@date 25.03.2021
|
||||
"""
|
||||
from tmtccmd.core.definitions import QueueCommands
|
||||
|
||||
from tmtccmd.pus_tc.packer import TcQueueT
|
||||
from tmtccmd.pus_tc.base import PusTelecommand
|
||||
|
||||
|
||||
class ImtqTestProcedure:
|
||||
"""
|
||||
@brief Use this class to define the tests to perform for the IMTQ Handler.
|
||||
@details Setting all to True will run all tests.
|
||||
Setting all to False will only run the tests set to True.
|
||||
"""
|
||||
all = False
|
||||
command_dipole = True
|
||||
|
||||
|
||||
class ImtqActionIds:
|
||||
start_actuation_dipole = bytearray([0x0, 0x0, 0x0, 0x02])
|
||||
|
||||
|
||||
def pack_imtq_test_into(object_id: bytearray, tc_queue: TcQueueT) -> TcQueueT:
|
||||
tc_queue.appendleft(
|
||||
(QueueCommands.PRINT,
|
||||
"Testing ISIS IMTQ handler with object id: 0x" + object_id.hex())
|
||||
)
|
||||
|
||||
if ImtqTestProcedure.all or ImtqTestProcedure.command_dipole:
|
||||
tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Commanding dipole"))
|
||||
command = object_id + ImtqActionIds.start_adc_conversion
|
||||
command = PusTelecommand(service=8, subservice=128, ssc=20, app_data=command)
|
||||
tc_queue.appendleft(command.pack_command_tuple())
|
||||
|
||||
|
||||
def pack_dipole_command(object_id: bytearray, x_dipole: int, y_dipole: int, z_dipole: int, duration: int) -> bytearray:
|
||||
""" This function packs the command causing the ISIS IMTQ to generate a dipole.
|
||||
@param object_id The object id of the gomspace device handler.
|
||||
@param x_dipole The dipole of the x coil in 10^-4*Am^2 (max. 2000)
|
||||
@param y_dipole The dipole of the y coil in 10^-4*Am^2 (max. 2000)
|
||||
@param z_dipole The dipole of the z coil in 10^-4*Am^2 (max. 2000)
|
||||
@param duration The duration in milliseconds the dipole will be generated by the coils.
|
||||
When set to 0, the dipole will be generated until a new dipole actuation
|
||||
command is sent.
|
||||
"""
|
||||
action_id = ImtqActionIds.start_actuation_dipole
|
||||
command = bytearray()
|
||||
command = object_id + action_id
|
||||
command.extend(x_dipole.to_bytes(length=2, byteorder='big'))
|
||||
command.extend(y_dipole.to_bytes(length=2, byteorder='big'))
|
||||
command.extend(z_dipole.to_bytes(length=2, byteorder='big'))
|
||||
command.extend(duration.to_bytes(length=2, byteorder='big'))
|
||||
return command
|
@ -24,6 +24,10 @@ class PDU1TestProcedure:
|
||||
reboot = False
|
||||
ping = False
|
||||
read_temperature = False
|
||||
turn_channel_2_on = False # Star Tracker connected to this channel (5V)
|
||||
turn_channel_2_off = False
|
||||
turn_channel_3_on = False # MTQ connected to this channel (5V)
|
||||
turn_channel_3_off = True
|
||||
|
||||
|
||||
def pack_pdu1_test_into(
|
||||
@ -31,14 +35,6 @@ def pack_pdu1_test_into(
|
||||
):
|
||||
tc_queue.appendleft((QueueCommands.PRINT, "Testing PDU1"))
|
||||
|
||||
tc_queue.appendleft((QueueCommands.PRINT, "P60 Dock: Enabling PDU1"))
|
||||
command = pack_set_param_command(
|
||||
p60dock_object_id, P60DockConfigTable.out_en_1.parameter_address,
|
||||
P60DockConfigTable.out_en_1.parameter_size, Channel.on
|
||||
)
|
||||
command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
|
||||
tc_queue.appendleft(command.pack_command_tuple())
|
||||
|
||||
if PDU1TestProcedure.all or PDU1TestProcedure.ping:
|
||||
tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Ping Test"))
|
||||
ping_data = bytearray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
|
||||
@ -53,3 +49,27 @@ def pack_pdu1_test_into(
|
||||
)
|
||||
command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
|
||||
tc_queue.appendleft(command.pack_command_tuple())
|
||||
if PDU1TestProcedure.all or PDU1TestProcedure.turn_channel_2_on:
|
||||
tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn channel 2 on (Star Tracker)"))
|
||||
command = pack_set_param_command(pdu1_object_id, PDUConfigTable.out_en_2.parameter_address,
|
||||
PDUConfigTable.out_en_2.parameter_size, Channel.on)
|
||||
command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
|
||||
tc_queue.appendleft(command.pack_command_tuple())
|
||||
if PDU1TestProcedure.all or PDU1TestProcedure.turn_channel_2_off:
|
||||
tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn channel 2 off (Star Tracker)"))
|
||||
command = pack_set_param_command(pdu1_object_id, PDUConfigTable.out_en_2.parameter_address,
|
||||
PDUConfigTable.out_en_2.parameter_size, Channel.off)
|
||||
command = PusTelecommand(service=8, subservice=128, ssc=31, app_data=command)
|
||||
tc_queue.appendleft(command.pack_command_tuple())
|
||||
if PDU1TestProcedure.all or PDU1TestProcedure.turn_channel_3_on:
|
||||
tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn channel 3 on (MTQ)"))
|
||||
command = pack_set_param_command(pdu1_object_id, PDUConfigTable.out_en_3.parameter_address,
|
||||
PDUConfigTable.out_en_3.parameter_size, Channel.on)
|
||||
command = PusTelecommand(service=8, subservice=128, ssc=32, app_data=command)
|
||||
tc_queue.appendleft(command.pack_command_tuple())
|
||||
if PDU1TestProcedure.all or PDU1TestProcedure.turn_channel_3_off:
|
||||
tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn channel 3 off (MTQ)"))
|
||||
command = pack_set_param_command(pdu1_object_id, PDUConfigTable.out_en_3.parameter_address,
|
||||
PDUConfigTable.out_en_3.parameter_size, Channel.off)
|
||||
command = PusTelecommand(service=8, subservice=128, ssc=33, app_data=command)
|
||||
tc_queue.appendleft(command.pack_command_tuple())
|
||||
|
@ -101,4 +101,5 @@ def pack_pdu2_test_into(pdu2_object_id: bytearray, p60dock_object_id: bytearray,
|
||||
command = pack_request_full_hk_table_command(pdu2_object_id)
|
||||
command = PusTelecommand(service=8, subservice=128, ssc=28, app_data=command)
|
||||
tc_queue.appendleft(command.pack_command_tuple())
|
||||
|
||||
return tc_queue
|
||||
|
@ -19,6 +19,7 @@ from pus_tc.p60dock import pack_p60dock_test_into
|
||||
from pus_tc.pdu2 import pack_pdu2_test_into
|
||||
from pus_tc.pdu1 import pack_pdu1_test_into
|
||||
from pus_tc.acu import pack_acu_test_into
|
||||
from pus_tc.imtq import pack_imtq_test_into
|
||||
from pus_tc.tmp1075 import pack_tmp1075_test_into
|
||||
from pus_tc.heater import pack_heater_test_into
|
||||
from config.definitions import CustomServiceList
|
||||
@ -54,8 +55,11 @@ def pack_service_queue_user(service: Union[str, int], op_code: str, service_queu
|
||||
object_id = get_object_id(ObjIdIds.TMP1075_2_HANDLER_ID)
|
||||
return pack_tmp1075_test_into(object_id, service_queue)
|
||||
if service == CustomServiceList.HEATER.value:
|
||||
object_id = get_object_id(ObjIdIds.HEATER)
|
||||
object_id = get_object_id(ObjIdIds.HEATER_ID)
|
||||
return pack_heater_test_into(object_id, service_queue)
|
||||
if service == CustomServiceList.IMTQ.value:
|
||||
object_id = get_object_id(ObjIdIds.IMTQ_HANDLER_ID)
|
||||
return pack_imtq_test_into(object_id, service_queue)
|
||||
LOGGER.warning("Invalid Service !")
|
||||
|
||||
|
||||
|
1
tmtc_core
Submodule
1
tmtc_core
Submodule
Submodule tmtc_core added at bd46c5a852
Reference in New Issue
Block a user