Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement telemetry memory #344

Merged
merged 6 commits into from
Feb 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading