2021-08-03 15:28:28 +02:00
|
|
|
import enum
|
|
|
|
|
|
|
|
from tmtccmd.config.definitions import QueueCommands
|
|
|
|
from tmtccmd.tc.definitions import TcQueueT
|
|
|
|
from tmtccmd.tc.service_8_functional_cmd import generate_action_command
|
|
|
|
from tmtccmd.utility.logger import get_console_logger
|
|
|
|
from config.object_ids import CORE_CONTROLLER_ID
|
|
|
|
|
|
|
|
LOGGER = get_console_logger()
|
|
|
|
|
|
|
|
|
|
|
|
class ActionIds(enum.IntEnum):
|
|
|
|
REBOOT = 32
|
|
|
|
|
|
|
|
|
|
|
|
class OpCodes(enum.Enum):
|
2022-01-18 14:03:56 +01:00
|
|
|
REBOOT = "reboot"
|
|
|
|
REBOOT_SELF = "reboot_self"
|
|
|
|
REBOOT_0_0 = "reboot_0_0"
|
|
|
|
REBOOT_0_1 = "reboot_0_1"
|
|
|
|
REBOOT_1_0 = "reboot_1_0"
|
|
|
|
REBOOT_1_1 = "reboot_1_1"
|
2021-08-03 15:28:28 +02:00
|
|
|
|
|
|
|
|
|
|
|
class Chip(enum.IntEnum):
|
|
|
|
CHIP_0 = 0
|
|
|
|
CHIP_1 = 1
|
|
|
|
NONE = 2
|
|
|
|
|
|
|
|
|
|
|
|
class Copy(enum.IntEnum):
|
|
|
|
COPY_0_NOM = 0
|
|
|
|
COPY_1_GOLD = 1
|
|
|
|
NONE = 2
|
|
|
|
|
|
|
|
|
|
|
|
def pack_core_commands(tc_queue: TcQueueT, op_code: str):
|
|
|
|
if op_code == OpCodes.REBOOT.value:
|
|
|
|
reboot_self, chip_select, copy_select = determine_reboot_params()
|
|
|
|
perform_reboot_cmd(
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue=tc_queue,
|
|
|
|
reboot_self=reboot_self,
|
|
|
|
chip=chip_select,
|
|
|
|
copy=copy_select,
|
2021-08-03 15:28:28 +02:00
|
|
|
)
|
|
|
|
elif op_code == OpCodes.REBOOT_SELF.value:
|
|
|
|
perform_reboot_cmd(tc_queue=tc_queue, reboot_self=True)
|
|
|
|
elif op_code == OpCodes.REBOOT_0_0.value:
|
|
|
|
perform_reboot_cmd(
|
|
|
|
tc_queue=tc_queue, reboot_self=False, chip=Chip.CHIP_0, copy=Copy.COPY_0_NOM
|
|
|
|
)
|
|
|
|
elif op_code == OpCodes.REBOOT_0_1.value:
|
|
|
|
perform_reboot_cmd(
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue=tc_queue,
|
|
|
|
reboot_self=False,
|
|
|
|
chip=Chip.CHIP_0,
|
|
|
|
copy=Copy.COPY_1_GOLD,
|
2021-08-03 15:28:28 +02:00
|
|
|
)
|
|
|
|
elif op_code == OpCodes.REBOOT_1_0.value:
|
|
|
|
perform_reboot_cmd(
|
|
|
|
tc_queue=tc_queue, reboot_self=False, chip=Chip.CHIP_1, copy=Copy.COPY_0_NOM
|
|
|
|
)
|
|
|
|
elif op_code == OpCodes.REBOOT_1_1.value:
|
|
|
|
perform_reboot_cmd(
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue=tc_queue,
|
|
|
|
reboot_self=False,
|
|
|
|
chip=Chip.CHIP_1,
|
|
|
|
copy=Copy.COPY_1_GOLD,
|
2021-08-03 15:28:28 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def determine_reboot_params() -> (bool, Chip, Copy):
|
|
|
|
chip_select = -1
|
|
|
|
copy_select = -1
|
2022-01-18 14:03:56 +01:00
|
|
|
reboot_self = input("Reboot self? [y/n]: ")
|
|
|
|
if reboot_self in ["y", "yes", "1"]:
|
|
|
|
LOGGER.info("Rebooting currently running image")
|
2021-08-03 15:28:28 +02:00
|
|
|
return True, chip_select, copy_select
|
2022-01-18 14:03:56 +01:00
|
|
|
LOGGER.info("Rebooting image specified by chip and copy")
|
2021-08-03 15:28:28 +02:00
|
|
|
while True:
|
2022-01-18 14:03:56 +01:00
|
|
|
chip_select = input("Chip select [0/1]: ")
|
|
|
|
if chip_select in ["0", "1"]:
|
|
|
|
if chip_select == "0":
|
2021-08-03 15:28:28 +02:00
|
|
|
chip_select = Chip.CHIP_0
|
|
|
|
else:
|
|
|
|
chip_select = Chip.CHIP_1
|
|
|
|
break
|
|
|
|
else:
|
2022-01-18 14:03:56 +01:00
|
|
|
LOGGER.warning("Invalid chip select value. Try again")
|
2021-08-03 15:28:28 +02:00
|
|
|
while True:
|
2022-01-18 14:03:56 +01:00
|
|
|
copy_select = input("Copy select [0/1]: ")
|
|
|
|
if copy_select in ["0", "1"]:
|
|
|
|
if copy_select == "0":
|
2021-08-03 15:28:28 +02:00
|
|
|
copy_select = Copy.COPY_0_NOM
|
|
|
|
else:
|
|
|
|
copy_select = Copy.COPY_1_GOLD
|
|
|
|
break
|
|
|
|
else:
|
2022-01-18 14:03:56 +01:00
|
|
|
LOGGER.warning("Invalid copy select value. Try again")
|
2021-08-03 15:28:28 +02:00
|
|
|
return False, chip_select, copy_select
|
|
|
|
|
|
|
|
|
|
|
|
def perform_reboot_cmd(
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue: TcQueueT,
|
|
|
|
reboot_self: bool,
|
|
|
|
chip: Chip = Chip.NONE,
|
|
|
|
copy: Copy = Copy.NONE,
|
2021-08-03 15:28:28 +02:00
|
|
|
):
|
|
|
|
tc_data = bytearray()
|
|
|
|
if reboot_self:
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Packing reboot command for current image")
|
|
|
|
)
|
2021-08-03 15:28:28 +02:00
|
|
|
tc_data.append(True)
|
|
|
|
else:
|
|
|
|
tc_data.append(False)
|
|
|
|
tc_data.append(chip)
|
|
|
|
tc_data.append(copy)
|
|
|
|
tc_queue.append(
|
2022-01-18 14:03:56 +01:00
|
|
|
(
|
|
|
|
QueueCommands.PRINT,
|
|
|
|
f"Packing reboot command for chip {chip} and copy {copy}",
|
|
|
|
)
|
2021-08-03 15:28:28 +02:00
|
|
|
)
|
|
|
|
action_cmd = generate_action_command(
|
2022-01-18 14:03:56 +01:00
|
|
|
object_id=CORE_CONTROLLER_ID,
|
|
|
|
action_id=ActionIds.REBOOT,
|
|
|
|
app_data=tc_data,
|
|
|
|
ssc=0,
|
2021-08-03 15:28:28 +02:00
|
|
|
)
|
|
|
|
tc_queue.appendleft(action_cmd.pack_command_tuple())
|