Compare commits

..

2 Commits

Author SHA1 Message Date
7310513805 Merge branch 'develop' into meier/plocHandler 2021-04-11 11:09:22 +02:00
aa52ed79ea plocHandler test wip 2021-04-11 11:08:52 +02:00
10 changed files with 92 additions and 5 deletions

View File

@@ -15,3 +15,4 @@ class CustomServiceList(enum.Enum):
TMP1075_1 = "tmp1075_1" TMP1075_1 = "tmp1075_1"
TMP1075_2 = "tmp1075_2" TMP1075_2 = "tmp1075_2"
HEATER = "heater" HEATER = "heater"
PLOC = "ploc"

View File

@@ -18,6 +18,7 @@ TMP_1075_2_HANDLER_ID = bytearray([0x44, 0x00, 0x00, 0x6])
HEATER_ID = bytearray([0x54, 0x00, 0x00, 0x1]) HEATER_ID = bytearray([0x54, 0x00, 0x00, 0x1])
PCDU_HANDLER_ID = bytearray([0x44, 0x00, 0x10, 0x00]) PCDU_HANDLER_ID = bytearray([0x44, 0x00, 0x10, 0x00])
SOLAR_ARRAY_DEPLOYMENT_ID = bytearray([0x44, 0x00, 0x10, 0x01]) SOLAR_ARRAY_DEPLOYMENT_ID = bytearray([0x44, 0x00, 0x10, 0x01])
PLOC_ID = bytearray([0x44, 0x00, 0x00, 0x15])
class ObjIdIds(enum.IntEnum): class ObjIdIds(enum.IntEnum):
@@ -32,6 +33,7 @@ class ObjIdIds(enum.IntEnum):
TMP1075_2_HANDLER_ID = 8 TMP1075_2_HANDLER_ID = 8
HEATER_ID = 9 HEATER_ID = 9
SOLAR_ARRAY_DEPLOYMENT_ID = 10 SOLAR_ARRAY_DEPLOYMENT_ID = 10
PLOC_ID = 11
def set_object_ids() -> Dict[int, bytearray]: def set_object_ids() -> Dict[int, bytearray]:
@@ -47,5 +49,6 @@ def set_object_ids() -> Dict[int, bytearray]:
ObjIdIds.HEATER_ID: HEATER_ID, ObjIdIds.HEATER_ID: HEATER_ID,
ObjIdIds.PCDU_HANDLER_ID: PCDU_HANDLER_ID, ObjIdIds.PCDU_HANDLER_ID: PCDU_HANDLER_ID,
ObjIdIds.SOLAR_ARRAY_DEPLOYMENT_ID: SOLAR_ARRAY_DEPLOYMENT_ID, ObjIdIds.SOLAR_ARRAY_DEPLOYMENT_ID: SOLAR_ARRAY_DEPLOYMENT_ID,
ObjIdIds.PLOC_ID: PLOC_ID,
}) })
return object_id_dict return object_id_dict

View File

@@ -1,4 +1,4 @@
SW_NAME = "eive" SW_NAME = "eive"
VERSION_MAJOR = 1 VERSION_MAJOR = 1
VERSION_MINOR = 4 VERSION_MINOR = 3
VERSION_SUBMINOR = 0 VERSION_SUBMINOR = 0

64
pus_tc/ploc.py Normal file
View File

