Skip to content
Snippets Groups Projects
Forked from an inaccessible project.
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())