Skip to content

Commit

Permalink
Implement telemetry memory (#344)
Browse files Browse the repository at this point in the history
  • Loading branch information
PatrickKa authored Feb 9, 2025
2 parents 2c470fc + e97f433 commit 5f1f3dd
Show file tree
Hide file tree
Showing 23 changed files with 524 additions and 190 deletions.
2 changes: 2 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ CheckOptions:
value: '<cmath>'
- key: 'cppcoreguidelines-narrowing-conversions.PedanticMode'
value: 'true'
- key: 'cppcoreguidelines-pro-type-member-init.UseAssignment'
value: 'true'
- key: 'readability-else-after-return.WarnOnUnfixable'
value: 'true'
- key: 'readability-else-after-return.WarnOnConditionVariables'
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ add_library(Sts1CobcSw_Outcome INTERFACE)
add_library(Sts1CobcSw_ProgramId INTERFACE)
add_library(Sts1CobcSw_Periphery STATIC)
add_library(Sts1CobcSw_Serial INTERFACE)
add_library(Sts1CobcSw_Telemetry STATIC)
add_library(Sts1CobcSw_Utility STATIC)
add_program(HelloDummy)

Expand Down
1 change: 1 addition & 0 deletions Sts1CobcSw/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ add_subdirectory(Hal)
add_subdirectory(Outcome)
add_subdirectory(Periphery)
add_subdirectory(Serial)
add_subdirectory(Telemetry)
add_subdirectory(Utility)
add_subdirectory(CobcSoftware)

Expand Down
2 changes: 1 addition & 1 deletion Sts1CobcSw/CobcSoftware/CommandParser.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include <Sts1CobcSw/Edu/ProgramQueue.hpp>
#include <Sts1CobcSw/Edu/Types.hpp>
#include <Sts1CobcSw/Serial/Byte.hpp>
#include <Sts1CobcSw/Serial/Serial.hpp>

Expand Down
1 change: 1 addition & 0 deletions Sts1CobcSw/CobcSoftware/EduProgramQueueThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <Sts1CobcSw/Edu/Edu.hpp>
#include <Sts1CobcSw/Edu/ProgramQueue.hpp>
#include <Sts1CobcSw/Edu/ProgramStatusHistory.hpp>
#include <Sts1CobcSw/Edu/Types.hpp>
#include <Sts1CobcSw/FramSections/FramLayout.hpp>
#include <Sts1CobcSw/FramSections/FramRingArray.hpp>
#include <Sts1CobcSw/FramSections/FramVector.hpp>
Expand Down
4 changes: 4 additions & 0 deletions Sts1CobcSw/CobcSoftware/TopicsAndSubscribers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ RODOS::Topic<bool> eduIsAliveTopic(-1, "eduIsAliveTopic");
RODOS::CommBuffer<bool> eduIsAliveBufferForPowerManagement{};
RODOS::CommBuffer<bool> eduIsAliveBufferForCommunicationError{};
RODOS::CommBuffer<bool> eduIsAliveBufferForListener{};
RODOS::CommBuffer<bool> eduIsAliveBufferForTelemetry{};

RODOS::Subscriber eduIsAliveSubscriberForPowerManagement(eduIsAliveTopic,
eduIsAliveBufferForPowerManagement,
Expand All @@ -19,6 +20,9 @@ RODOS::Subscriber eduIsAliveSubscriberForCommunicationError(eduIsAliveTopic,
RODOS::Subscriber eduIsAliveSubscriberForListener(eduIsAliveTopic,
eduIsAliveBufferForListener,
"eduIsAliveSubscriber");
RODOS::Subscriber eduIsAliveSubscriberForTelemetry(eduIsAliveTopic,
eduIsAliveBufferForListener,
"eduIsAliveSubscriber");

RODOS::Topic<Duration> nextProgramStartDelayTopic(-1, "nextProgramStartDelayTopic");
RODOS::CommBuffer<Duration> nextProgramStartDelayBuffer{};
Expand Down
1 change: 1 addition & 0 deletions Sts1CobcSw/CobcSoftware/TopicsAndSubscribers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ extern RODOS::Topic<bool> eduIsAliveTopic;
extern RODOS::CommBuffer<bool> eduIsAliveBufferForListener;
extern RODOS::CommBuffer<bool> eduIsAliveBufferForPowerManagement;
extern RODOS::CommBuffer<bool> eduIsAliveBufferForCommunicationError;
extern RODOS::CommBuffer<bool> eduIsAliveBufferForTelemetry;
extern RODOS::Topic<Duration> nextProgramStartDelayTopic;
extern RODOS::CommBuffer<Duration> nextProgramStartDelayBuffer;
}
2 changes: 1 addition & 1 deletion Sts1CobcSw/Edu/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
target_sources(Sts1CobcSw_Edu PRIVATE ProgramQueue.cpp ProgramStatusHistory.cpp)
target_sources(Sts1CobcSw_Edu PRIVATE ProgramStatusHistory.cpp)
target_link_libraries(
Sts1CobcSw_Edu PUBLIC rodos::without_main_on_linux etl::etl Sts1CobcSw_FramSections
Sts1CobcSw_Outcome Sts1CobcSw_ProgramId Sts1CobcSw_Serial
Expand Down
44 changes: 0 additions & 44 deletions Sts1CobcSw/Edu/ProgramQueue.cpp

This file was deleted.

44 changes: 5 additions & 39 deletions Sts1CobcSw/Edu/ProgramQueue.hpp
Original file line number Diff line number Diff line change
@@ -1,50 +1,16 @@
#pragma once


#include <Sts1CobcSw/Edu/Types.hpp>
#include <Sts1CobcSw/FramSections/FramLayout.hpp>
#include <Sts1CobcSw/FramSections/FramVector.hpp>
#include <Sts1CobcSw/FramSections/Subsections.hpp>
#include <Sts1CobcSw/ProgramId/ProgramId.hpp>
#include <Sts1CobcSw/Serial/Serial.hpp>
#include <Sts1CobcSw/Utility/TimeTypes.hpp>

#include <bit>
#include <cstddef>
#include <cstdint>


namespace sts1cobcsw
{
namespace edu
{
struct ProgramQueueEntry
{
ProgramId programId = ProgramId(0);
RealTime startTime = RealTime(0);
std::int16_t timeout = 0;
};
}


template<>
inline constexpr std::size_t serialSize<edu::ProgramQueueEntry> =
totalSerialSize<decltype(edu::ProgramQueueEntry::programId),
decltype(edu::ProgramQueueEntry::startTime),
decltype(edu::ProgramQueueEntry::timeout)>;


namespace edu
namespace sts1cobcsw::edu
{
inline constexpr auto nCachedProgramQueueEntries = 10;
extern FramVector<ProgramQueueEntry,
framSections.template Get<"eduProgramQueue">(),
nCachedProgramQueueEntries>
programQueue;


template<std::endian endianness>
[[nodiscard]] auto DeserializeFrom(void const * source, ProgramQueueEntry * data) -> void const *;
template<std::endian endianness>
[[nodiscard]] auto SerializeTo(void * destination, ProgramQueueEntry const & data) -> void *;
}
inline constexpr auto programQueue = FramVector<ProgramQueueEntry,
framSections.template Get<"eduProgramQueue">(),
nCachedProgramQueueEntries>{};
}
38 changes: 0 additions & 38 deletions Sts1CobcSw/Edu/ProgramStatusHistory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,6 @@

namespace sts1cobcsw::edu
{
using sts1cobcsw::DeserializeFrom;
using sts1cobcsw::SerializeTo;


sts1cobcsw::FramRingArray<ProgramStatusHistoryEntry,
framSections.Get<"eduProgramStatusHistory">(),
nCachedProgramStatusHistoryEntries>
programStatusHistory;


auto UpdateProgramStatusHistory(ProgramId programId, RealTime startTime, ProgramStatus newStatus)
-> void
{
Expand All @@ -25,32 +15,4 @@ auto UpdateProgramStatusHistory(ProgramId programId, RealTime startTime, Program
{ return entry.programId == programId and entry.startTime == startTime; },
ProgramStatusHistoryEntry{programId, startTime, newStatus});
}


template<std::endian endianness>
auto DeserializeFrom(void const * source, ProgramStatusHistoryEntry * data) -> void const *
{
source = DeserializeFrom<endianness>(source, &(data->programId));
source = DeserializeFrom<endianness>(source, &(data->startTime));
source = DeserializeFrom<endianness>(source, &(data->status));
return source;
}


template<std::endian endianness>
auto SerializeTo(void * destination, ProgramStatusHistoryEntry const & data) -> void *
{
destination = SerializeTo<endianness>(destination, data.programId);
destination = SerializeTo<endianness>(destination, data.startTime);
destination = SerializeTo<endianness>(destination, data.status);
return destination;
}


template auto DeserializeFrom<std::endian::big>(void const *, ProgramStatusHistoryEntry *)
-> void const *;
template auto DeserializeFrom<std::endian::little>(void const *, ProgramStatusHistoryEntry *)
-> void const *;
template auto SerializeTo<std::endian::big>(void *, ProgramStatusHistoryEntry const &) -> void *;
template auto SerializeTo<std::endian::little>(void *, ProgramStatusHistoryEntry const &) -> void *;
}
57 changes: 6 additions & 51 deletions Sts1CobcSw/Edu/ProgramStatusHistory.hpp
Original file line number Diff line number Diff line change
@@ -1,68 +1,23 @@
#pragma once


#include <Sts1CobcSw/Edu/Types.hpp>
#include <Sts1CobcSw/FramSections/FramLayout.hpp>
#include <Sts1CobcSw/FramSections/FramRingArray.hpp>
#include <Sts1CobcSw/FramSections/Subsections.hpp>
#include <Sts1CobcSw/ProgramId/ProgramId.hpp>
#include <Sts1CobcSw/Serial/Serial.hpp>
#include <Sts1CobcSw/Utility/TimeTypes.hpp>

#include <bit>
#include <cstddef>
#include <cstdint>


namespace sts1cobcsw
{
namespace edu
{
enum class ProgramStatus : std::uint8_t
{
programRunning,
programCouldNotBeStarted,
programExecutionFailed,
programExecutionSucceeded,
resultFileTransfered,
resultFileSentToRf,
ackFromGround,
resultFileDeleted
};


struct ProgramStatusHistoryEntry
{
ProgramId programId = ProgramId(0);
RealTime startTime = RealTime(0);
ProgramStatus status = ProgramStatus::programRunning;
};
}


template<>
inline constexpr std::size_t serialSize<edu::ProgramStatusHistoryEntry> =
totalSerialSize<decltype(edu::ProgramStatusHistoryEntry::programId),
decltype(edu::ProgramStatusHistoryEntry::startTime),
decltype(edu::ProgramStatusHistoryEntry::status)>;


namespace edu
namespace sts1cobcsw::edu
{
inline constexpr auto nCachedProgramStatusHistoryEntries = 10;
extern FramRingArray<ProgramStatusHistoryEntry,
framSections.template Get<"eduProgramStatusHistory">(),
nCachedProgramStatusHistoryEntries>
programStatusHistory;
inline constexpr auto programStatusHistory =
FramRingArray<ProgramStatusHistoryEntry,
framSections.template Get<"eduProgramStatusHistory">(),
nCachedProgramStatusHistoryEntries>{};


auto UpdateProgramStatusHistory(ProgramId programId, RealTime startTime, ProgramStatus newStatus)
-> void;

template<std::endian endianness>
[[nodiscard]] auto DeserializeFrom(void const * source, ProgramStatusHistoryEntry * data)
-> void const *;
template<std::endian endianness>
[[nodiscard]] auto SerializeTo(void * destination, ProgramStatusHistoryEntry const & data)
-> void *;
}
}
51 changes: 51 additions & 0 deletions Sts1CobcSw/Edu/Types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,19 @@ enum class ErrorCode
};


enum class ProgramStatus : std::uint8_t
{
programRunning,
programCouldNotBeStarted,
programExecutionFailed,
programExecutionSucceeded,
resultFileTransfered,
resultFileSentToRf,
ackFromGround,
resultFileDeleted
};


enum class StatusType
{
noEvent,
Expand All @@ -41,6 +54,22 @@ enum class StatusType
};


struct ProgramQueueEntry
{
ProgramId programId = ProgramId(0);
RealTime startTime = RealTime(0);
std::int16_t timeout = 0;
};


struct ProgramStatusHistoryEntry
{
ProgramId programId = ProgramId(0);
RealTime startTime = RealTime(0);
ProgramStatus status = ProgramStatus::programRunning;
};


struct StoreProgramData
{
static constexpr auto id = 0x01_b;
Expand Down Expand Up @@ -124,6 +153,18 @@ struct ResultInfo
}


template<>
inline constexpr std::size_t serialSize<edu::ProgramQueueEntry> =
totalSerialSize<decltype(edu::ProgramQueueEntry::programId),
decltype(edu::ProgramQueueEntry::startTime),
decltype(edu::ProgramQueueEntry::timeout)>;

template<>
inline constexpr std::size_t serialSize<edu::ProgramStatusHistoryEntry> =
totalSerialSize<decltype(edu::ProgramStatusHistoryEntry::programId),
decltype(edu::ProgramStatusHistoryEntry::startTime),
decltype(edu::ProgramStatusHistoryEntry::status)>;

template<>
inline constexpr std::size_t serialSize<edu::StoreProgramData> =
totalSerialSize<decltype(edu::StoreProgramData::id),
Expand Down Expand Up @@ -175,6 +216,11 @@ inline constexpr std::size_t serialSize<edu::ResultsReadyData> =
namespace edu
{
template<std::endian endianness>
[[nodiscard]] auto SerializeTo(void * destination, ProgramQueueEntry const & data) -> void *;
template<std::endian endianness>
[[nodiscard]] auto SerializeTo(void * destination, ProgramStatusHistoryEntry const & data)
-> void *;
template<std::endian endianness>
[[nodiscard]] auto SerializeTo(void * destination, StoreProgramData const & data) -> void *;
template<std::endian endianness>
[[nodiscard]] auto SerializeTo(void * destination, ExecuteProgramData const & data) -> void *;
Expand All @@ -187,6 +233,11 @@ template<std::endian endianness>
template<std::endian endianness>
[[nodiscard]] auto SerializeTo(void * destination, UpdateTimeData const & data) -> void *;

template<std::endian endianness>
[[nodiscard]] auto DeserializeFrom(void const * source, ProgramQueueEntry * data) -> void const *;
template<std::endian endianness>
[[nodiscard]] auto DeserializeFrom(void const * source, ProgramStatusHistoryEntry * data)
-> void const *;
template<std::endian endianness>
[[nodiscard]] auto DeserializeFrom(void const * source, NoEventData * data) -> void const *;
template<std::endian endianness>
Expand Down
Loading

0 comments on commit 5f1f3dd

Please sign in to comment.