@@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
"""
@file ploc.py
@brief TMP1075 tests
@author J. Meier
@date 06.01.2021
"""
import struct
from tmtccmd.core.definitions import QueueCommands
from tmtccmd.pus_tc.packer import TcQueueT
from tmtccmd.pus_tc.base import PusTelecommand
class PlocTestProcedure:
"""
@brief Use this class to define the tests to perform for the PLOC.
@details Setting all to True will run all tests.
Setting all to False will only run the tests set to True.
"""
all = False
test_tc_mem_write = False
test_tc_mem_read = True
class PlocActionIds:
tc_mem_write = bytearray([0x0, 0x0, 0x7, 0x14])
tc_mem_read = bytearray([0x0, 0x0, 0x7, 0x15])
def pack_ploc_test_into(object_id: bytearray, tc_queue: TcQueueT) -> TcQueueT:
tc_queue.appendleft(
(QueueCommands.PRINT,
"Testing PLOC Handler with object id: 0x" + object_id.hex())
)
if PlocTestProcedure.all or PlocTestProcedure.test_tc_mem_write:
tc_queue.appendleft((QueueCommands.PRINT, "PLOC: TC Mem Write Test"))
command = generateWriteMemCommand(object_id)
memory_address = int(input("Type memory address: 0x"), 16)
memory_data = int(input("Type memory data: 0x"), 16)
command = generateWriteMemCommand(object_id, struct.pack('I', memory_address), memory_data)
command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if PlocTestProcedure.all or PlocTestProcedure.test_tc_mem_write:
tc_queue.appendleft((QueueCommands.PRINT, "PLOC: TC Mem Read Test"))
memory_address = int(input("Type memory address: 0x"), 16)
command = object_id + PlocActionIds.tc_mem_read + struct.pack('I', memory_address)
command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
return tc_queue
def generateWriteMemCommand(object_id: bytearray, memory_address: bytearray, memory_data: int) -> bytearray:
""" This function generates the command to write to a memory address within the PLOC
@param object_id The object id of the PlocHandler
@param memory_address The PLOC memory address where to write to.
@param memory_data The data to write to the memory address specified by the bytearray memory_address.
"""
command = object_id + PlocActionIds.tc_mem_write + memory_address + struct.pack('I', memory_data)
return command

View File

@@ -20,6 +20,7 @@ from pus_tc.pdu2 import pack_pdu2_test_into
from pus_tc.pdu1 import pack_pdu1_test_into from pus_tc.pdu1 import pack_pdu1_test_into
from pus_tc.acu import pack_acu_test_into from pus_tc.acu import pack_acu_test_into
from pus_tc.tmp1075 import pack_tmp1075_test_into from pus_tc.tmp1075 import pack_tmp1075_test_into
from pus_tc.ploc import pack_ploc_test_into
from pus_tc.heater import pack_heater_test_into from pus_tc.heater import pack_heater_test_into
from config.definitions import CustomServiceList from config.definitions import CustomServiceList
from config.object_ids import ObjIdIds from config.object_ids import ObjIdIds
@@ -56,6 +57,9 @@ def pack_service_queue_user(service: Union[str, int], op_code: str, service_queu
if service == CustomServiceList.HEATER.value: if service == CustomServiceList.HEATER.value:
object_id = get_object_id(ObjIdIds.HEATER) object_id = get_object_id(ObjIdIds.HEATER)
return pack_heater_test_into(object_id, service_queue) return pack_heater_test_into(object_id, service_queue)
if service == CustomServiceList.PLOC.value:
object_id = get_object_id(ObjIdIds.PLOC)
return pack_ploc_test_into(object_id, service_queue)
LOGGER.warning("Invalid Service !") LOGGER.warning("Invalid Service !")

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
@file tmtcc_tc_tmp1075.py @file tmp1075.py
@brief TMP1075 tests @brief TMP1075 tests
@author J. Meier @author J. Meier
@date 06.01.2021 @date 06.01.2021

View File

@@ -1,5 +1,7 @@
import struct
from typing import Tuple from typing import Tuple
from config.object_ids import ObjIdIds from config.object_ids import ObjIdIds
from pus_tc.ploc import PlocActionIds
def user_analyze_service_8_data( def user_analyze_service_8_data(
@@ -25,7 +27,20 @@ def user_analyze_service_8_data(
data_string = data_string.rstrip(',') data_string = data_string.rstrip(',')
data_string = data_string.rstrip() data_string = data_string.rstrip()
content_list = [data_string] content_list = [data_string]
elif object_id == ObjIdIds.PLOC_ID:
return handle_ploc_replies(custom_data)
else: else:
header_list = [] header_list = []
content_list = [] content_list = []
return header_list, content_list return header_list, content_list
def handle_ploc_replies(custom_data: bytearray) -> Tuple[list, list]:
header_list = []
content_list = []
action_id = struct.unpack('!I', custom_data[0:4])
if action_id == PlocActionIds.tc_mem_read:
header_list = ['PLOC Read Memory Data']
memory_data = struct.unpack('!I', custom_data[4:8])
content_list = [memory_data]
return header_list, content_list

View File

@@ -16,7 +16,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
You may obtain a copy of the License at You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, distributed under the License is distributed on an "AS IS" BASIS,

View File

@@ -16,7 +16,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
You may obtain a copy of the License at You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, distributed under the License is distributed on an "AS IS" BASIS,

Submodule tmtccmd updated: 1773f62856...563603d0a1