Something went wrong on our end
Forked from an inaccessible project.
-
Robin.Mueller authoredRobin.Mueller authored
obsw_image_handler.py 2.55 KiB
from typing import Union
from tmtc_core.tc.obsw_pus_tc_base import PusTelecommand, Deque
from tc.obsw_tc_service8 import make_action_id
from tc.obsw_tc_service20 import pack_boolean_parameter_setting
from tmtc_core.utility.obsw_logger import get_logger
from config.obsw_config import SW_IMAGE_HANDLER_ID
LOGGER = get_logger()
def generate_copy_bl_sdc_to_flash_packet(ssc: int, from_fram: bool = False,
object_id: bytearray = SW_IMAGE_HANDLER_ID):
app_data = bytearray(object_id)
app_data += make_action_id(11)
app_data.append(from_fram)
return PusTelecommand(service=8, subservice=128, ssc=ssc, app_data=app_data)
# Slot values: 0 -> Slot 0, 1 -> Slot 1, 2 -> Update Slot
def generate_copy_obsw_sdc_to_flash_packet(ssc: int, slot: int,
object_id: bytearray = SW_IMAGE_HANDLER_ID):
app_data = bytearray(object_id)
app_data += make_action_id(4)
app_data.append(slot)
return PusTelecommand(service=8, subservice=128, ssc=ssc, app_data=app_data)
def generate_param_packet_hamming_from_sdcard(enable: bool, ssc: int,
object_id: bytearray = SW_IMAGE_HANDLER_ID):
return pack_boolean_parameter_setting(object_id=object_id, domain_id=0, unique_id=0,
parameter=enable, ssc=ssc)
def generate_img_handler_packet(service_queue: Deque, op_code: Union[int, str]):
# Action ID 4 (Copy SDC to Flash, Software Update Image)
if op_code == "A4U":
service_queue.appendleft(("print", "Generating command to copy SDC OBSW to flash."))
command = generate_copy_obsw_sdc_to_flash_packet(ssc=0, slot=2)
service_queue.appendleft(command.pack_command_tuple())
# Action ID 11 (Copy bootloader from SDC to flash
elif op_code == "A11S":
service_queue.appendleft(("print", "Generating command to copy SDC bootloader to flash."))
command = generate_copy_bl_sdc_to_flash_packet(0)
service_queue.appendleft(command.pack_command_tuple())
elif op_code == "P0":
service_queue.appendleft(("print", "Configuring hamming code to be taken from SD card"))
command = generate_param_packet_hamming_from_sdcard(enable=True, ssc=0)
service_queue.appendleft(command.pack_command_tuple())
elif op_code == "P1":
service_queue.appendleft(("print", "Configuring hamming code to be taken from FRAM"))
command = generate_param_packet_hamming_from_sdcard(enable=False, ssc=0)
service_queue.appendleft(command.pack_command_tuple())