From 7f49dc864464a7d5b58f810a4457e0c5d2992432 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" <robin.mueller.m@gmail.com> Date: Mon, 28 Sep 2020 23:22:18 +0200 Subject: [PATCH] int err rprtr test continued --- tc/obsw_tc_service3.py | 19 ++++---- tm/obsw_tm_service_3.py | 96 ++++++++++++++++++++++++----------------- tmtc_core | 2 +- 3 files changed, 67 insertions(+), 50 deletions(-) diff --git a/tc/obsw_tc_service3.py b/tc/obsw_tc_service3.py index 40b30ed..3f85dc1 100644 --- a/tc/obsw_tc_service3.py +++ b/tc/obsw_tc_service3.py @@ -30,10 +30,9 @@ sid_internal_err_rprtr = make_sid(g.INTERNAL_ERROR_REPORTER_ID, 0) def pack_service3_test_into(tc_queue: Deque) -> Deque: tc_queue.appendleft(("print", "Testing Service 3")) # Predefined packet testing - pack_test_device_test(tc_queue) - pack_custom_tests(tc_queue) + # pack_test_device_test(tc_queue) + # pack_custom_tests(tc_queue) pack_internal_error_reporter_tests(tc_queue) - tc_queue.appendleft(("export", "log/tmtc_log_service3.txt")) return tc_queue @@ -71,16 +70,18 @@ def pack_custom_tests(tc_queue: Deque): def pack_internal_error_reporter_tests(tc_queue: Deque): - new_interval = 1.2 - interval_app_data = sid_thermalsensor + make_interval(new_interval) - tc_queue.appendleft(("print", "Setting interval to 3.0 second: ")) - command = PusTelecommand(service=3, subservice=32, ssc=3102, app_data=interval_app_data) + new_interval = 3.0 + interval_app_data = sid_internal_err_rprtr + make_interval(new_interval) + tc_queue.appendleft(("print", "Setting internal error reporter interval to 3.0 second: ")) + command = PusTelecommand(service=3, subservice=32, ssc=3105, app_data=interval_app_data) tc_queue.appendleft(command.pack_command_tuple()) - tc_queue.appendleft(("print", "Enabling periodic thermal sensor packet generation: ")) - command = PusTelecommand(service=3, subservice=6, ssc=3101, app_data=sid_thermalsensor) + tc_queue.appendleft(("print", "Enabling internal error reporter generation: ")) + command = PusTelecommand(service=3, subservice=7, ssc=3106, app_data=sid_internal_err_rprtr) tc_queue.appendleft(command.pack_command_tuple()) + tc_queue.appendleft(("wait", 3)) + diff --git a/tm/obsw_tm_service_3.py b/tm/obsw_tm_service_3.py index e669027..96be122 100644 --- a/tm/obsw_tm_service_3.py +++ b/tm/obsw_tm_service_3.py @@ -21,6 +21,7 @@ class Service3TM(PusTelemetry): """ # Minimal packet contains SID, which consists of object ID(4) and set ID(4) MINIMAL_PACKET_SIZE = 8 + HK_START_IDX = MINIMAL_PACKET_SIZE # Minimal structure report contains SID (8), reporting status(1), validity flag (1), # collection interval as float (4) and number of parameters(1) STRUCTURE_REPORT_FIXED_HEADER_SIZE = MINIMAL_PACKET_SIZE + 7 @@ -33,17 +34,17 @@ class Service3TM(PusTelemetry): LOGGER.warning(warning) return - self.objectId = struct.unpack('!I', self._tm_data[0:4])[0] - self.objectIdRaw = self._tm_data[0:4] - self.setId = struct.unpack('!I', self._tm_data[4:8])[0] - self.hkHeader = [] - self.hkContent = [] - self.hkDefinitionHeader = [] - self.hkDefinition = [] - self.numberOfParameters = 0 + self.object_id = struct.unpack('!I', self._tm_data[0:4])[0] + self.object_id_raw = self._tm_data[0:4] + self.set_id = struct.unpack('!I', self._tm_data[4:8])[0] + self.hk_header = [] + self.hk_content = [] + self.hk_definition_header = [] + self.hk_definition = [] + self.number_of_parameters = 0 self.validity_buffer = [] self.specify_packet_info("Housekeeping Packet") - self.paramLength = 0 + self.param_length = 0 if self.get_subservice() == 10 or self.get_subservice() == 12: self.handle_filling_definition_arrays() if self.get_subservice() == 25 or self.get_subservice() == 26: @@ -51,9 +52,9 @@ class Service3TM(PusTelemetry): def append_telemetry_content(self, array): super().append_telemetry_content(array) - array.append(hex(self.objectId)) - array.append(hex(self.setId)) - array.append(int(self.paramLength)) + array.append(hex(self.object_id)) + array.append(hex(self.set_id)) + array.append(int(self.param_length)) def append_telemetry_column_headers(self, array): super().append_telemetry_column_headers(array) @@ -62,22 +63,21 @@ class Service3TM(PusTelemetry): array.append("HK Data Size") def handle_filling_definition_arrays(self): - self.print_source_data() if len(self._tm_data) < self.STRUCTURE_REPORT_FIXED_HEADER_SIZE: warning = "Service3TM: handle_filling_definition_arrays: Invalid structure report " \ - "from " + str(hex(self.objectId)) + ", is shorter than" + \ + "from " + str(hex(self.object_id)) + ", is shorter than" + \ str(self.STRUCTURE_REPORT_FIXED_HEADER_SIZE) + "." LOGGER.warning(warning) return - self.hkHeader = ["Object ID", "Set ID", "Report Status", "Is valid", - "Collection Interval (s)", "Number Of IDs"] + self.hk_header = ["Object ID", "Set ID", "Report Status", "Is valid", + "Collection Interval (s)", "Number Of IDs"] reporting_enabled = self._tm_data[8] set_valid = self._tm_data[9] collection_interval_seconds = struct.unpack('>f', self._tm_data[10:14])[0] / 1000.0 num_params = self._tm_data[14] if len(self._tm_data) < self.STRUCTURE_REPORT_FIXED_HEADER_SIZE + num_params * 4: warning = "Service3TM: handle_filling_definition_arrays: Invalid structure report " \ - "from " + str(hex(self.objectId)) + ", is shorter than " + \ + "from " + str(hex(self.object_id)) + ", is shorter than " + \ str(self.STRUCTURE_REPORT_FIXED_HEADER_SIZE + num_params * 4) + "." LOGGER.warning(warning) return @@ -87,7 +87,7 @@ class Service3TM(PusTelemetry): for array_index in range(self.STRUCTURE_REPORT_FIXED_HEADER_SIZE, self.STRUCTURE_REPORT_FIXED_HEADER_SIZE + 4 * num_params, 4): parameter = struct.unpack('>I', self._tm_data[array_index:array_index + 4])[0] - self.hkHeader.append("Pool ID " + str(counter)) + self.hk_header.append("Pool ID " + str(counter)) parameters.append(str(hex(parameter))) counter = counter + 1 if reporting_enabled == 1: @@ -98,28 +98,30 @@ class Service3TM(PusTelemetry): valid_string = "Yes" else: valid_string = "No" - self.hkContent = [hex(self.objectId), self.setId, status_string, valid_string, - collection_interval_seconds, num_params] - self.hkContent.extend(parameters) + self.hk_content = [hex(self.object_id), self.set_id, status_string, valid_string, + collection_interval_seconds, num_params] + self.hk_content.extend(parameters) def handle_filling_hk_arrays(self): - self.paramLength = len(self._tm_data) - 8 + self.param_length = len(self._tm_data) - 8 # TODO: This can be automated by using the MIB parser pool names and pool datatypes - if self.objectIdRaw == g.THERMAL_SENSOR_DEVICE_ID: + if self.object_id_raw == g.THERMAL_SENSOR_DEVICE_ID: self.handle_thermal_sensor_hk_data() - elif self.objectIdRaw == g.GYRO_DEVICE_ID: + elif self.object_id_raw == g.GYRO_DEVICE_ID: self.handle_gyro_hk_data() - elif self.objectIdRaw == g.GPS0_DEVICE_ID or self.objectId == g.GPS1_DEVICE_ID: + elif self.object_id_raw == g.GPS0_DEVICE_ID or self.object_id == g.GPS1_DEVICE_ID: self.handle_gps_hk_data() - elif self.objectIdRaw == g.TEST_TASK_ID: + elif self.object_id_raw == g.TEST_TASK_ID: self.handle_test_hk_data() + elif self.object_id_raw == g.INTERNAL_ERROR_REPORTER_ID: + self.handle_int_err_rprt_data() else: LOGGER.info("Service 3 TM: Parsing for this SID has not been implemented.") def handle_gps_hk_data(self): # TODO: size check. sth not right with gps 0 test - self.numberOfParameters = 9 - self.hkHeader = ["Fix Mode", "SV in Fix", "GNSS Week", "Time of Week", "Latitude", + self.number_of_parameters = 9 + self.hk_header = ["Fix Mode", "SV in Fix", "GNSS Week", "Time of Week", "Latitude", "Longitude", "Mean Sea Altitude", "Position X", "Position Y", "Position Z", "Velocity X", "Velocity Y", "Velocity Z"] fix_mode = self._tm_data[4] @@ -135,8 +137,8 @@ class Service3TM(PusTelemetry): vx = struct.unpack('>d', self._tm_data[48:56])[0] vy = struct.unpack('>d', self._tm_data[56:64])[0] vz = struct.unpack('>d', self._tm_data[64:72])[0] - self.hkContent = [fix_mode, sv_in_fix, gnss_week, time_of_week, latitude, longitude, msa, - position_x, position_y, position_z, vx, vy, vz] + self.hk_content = [fix_mode, sv_in_fix, gnss_week, time_of_week, latitude, longitude, msa, + position_x, position_y, position_z, vx, vy, vz] self.validity_buffer = self._tm_data[72:] # print(self.validityBuffer) # print(str(format(self.validityBuffer[0], '#010b'))) @@ -144,45 +146,59 @@ class Service3TM(PusTelemetry): # print("Validity Buffer Length: " + str(len(self.validityBuffer))) def handle_test_hk_data(self): - self.numberOfParameters = 6 - self.hkHeader = ["Bool", "UINT8", "UINT16", "UINT32", "FLOAT1", "FLOAT2"] + self.number_of_parameters = 6 + self.hk_header = ["Bool", "UINT8", "UINT16", "UINT32", "FLOAT1", "FLOAT2"] test_bool = self._tm_data[4] test_uint8 = self._tm_data[5] test_uint16 = (self._tm_data[6] << 8) | self._tm_data[7] test_uint32 = struct.unpack('>I', self._tm_data[8:12])[0] float_vector1 = struct.unpack('>f', self._tm_data[12:16])[0] float_vector2 = struct.unpack('>f', self._tm_data[16:20])[0] - self.hkContent = [test_bool, test_uint8, test_uint16, - test_uint32, float_vector1, float_vector2] + self.hk_content = [test_bool, test_uint8, test_uint16, + test_uint32, float_vector1, float_vector2] self.validity_buffer = self._tm_data[20:] # print(self.validityBuffer) # print(str(format(self.validityBuffer[0], '#010b'))) # print("Validity Buffer Length: " + str(len(self.validityBuffer))) def handle_thermal_sensor_hk_data(self): - self.numberOfParameters = 2 + self.number_of_parameters = 2 if len(self._tm_data) < 13: LOGGER.error("Format of thermal sensor HK data might be invalid!") return - self.hkHeader = ["Temperature", "Error Byte"] + self.hk_header = ["Temperature", "Error Byte"] temperature_celcius = struct.unpack('!f', self._tm_data[8:12])[0] error_byte = self._tm_data[12] - self.hkContent = [temperature_celcius, error_byte] + self.hk_content = [temperature_celcius, error_byte] self.validity_buffer = self._tm_data[13:] def handle_gyro_hk_data(self): - self.numberOfParameters = 3 + self.number_of_parameters = 3 if len(self._tm_data) < 21: LOGGER.error("Format of thermal sensor HK data might be invalid!") return - self.hkHeader = ["AngVel X", "Ang Vel Y", "AngVel Z"] + self.hk_header = ["AngVel X", "Ang Vel Y", "AngVel Z"] angular_velocity_x = struct.unpack('!f', self._tm_data[8:12])[0] angular_velocity_y = struct.unpack('!f', self._tm_data[12:16])[0] angular_velocity_z = struct.unpack('!f', self._tm_data[16:20])[0] - self.hkContent = [angular_velocity_x, angular_velocity_y, angular_velocity_z] + self.hk_content = [angular_velocity_x, angular_velocity_y, angular_velocity_z] self.validity_buffer = self._tm_data[20:] + def handle_int_err_rprt_data(self): + self.number_of_parameters = 3 + if len(self._tm_data) < 12: + LOGGER.error("Format of thermal sensor HK data might be invalid!") + return + self.hk_header = ["TM Hits", "Queue Hits", "Store Hits"] + tm_hits = struct.unpack('!I', self._tm_data[self.HK_START_IDX:self.HK_START_IDX + 4])[0] + queue_hits = struct.unpack( + '!I', self._tm_data[self.HK_START_IDX + 4:self.HK_START_IDX + 8])[0] + store_hits = struct.unpack( + '!I', self._tm_data[self.HK_START_IDX + 8:self.HK_START_IDX + 12])[0] + self.hk_content = [tm_hits, queue_hits, store_hits] + self.validity_buffer = self._tm_data[self.HK_START_IDX + 12:] + Service3TM: Type[PusTelemetry] diff --git a/tmtc_core b/tmtc_core index 8e94033..ee47db2 160000 --- a/tmtc_core +++ b/tmtc_core @@ -1 +1 @@ -Subproject commit 8e94033ebe1fb1d859c051f356624b297832b237 +Subproject commit ee47db2511157bf050177ae1c755f3ab1f2eea77 -- GitLab