2021-08-16 10:03:40 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
|
|
@file star_tracker.py
|
|
|
|
@brief Star tracker commanding
|
|
|
|
@author J. Meier
|
|
|
|
@date 14.08.2021
|
|
|
|
"""
|
|
|
|
import struct
|
|
|
|
|
|
|
|
from tmtccmd.config.definitions import QueueCommands
|
|
|
|
|
|
|
|
from tmtccmd.tc.packer import TcQueueT
|
2021-10-01 10:55:56 +02:00
|
|
|
from spacepackets.ecss.tc import PusTelecommand
|
2021-12-14 19:25:23 +01:00
|
|
|
from pus_tc.service_200_mode import pack_mode_data
|
2021-08-16 10:03:40 +02:00
|
|
|
|
|
|
|
|
|
|
|
class StarTrackerActionIds:
|
|
|
|
PING = 0
|
2021-12-02 08:01:18 +01:00
|
|
|
BOOT = 1
|
|
|
|
REQ_VERSION = 2
|
|
|
|
REQ_INTERFACE = 3
|
|
|
|
REQ_TIME = 4
|
2022-01-17 08:40:16 +01:00
|
|
|
UNLOCK = 6
|
2021-12-14 19:25:23 +01:00
|
|
|
SWITCH_TO_BOOTLOADER_PROGRAM = 7
|
2022-01-01 11:17:01 +01:00
|
|
|
REQ_POWER = 11
|
|
|
|
TAKE_IMAGE = 15
|
2021-12-06 15:44:34 +01:00
|
|
|
DOWNLOAD_IMAGE = 9
|
|
|
|
UPLOAD_IMAGE = 10
|
2021-12-29 20:33:49 +01:00
|
|
|
DOWNLOAD_CENTROID = 16
|
|
|
|
UPLOAD_CENTROID = 17
|
2021-12-02 08:01:18 +01:00
|
|
|
SUBSCRIBE_TO_TM = 18
|
2022-01-29 18:37:28 +01:00
|
|
|
IMAGE_PROCESSOR = 19
|
2021-12-02 08:01:18 +01:00
|
|
|
REQ_SOLUTION = 24
|
2021-08-16 10:03:40 +02:00
|
|
|
REQ_TEMPERATURE = 25
|
2021-12-17 15:09:25 +01:00
|
|
|
REQ_HISTOGRAM = 28
|
2021-12-19 11:35:16 +01:00
|
|
|
REQ_CONTRAST = 29
|
2021-12-06 15:44:34 +01:00
|
|
|
LIMITS = 40
|
2021-12-13 07:55:34 +01:00
|
|
|
MOUNTING = 41
|
|
|
|
CAMERA = 42
|
|
|
|
BLOB = 43
|
|
|
|
CENTROIDING = 44
|
|
|
|
LISA = 45
|
|
|
|
MATCHING = 46
|
|
|
|
TRACKING = 47
|
|
|
|
VALIDATION = 48
|
|
|
|
ALGO = 49
|
2021-12-19 14:49:22 +01:00
|
|
|
CHECKSUM = 50
|
2021-12-24 07:32:35 +01:00
|
|
|
READ = 51
|
2021-12-19 14:49:22 +01:00
|
|
|
WRITE = 52
|
2021-12-29 20:33:49 +01:00
|
|
|
DOWNLOAD_MATCHED_STAR = 53
|
2022-01-01 11:17:01 +01:00
|
|
|
STOP_STR_HELPER = 55
|
2021-12-13 07:55:34 +01:00
|
|
|
RESET_ERROR = 56
|
|
|
|
CHANGE_DOWNLOAD_IMAGE = 57
|
2021-12-19 14:49:22 +01:00
|
|
|
SET_JSON_FILE_NAME = 58
|
2021-12-24 07:32:35 +01:00
|
|
|
SET_READ_FILENAME = 59
|
2021-12-29 20:33:49 +01:00
|
|
|
SET_TIME = 60
|
|
|
|
DOWNLOAD_DBIMAGE = 61
|
|
|
|
DOWNLOAD_BLOBPIXEL = 62
|
|
|
|
DOWNLOAD_FPGA_IMAGE = 63
|
2021-12-30 12:55:24 +01:00
|
|
|
CHANGE_FPGA_DOWNLOAD_FILE = 64
|
|
|
|
UPLOAD_FPGA_IMAGE = 65
|
|
|
|
FPGA_ACTION = 66
|
2022-01-17 15:28:19 +01:00
|
|
|
REQ_CAMERA_PARAMS = 67
|
|
|
|
REQ_LIMITS = 68
|
|
|
|
REQ_BLOB_PARAMS = 69
|
2021-12-06 15:44:34 +01:00
|
|
|
|
|
|
|
|
|
|
|
class ImagePathDefs:
|
|
|
|
uploadFile = "/mnt/sd0/startracker/gemma.bin"
|
2021-12-13 07:55:34 +01:00
|
|
|
downloadFile = "test_image.bin"
|
|
|
|
downloadPath = "/mnt/sd0/startracker"
|
2022-01-29 18:37:28 +01:00
|
|
|
jsonFile = "/mnt/sd0/startracker/full.json"
|
2021-12-21 17:33:56 +01:00
|
|
|
flashFile = "/mnt/sd0/startracker/flash.bin"
|
2021-12-24 07:32:35 +01:00
|
|
|
flashReadPath = "/mnt/sd0/startracker"
|
2021-12-29 20:33:49 +01:00
|
|
|
uploadCentroidJson = "/mnt/sd0/startracker/upload-centroid.json"
|
|
|
|
downloadFpgaImagePath = "/mnt/sd0/startracker"
|
2021-12-30 12:55:24 +01:00
|
|
|
downloadFpgaImageName = "testname"
|
|
|
|
uploadFpgaImageName = "/mnt/sd0/startracker/fpga-image.bin"
|
2021-12-24 07:32:35 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Region:
|
|
|
|
# Definition according to datasheet (which turned out to be partially faulty)
|
|
|
|
BOOTLOADER = 0
|
|
|
|
STAR_TRACKER_FIRMWARE = 1
|
|
|
|
FREE_1 = 2
|
|
|
|
FREE_2 = 3
|
|
|
|
|
|
|
|
|
|
|
|
class PartitionSize:
|
|
|
|
BOOTLOADER = 128000
|
|
|
|
STAR_TRACKER_FIRMWARE = 896000
|
|
|
|
FREE_1 = 128000
|
|
|
|
FREE_2 = 896000
|
2021-08-16 10:03:40 +02:00
|
|
|
|
|
|
|
|
2022-01-18 14:03:56 +01:00
|
|
|
def pack_star_tracker_commands(
|
|
|
|
object_id: bytearray, tc_queue: TcQueueT, op_code: str
|
|
|
|
) -> TcQueueT:
|
2021-08-16 10:03:40 +02:00
|
|
|
tc_queue.appendleft(
|
2022-01-18 14:03:56 +01:00
|
|
|
(
|
|
|
|
QueueCommands.PRINT,
|
|
|
|
"Generate command for star tracker with object id: 0x" + object_id.hex(),
|
|
|
|
)
|
2021-08-16 10:03:40 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
if op_code == "0":
|
2021-12-14 19:25:23 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mode On"))
|
|
|
|
command = pack_mode_data(object_id, 1, 0)
|
|
|
|
command = PusTelecommand(service=200, subservice=1, ssc=10, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "1":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mode Normal"))
|
|
|
|
command = pack_mode_data(object_id, 2, 0)
|
|
|
|
command = PusTelecommand(service=200, subservice=1, ssc=11, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "2":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mode Off"))
|
|
|
|
command = pack_mode_data(object_id, 0, 0)
|
|
|
|
command = PusTelecommand(service=200, subservice=1, ssc=12, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "3":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mode Raw"))
|
|
|
|
command = pack_mode_data(object_id, 3, 0)
|
|
|
|
command = PusTelecommand(service=200, subservice=1, ssc=13, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "4":
|
2021-08-16 10:03:40 +02:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Ping"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.PING)
|
2021-08-16 10:03:40 +02:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "5":
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Switch to bootloader program")
|
|
|
|
)
|
|
|
|
command = object_id + struct.pack(
|
|
|
|
"!I", StarTrackerActionIds.SWITCH_TO_BOOTLOADER_PROGRAM
|
|
|
|
)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=31, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "6":
|
2021-12-02 08:01:18 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Temperature request"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_TEMPERATURE)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=32, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "7":
|
2021-12-02 08:01:18 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request version"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_VERSION)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=33, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "8":
|
2021-12-02 08:01:18 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request interface"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_INTERFACE)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=34, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "9":
|
2021-12-02 08:01:18 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request power"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_POWER)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=35, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "10":
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Subscribe to telemetry")
|
|
|
|
)
|
2021-12-02 08:01:18 +01:00
|
|
|
tm_id = int(input("Specify Id of tm: "))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.SUBSCRIBE_TO_TM)
|
|
|
|
+ struct.pack("B", tm_id)
|
|
|
|
)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=36, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "11":
|
2021-12-02 08:01:18 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Boot"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.BOOT)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=37, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "12":
|
2021-12-02 08:01:18 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request time"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_TIME)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=38, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "13":
|
2021-12-02 08:01:18 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request solution"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_SOLUTION)
|
2021-12-02 08:01:18 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=39, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "14":
|
2021-12-06 15:44:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Upload image"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_IMAGE)
|
|
|
|
+ bytearray(ImagePathDefs.uploadFile, "utf-8")
|
|
|
|
)
|
2021-12-06 15:44:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=40, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "15":
|
2021-12-06 15:44:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download image"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_IMAGE)
|
|
|
|
+ bytearray(ImagePathDefs.downloadPath, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=53, app_data=command)
|
2021-12-06 15:44:34 +01:00
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "16":
|
2021-12-06 15:44:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set limits"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.LIMITS)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=42, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "17":
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Set tracking parameters")
|
|
|
|
)
|
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.TRACKING)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=43, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "18":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mounting"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.MOUNTING)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=44, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "19":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Camera"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.CAMERA)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "20":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Blob"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.BLOB)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=46, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "21":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Centroiding"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.CENTROIDING)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=47, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "22":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: LISA"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.LISA)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=48, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "23":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Matching"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.MATCHING)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=49, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "24":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Validation"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.VALIDATION)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=50, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "25":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Algo"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.ALGO)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=51, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "26":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Take image"))
|
2021-12-14 19:25:23 +01:00
|
|
|
actionid = int(input("Specify parameter ID (nominal - 4): "))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.TAKE_IMAGE)
|
|
|
|
+ struct.pack("!B", actionid)
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=52, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "27":
|
2022-01-01 11:17:01 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Stop str helper"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.STOP_STR_HELPER)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=54, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "28":
|
2021-12-13 07:55:34 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Reset error signal"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.RESET_ERROR)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=54, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-14 19:25:23 +01:00
|
|
|
if op_code == "29":
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Set name of download image")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
filename = input("Specify download image name: ")
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.CHANGE_DOWNLOAD_IMAGE)
|
|
|
|
+ bytearray(filename, "utf-8")
|
|
|
|
)
|
2021-12-13 07:55:34 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=54, app_data=command)
|
2021-12-06 15:44:34 +01:00
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-17 15:09:25 +01:00
|
|
|
if op_code == "30":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request histogram"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_HISTOGRAM)
|
2021-12-17 15:09:25 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=55, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-19 11:35:16 +01:00
|
|
|
if op_code == "31":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request contrast"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_CONTRAST)
|
2021-12-19 11:35:16 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=56, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-19 14:49:22 +01:00
|
|
|
if op_code == "32":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set json filename"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.SET_JSON_FILE_NAME)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2021-12-19 14:49:22 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=57, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "33":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Write"))
|
|
|
|
command = pack_write_command(object_id)
|
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=58, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-24 07:32:35 +01:00
|
|
|
if op_code == "34":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Read"))
|
|
|
|
command = pack_read_command(object_id)
|
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=59, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "35":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set read filename"))
|
|
|
|
filename = input("Specify filename: ")
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ StarTrackerActionIds.SET_READ_FILENAME
|
|
|
|
+ bytearray(filename, "utf-8")
|
|
|
|
)
|
2021-12-24 07:32:35 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=60, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "36":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Get checksum"))
|
|
|
|
command = pack_checksum_command(object_id)
|
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=61, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-29 20:33:49 +01:00
|
|
|
if op_code == "37":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set time"))
|
|
|
|
unix_time = 1640783543
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.SET_TIME)
|
|
|
|
+ struct.pack("!Q", unix_time)
|
|
|
|
)
|
2021-12-29 20:33:49 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=61, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "38":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download Centroid"))
|
|
|
|
id = 0
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_CENTROID)
|
|
|
|
+ struct.pack("!B", id)
|
|
|
|
)
|
2021-12-29 20:33:49 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=62, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "39":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Upload Centroid"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_CENTROID)
|
|
|
|
+ bytearray(ImagePathDefs.uploadCentroidJson, "utf-8")
|
|
|
|
)
|
2021-12-29 20:33:49 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=63, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "40":
|
2022-01-18 14:03:56 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Download matched star")
|
|
|
|
)
|
2021-12-29 20:33:49 +01:00
|
|
|
id = 0
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_MATCHED_STAR)
|
|
|
|
+ struct.pack("!B", id)
|
|
|
|
)
|
2021-12-29 20:33:49 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=64, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "41":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download DB Image"))
|
|
|
|
id = 0
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_DBIMAGE)
|
|
|
|
+ struct.pack("!B", id)
|
|
|
|
)
|
2021-12-29 20:33:49 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=65, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "42":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download Blob Pixel"))
|
|
|
|
id = 0
|
2022-01-18 14:03:56 +01:00
|
|
|
type = 1 # 0 - normal, 1 - fast
|
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_BLOBPIXEL)
|
|
|
|
+ struct.pack("!B", id)
|
|
|
|
+ struct.pack("!B", type)
|
|
|
|
)
|
2021-12-29 20:33:49 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=65, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "43":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download FPGA Image"))
|
2022-01-17 08:40:16 +01:00
|
|
|
position = int(input("Start position: "))
|
|
|
|
length = int(input("Size to download: "))
|
2022-01-27 16:38:20 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_FPGA_IMAGE)
|
|
|
|
+ struct.pack("!I", position)
|
|
|
|
+ struct.pack("!I", length)
|
|
|
|
+ bytearray(ImagePathDefs.downloadFpgaImagePath, "utf-8")
|
|
|
|
)
|
2021-12-29 20:33:49 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=66, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-30 12:55:24 +01:00
|
|
|
if op_code == "44":
|
2022-01-27 16:38:20 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Change donwload FPGA image file name")
|
|
|
|
)
|
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.CHANGE_FPGA_DOWNLOAD_FILE)
|
|
|
|
+ bytearray(ImagePathDefs.downloadFpgaImageName, "utf-8")
|
|
|
|
)
|
2021-12-30 12:55:24 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=67, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "45":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Upload FPGA image"))
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_FPGA_IMAGE)
|
|
|
|
+ bytearray(ImagePathDefs.uploadFpgaImageName, "utf-8")
|
|
|
|
)
|
2021-12-30 12:55:24 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=68, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "46":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: FPGA action"))
|
|
|
|
id = 3
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.FPGA_ACTION)
|
|
|
|
+ struct.pack("!B", id)
|
|
|
|
)
|
2021-12-30 12:55:24 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=69, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2022-01-29 18:37:28 +01:00
|
|
|
if op_code == "47":
|
2022-01-17 08:40:16 +01:00
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Unlock"))
|
2022-01-27 16:38:20 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.UNLOCK)
|
2022-01-17 08:40:16 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=70, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2022-01-17 15:28:19 +01:00
|
|
|
if op_code == "48":
|
2022-01-27 16:38:20 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Request camera parameters")
|
|
|
|
)
|
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_CAMERA_PARAMS)
|
2022-01-17 15:28:19 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=71, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "49":
|
|
|
|
tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request limits"))
|
2022-01-27 16:38:20 +01:00
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_LIMITS)
|
2022-01-17 15:28:19 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=72, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
|
|
|
if op_code == "50":
|
2022-01-27 16:38:20 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Request blob parameters")
|
|
|
|
)
|
|
|
|
command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_BLOB_PARAMS)
|
2022-01-17 15:28:19 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=73, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2022-01-31 07:40:57 +01:00
|
|
|
if op_code == "51":
|
2022-02-03 16:02:55 +01:00
|
|
|
tc_queue.appendleft(
|
|
|
|
(QueueCommands.PRINT, "Star tracker: Set image processor parameters")
|
|
|
|
)
|
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.IMAGE_PROCESSOR)
|
|
|
|
+ bytearray(ImagePathDefs.jsonFile, "utf-8")
|
|
|
|
)
|
2022-01-29 18:37:28 +01:00
|
|
|
command = PusTelecommand(service=8, subservice=128, ssc=70, app_data=command)
|
|
|
|
tc_queue.appendleft(command.pack_command_tuple())
|
2021-12-19 14:49:22 +01:00
|
|
|
|
|
|
|
|
|
|
|
def pack_write_command(object_id: bytearray) -> bytearray:
|
2021-12-24 07:32:35 +01:00
|
|
|
region = Region.FREE_1
|
2021-12-19 14:49:22 +01:00
|
|
|
address = 0
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.WRITE)
|
|
|
|
+ struct.pack("!B", region)
|
|
|
|
+ struct.pack("!I", address)
|
|
|
|
+ bytearray(ImagePathDefs.flashFile, "utf-8")
|
|
|
|
)
|
2021-12-19 14:49:22 +01:00
|
|
|
return command
|
2021-12-24 07:32:35 +01:00
|
|
|
|
|
|
|
|
|
|
|
def pack_read_command(object_id: bytearray) -> bytearray:
|
|
|
|
region = Region.STAR_TRACKER_FIRMWARE
|
|
|
|
address = 0
|
|
|
|
size = PartitionSize.STAR_TRACKER_FIRMWARE
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.READ)
|
|
|
|
+ struct.pack("!B", region)
|
|
|
|
+ struct.pack("!I", address)
|
|
|
|
+ struct.pack("!I", size)
|
|
|
|
+ bytearray(ImagePathDefs.flashReadPath, "utf-8")
|
|
|
|
)
|
2021-12-24 07:32:35 +01:00
|
|
|
return command
|
|
|
|
|
|
|
|
|
|
|
|
def pack_checksum_command(object_id: bytearray) -> bytearray:
|
|
|
|
region = Region.STAR_TRACKER_FIRMWARE
|
|
|
|
address = 0
|
|
|
|
size = PartitionSize.STAR_TRACKER_FIRMWARE
|
2022-01-18 14:03:56 +01:00
|
|
|
command = (
|
|
|
|
object_id
|
|
|
|
+ struct.pack("!I", StarTrackerActionIds.CHECKSUM)
|
|
|
|
+ struct.pack("!B", region)
|
|
|
|
+ struct.pack("!I", address)
|
|
|
|
+ struct.pack("!I", size)
|
|
|
|
)
|
2021-12-24 07:32:35 +01:00
|
|
|
return command
|