active SD Info event #752
@ -21,6 +21,7 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
- STR missed reply handling is now moved to DHB rather than the COM interface. The COM IF will
|
- STR missed reply handling is now moved to DHB rather than the COM interface. The COM IF will
|
||||||
still trigger an event if a reply is taking too long, and FDIR should still work via reply
|
still trigger an event if a reply is taking too long, and FDIR should still work via reply
|
||||||
timeouts.
|
timeouts.
|
||||||
|
- Re-ordered some functions of the core controller in the initialize function.
|
||||||
- Rad sensor is now only polled every 30 minutes instead of every device cycle to reduce wear of
|
- Rad sensor is now only polled every 30 minutes instead of every device cycle to reduce wear of
|
||||||
the RADFET electronics.
|
the RADFET electronics.
|
||||||
|
|
||||||
@ -34,6 +35,9 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
- The STR handler can now handle the COM error reply and triggers an low severity event accordingly.
|
- The STR handler can now handle the COM error reply and triggers an low severity event accordingly.
|
||||||
- Add SCEX handler for EM.
|
- Add SCEX handler for EM.
|
||||||
- Radiation sensor handler dummy for the EM.
|
- Radiation sensor handler dummy for the EM.
|
||||||
|
- Added event for SD card information in core controller initialize function. This event will also
|
||||||
|
be triggered after the SD state machine has run, so the event will generally be triggered twice
|
||||||
|
at system boot, and once after commanding SD card switches.
|
||||||
|
|
||||||
## Fixed
|
## Fixed
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated event translation file. Contains 300 translations.
|
* @brief Auto-generated event translation file. Contains 301 translations.
|
||||||
* @details
|
* @details
|
||||||
* Generated on: 2023-07-13 21:09:02
|
* Generated on: 2023-07-21 11:04:23
|
||||||
*/
|
*/
|
||||||
#include "translateEvents.h"
|
#include "translateEvents.h"
|
||||||
|
|
||||||
@ -279,6 +279,7 @@ const char *TRYING_I2C_RECOVERY_STRING = "TRYING_I2C_RECOVERY";
|
|||||||
const char *I2C_REBOOT_STRING = "I2C_REBOOT";
|
const char *I2C_REBOOT_STRING = "I2C_REBOOT";
|
||||||
const char *PDEC_REBOOT_STRING = "PDEC_REBOOT";
|
const char *PDEC_REBOOT_STRING = "PDEC_REBOOT";
|
||||||
const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO";
|
const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO";
|
||||||
|
const char *ACTIVE_SD_INFO_STRING = "ACTIVE_SD_INFO";
|
||||||
const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE";
|
const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE";
|
||||||
const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE";
|
const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE";
|
||||||
const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING";
|
const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING";
|
||||||
@ -856,6 +857,8 @@ const char *translateEvents(Event event) {
|
|||||||
return PDEC_REBOOT_STRING;
|
return PDEC_REBOOT_STRING;
|
||||||
case (14013):
|
case (14013):
|
||||||
return FIRMWARE_INFO_STRING;
|
return FIRMWARE_INFO_STRING;
|
||||||
|
case (14014):
|
||||||
|
return ACTIVE_SD_INFO_STRING;
|
||||||
case (14100):
|
case (14100):
|
||||||
return NO_VALID_SENSOR_TEMPERATURE_STRING;
|
return NO_VALID_SENSOR_TEMPERATURE_STRING;
|
||||||
case (14101):
|
case (14101):
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* @brief Auto-generated object translation file.
|
* @brief Auto-generated object translation file.
|
||||||
* @details
|
* @details
|
||||||
* Contains 171 translations.
|
* Contains 171 translations.
|
||||||
* Generated on: 2023-07-13 21:09:02
|
* Generated on: 2023-07-21 11:04:23
|
||||||
*/
|
*/
|
||||||
#include "translateObjects.h"
|
#include "translateObjects.h"
|
||||||
|
|
||||||
|
@ -156,20 +156,12 @@ ReturnValue_t CoreController::initialize() {
|
|||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
sif::warning << "CoreController::initialize: Base init failed" << std::endl;
|
sif::warning << "CoreController::initialize: Base init failed" << std::endl;
|
||||||
}
|
}
|
||||||
result = scratch::writeNumber(scratch::ALLOC_FAILURE_COUNT, 0);
|
|
||||||
if (result != returnvalue::OK) {
|
|
||||||
sif::warning << "CoreController::initialize: Setting up alloc failure "
|
|
||||||
"count failed"
|
|
||||||
<< std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = paramHelper.initialize();
|
result = paramHelper.initialize();
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdStateMachine();
|
|
||||||
|
|
||||||
EventManagerIF *eventManager =
|
EventManagerIF *eventManager =
|
||||||
ObjectManager::instance()->get<EventManagerIF>(objects::EVENT_MANAGER);
|
ObjectManager::instance()->get<EventManagerIF>(objects::EVENT_MANAGER);
|
||||||
if (eventManager == nullptr or eventQueue == nullptr) {
|
if (eventManager == nullptr or eventQueue == nullptr) {
|
||||||
@ -189,7 +181,16 @@ ReturnValue_t CoreController::initialize() {
|
|||||||
triggerEvent(core::REBOOT_SW, CURRENT_CHIP, CURRENT_COPY);
|
triggerEvent(core::REBOOT_SW, CURRENT_CHIP, CURRENT_COPY);
|
||||||
announceCurrentImageInfo();
|
announceCurrentImageInfo();
|
||||||
announceVersionInfo();
|
announceVersionInfo();
|
||||||
|
SdCardManager::SdStatePair sdStates;
|
||||||
|
sdcMan->getSdCardsStatus(sdStates);
|
||||||
|
announceSdInfo(sdStates);
|
||||||
|
sdStateMachine();
|
||||||
|
result = scratch::writeNumber(scratch::ALLOC_FAILURE_COUNT, 0);
|
||||||
|
if (result != returnvalue::OK) {
|
||||||
|
sif::warning << "CoreController::initialize: Setting up alloc failure "
|
||||||
|
"count failed"
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -800,6 +801,7 @@ ReturnValue_t CoreController::sdStateMachine() {
|
|||||||
}
|
}
|
||||||
sif::info << "SD card update into " << modeStr
|
sif::info << "SD card update into " << modeStr
|
||||||
<< " mode finished. Active SD: " << sdInfo.activeChar << std::endl;
|
<< " mode finished. Active SD: " << sdInfo.activeChar << std::endl;
|
||||||
|
announceSdInfo(sdInfo.currentState);
|
||||||
if (not sdInfo.initFinished) {
|
if (not sdInfo.initFinished) {
|
||||||
updateInternalSdInfo();
|
updateInternalSdInfo();
|
||||||
sdInfo.initFinished = true;
|
sdInfo.initFinished = true;
|
||||||
@ -2570,6 +2572,17 @@ ReturnValue_t CoreController::performGracefulShutdown(xsc::Chip tgtChip, xsc::Co
|
|||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CoreController::announceSdInfo(SdCardManager::SdStatePair sdStates) {
|
||||||
|
auto activeSdCard = sdcMan->getActiveSdCard();
|
||||||
|
uint32_t p1 = sd::SdCard::NONE;
|
||||||
|
if (activeSdCard.has_value()) {
|
||||||
|
p1 = static_cast<uint32_t>(activeSdCard.value());
|
||||||
|
}
|
||||||
|
uint32_t p2 =
|
||||||
|
(static_cast<uint32_t>(sdStates.first) << 16) | static_cast<uint32_t>(sdStates.second);
|
||||||
|
triggerEvent(core::ACTIVE_SD_INFO, p1, p2);
|
||||||
|
}
|
||||||
|
|
||||||
bool CoreController::isNumber(const std::string &s) {
|
bool CoreController::isNumber(const std::string &s) {
|
||||||
return !s.empty() && std::find_if(s.begin(), s.end(),
|
return !s.empty() && std::find_if(s.begin(), s.end(),
|
||||||
[](unsigned char c) { return !std::isdigit(c); }) == s.end();
|
[](unsigned char c) { return !std::isdigit(c); }) == s.end();
|
||||||
|
@ -388,6 +388,7 @@ class CoreController : public ExtendedControllerBase, public ReceivesParameterMe
|
|||||||
void announceBootCounts();
|
void announceBootCounts();
|
||||||
void announceVersionInfo();
|
void announceVersionInfo();
|
||||||
void announceCurrentImageInfo();
|
void announceCurrentImageInfo();
|
||||||
|
void announceSdInfo(SdCardManager::SdStatePair sdStates);
|
||||||
void readHkData();
|
void readHkData();
|
||||||
void dirListingDumpHandler();
|
void dirListingDumpHandler();
|
||||||
bool isNumber(const std::string& s);
|
bool isNumber(const std::string& s);
|
||||||
|
@ -273,6 +273,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
|
|||||||
14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h
|
14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h
|
||||||
14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h
|
14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h
|
||||||
14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
|
14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
|
||||||
|
14014;0x36be;ACTIVE_SD_INFO;INFO;Active SD card info. 0: OFF, 1: ON, 2: MOUNTED. P1: SD Card 0, P2: SD Card 1.;mission/sysDefs.h
|
||||||
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h
|
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h
|
||||||
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h
|
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h
|
||||||
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
|
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
|
||||||
|
|
@ -273,6 +273,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
|
|||||||
14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h
|
14011;0x36bb;I2C_REBOOT;HIGH;I2C is unavailable. Recovery did not work, performing full reboot.;mission/sysDefs.h
|
||||||
14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h
|
14012;0x36bc;PDEC_REBOOT;HIGH;PDEC recovery through reset was not possible, performing full reboot.;mission/sysDefs.h
|
||||||
14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
|
14013;0x36bd;FIRMWARE_INFO;INFO;Version information of the firmware (not OBSW). P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash P2: First four letters of Git SHA is the last byte of P1 is set.;mission/sysDefs.h
|
||||||
|
14014;0x36be;ACTIVE_SD_INFO;INFO;Active SD card info. 0: OFF, 1: ON, 2: MOUNTED. P1: SD Card 0, P2: SD Card 1.;mission/sysDefs.h
|
||||||
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h
|
14100;0x3714;NO_VALID_SENSOR_TEMPERATURE;MEDIUM;No description;mission/controller/tcsDefs.h
|
||||||
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h
|
14101;0x3715;NO_HEALTHY_HEATER_AVAILABLE;MEDIUM;No description;mission/controller/tcsDefs.h
|
||||||
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
|
14102;0x3716;SYRLINKS_OVERHEATING;HIGH;No description;mission/controller/tcsDefs.h
|
||||||
|
|
@ -54,9 +54,13 @@ class BspConfig:
|
|||||||
|
|
||||||
# Store this file in the root of the generators folder
|
# Store this file in the root of the generators folder
|
||||||
self.csv_filename = Path(f"{ROOT_DIR}/{self.bsp_dir_name}_events.csv")
|
self.csv_filename = Path(f"{ROOT_DIR}/{self.bsp_dir_name}_events.csv")
|
||||||
self.subsystems_csv_filename = Path(f"{ROOT_DIR}/{self.bsp_dir_name}_subsystems.csv")
|
self.subsystems_csv_filename = Path(
|
||||||
|
f"{ROOT_DIR}/{self.bsp_dir_name}_subsystems.csv"
|
||||||
|
)
|
||||||
self.csv_copy_dest = Path(f"{OBSW_ROOT_DIR}/tmtc/eive_tmtc/config/events.csv")
|
self.csv_copy_dest = Path(f"{OBSW_ROOT_DIR}/tmtc/eive_tmtc/config/events.csv")
|
||||||
self.subsystem_csv_copy_dest = Path(f"{OBSW_ROOT_DIR}/tmtc/eive_tmtc/config/subsystems.csv")
|
self.subsystem_csv_copy_dest = Path(
|
||||||
|
f"{OBSW_ROOT_DIR}/tmtc/eive_tmtc/config/subsystems.csv"
|
||||||
|
)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
self.bsp_select == BspType.BSP_Q7S
|
self.bsp_select == BspType.BSP_Q7S
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated event translation file. Contains 300 translations.
|
* @brief Auto-generated event translation file. Contains 301 translations.
|
||||||
* @details
|
* @details
|
||||||
* Generated on: 2023-07-13 21:09:02
|
* Generated on: 2023-07-21 11:04:23
|
||||||
*/
|
*/
|
||||||
#include "translateEvents.h"
|
#include "translateEvents.h"
|
||||||
|
|
||||||
@ -279,6 +279,7 @@ const char *TRYING_I2C_RECOVERY_STRING = "TRYING_I2C_RECOVERY";
|
|||||||
const char *I2C_REBOOT_STRING = "I2C_REBOOT";
|
const char *I2C_REBOOT_STRING = "I2C_REBOOT";
|
||||||
const char *PDEC_REBOOT_STRING = "PDEC_REBOOT";
|
const char *PDEC_REBOOT_STRING = "PDEC_REBOOT";
|
||||||
const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO";
|
const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO";
|
||||||
|
const char *ACTIVE_SD_INFO_STRING = "ACTIVE_SD_INFO";
|
||||||
const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE";
|
const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE";
|
||||||
const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE";
|
const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE";
|
||||||
const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING";
|
const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING";
|
||||||
@ -856,6 +857,8 @@ const char *translateEvents(Event event) {
|
|||||||
return PDEC_REBOOT_STRING;
|
return PDEC_REBOOT_STRING;
|
||||||
case (14013):
|
case (14013):
|
||||||
return FIRMWARE_INFO_STRING;
|
return FIRMWARE_INFO_STRING;
|
||||||
|
case (14014):
|
||||||
|
return ACTIVE_SD_INFO_STRING;
|
||||||
case (14100):
|
case (14100):
|
||||||
return NO_VALID_SENSOR_TEMPERATURE_STRING;
|
return NO_VALID_SENSOR_TEMPERATURE_STRING;
|
||||||
case (14101):
|
case (14101):
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* @brief Auto-generated object translation file.
|
* @brief Auto-generated object translation file.
|
||||||
* @details
|
* @details
|
||||||
* Contains 175 translations.
|
* Contains 175 translations.
|
||||||
* Generated on: 2023-07-13 21:09:02
|
* Generated on: 2023-07-21 11:04:23
|
||||||
*/
|
*/
|
||||||
#include "translateObjects.h"
|
#include "translateObjects.h"
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @brief Auto-generated event translation file. Contains 300 translations.
|
* @brief Auto-generated event translation file. Contains 301 translations.
|
||||||
* @details
|
* @details
|
||||||
* Generated on: 2023-07-13 21:09:02
|
* Generated on: 2023-07-21 11:04:23
|
||||||
*/
|
*/
|
||||||
#include "translateEvents.h"
|
#include "translateEvents.h"
|
||||||
|
|
||||||
@ -279,6 +279,7 @@ const char *TRYING_I2C_RECOVERY_STRING = "TRYING_I2C_RECOVERY";
|
|||||||
const char *I2C_REBOOT_STRING = "I2C_REBOOT";
|
const char *I2C_REBOOT_STRING = "I2C_REBOOT";
|
||||||
const char *PDEC_REBOOT_STRING = "PDEC_REBOOT";
|
const char *PDEC_REBOOT_STRING = "PDEC_REBOOT";
|
||||||
const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO";
|
const char *FIRMWARE_INFO_STRING = "FIRMWARE_INFO";
|
||||||
|
const char *ACTIVE_SD_INFO_STRING = "ACTIVE_SD_INFO";
|
||||||
const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE";
|
const char *NO_VALID_SENSOR_TEMPERATURE_STRING = "NO_VALID_SENSOR_TEMPERATURE";
|
||||||
const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE";
|
const char *NO_HEALTHY_HEATER_AVAILABLE_STRING = "NO_HEALTHY_HEATER_AVAILABLE";
|
||||||
const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING";
|
const char *SYRLINKS_OVERHEATING_STRING = "SYRLINKS_OVERHEATING";
|
||||||
@ -856,6 +857,8 @@ const char *translateEvents(Event event) {
|
|||||||
return PDEC_REBOOT_STRING;
|
return PDEC_REBOOT_STRING;
|
||||||
case (14013):
|
case (14013):
|
||||||
return FIRMWARE_INFO_STRING;
|
return FIRMWARE_INFO_STRING;
|
||||||
|
case (14014):
|
||||||
|
return ACTIVE_SD_INFO_STRING;
|
||||||
case (14100):
|
case (14100):
|
||||||
return NO_VALID_SENSOR_TEMPERATURE_STRING;
|
return NO_VALID_SENSOR_TEMPERATURE_STRING;
|
||||||
case (14101):
|
case (14101):
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* @brief Auto-generated object translation file.
|
* @brief Auto-generated object translation file.
|
||||||
* @details
|
* @details
|
||||||
* Contains 175 translations.
|
* Contains 175 translations.
|
||||||
* Generated on: 2023-07-13 21:09:02
|
* Generated on: 2023-07-21 11:04:23
|
||||||
*/
|
*/
|
||||||
#include "translateObjects.h"
|
#include "translateObjects.h"
|
||||||
|
|
||||||
|
@ -125,6 +125,10 @@ static constexpr Event PDEC_REBOOT = event::makeEvent(SUBSYSTEM_ID, 12, severity
|
|||||||
//! P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash
|
//! P1: Byte 0: Major, Byte 1: Minor, Byte 2: Patch, Byte 3: Has Git Hash
|
||||||
//! P2: First four letters of Git SHA is the last byte of P1 is set.
|
//! P2: First four letters of Git SHA is the last byte of P1 is set.
|
||||||
static constexpr Event FIRMWARE_INFO = event::makeEvent(SUBSYSTEM_ID, 13, severity::INFO);
|
static constexpr Event FIRMWARE_INFO = event::makeEvent(SUBSYSTEM_ID, 13, severity::INFO);
|
||||||
|
//! [EXPORT] : [COMMENT] Active SD card info. SD States: 0: OFF, 1: ON, 2: MOUNTED.
|
||||||
|
//! P1: Active SD Card Index, 0 if none is active
|
||||||
|
//! P2: First two bytes: SD state of SD card 0, last two bytes SD state of SD card 1
|
||||||
|
static constexpr Event ACTIVE_SD_INFO = event::makeEvent(SUBSYSTEM_ID, 14, severity::INFO);
|
||||||
|
|
||||||
class ListDirectoryCmdBase {
|
class ListDirectoryCmdBase {
|
||||||
public: // TODO: Packet definition for clean deserialization
|
public: // TODO: Packet definition for clean deserialization
|
||||||
|
2
tmtc
2
tmtc
@ -1 +1 @@
|
|||||||
Subproject commit 0b8bd61e8015d7145462ecbf9db5f302bc234b41
|
Subproject commit a82cbff5a83eb37c68234bdeecd3b7d308d65eb1
|
Loading…
Reference in New Issue
Block a user