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

Trace Logger Feature Review and Merge #2953

Open
wants to merge 52 commits into
base: devel
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 50 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
2a5dba3
2604: SDD in Progress
Shivaly-Reddy Mar 28, 2024
2e67154
2604: Fixed bug in version
Shivaly-Reddy Apr 10, 2024
27a58bc
Merge branch 'nasa:devel' into devel
Shivaly-Reddy Apr 17, 2024
2156618
Merge branch 'nasa:devel' into devel
Shivaly-Reddy Apr 22, 2024
25ede54
2604: Updates to user defined versions
Shivaly-Reddy Apr 24, 2024
8d30c55
FP-2604: Updates to Version module and UTs
Shivaly-Reddy May 10, 2024
3638982
Merging from the forked
Shivaly-Reddy May 10, 2024
6160ed2
Merge branch 'devel' into FP-2604
Shivaly-Reddy May 10, 2024
d1c48ca
FP-2604 : Updates based on changes made by Thomas to version.hpp
Shivaly-Reddy May 10, 2024
5d50140
FP-2604: Updates to Version based on conversations with Tim and Michael
Shivaly-Reddy May 21, 2024
9b1cd59
FP-2604: Updates to UTs and respective code changes
Shivaly-Reddy May 24, 2024
3a5a366
Merge branch 'nasa:devel' into devel
Shivaly-Reddy Jun 5, 2024
ccf88a9
Merge branch 'nasa:devel' into devel
Shivaly-Reddy Jun 11, 2024
10ef05b
Merge branch 'nasa:devel' into devel
Shivaly-Reddy Jun 18, 2024
3f0d2db
Revert "FP-2604: Updates to UTs and respective code changes"
Shivaly-Reddy Jun 21, 2024
1a000c2
Revert "FP-2604: Updates to Version based on conversations with Tim a…
Shivaly-Reddy Jun 21, 2024
8c53be4
Revert "FP-2604 : Updates based on changes made by Thomas to version.…
Shivaly-Reddy Jun 21, 2024
33dd922
Revert "FP-2604: Updates to Version module and UTs"
Shivaly-Reddy Jun 21, 2024
11eabfe
Revert "2604: Updates to user defined versions"
Shivaly-Reddy Jun 21, 2024
9193a20
Revert "2604: Fixed bug in version"
Shivaly-Reddy Jun 21, 2024
aaadbab
Revert "2604: SDD in Progress"
Shivaly-Reddy Jun 21, 2024
5d372d4
Making fork identical to the latest fprime devel branch
Shivaly-Reddy Jun 21, 2024
a4b5cb6
Merge branch 'nasa:devel' into devel
Shivaly-Reddy Jul 9, 2024
b548ebb
FP-2784 : Trace modules
Shivaly-Reddy Jul 24, 2024
b0a9ba0
Merge branch 'nasa:devel' into devel
Shivaly-Reddy Jul 24, 2024
f99fc34
FP-2674: Trace logger demo implementation (work in progress)
Shivaly-Reddy Aug 30, 2024
d598e4e
Merge branch 'devel' of https://github.com/Shivaly-Reddy/fprime into …
Shivaly-Reddy Aug 30, 2024
74eb8f8
Merge branch 'devel' into FP-2784
Shivaly-Reddy Aug 30, 2024
0f0692a
FP-2784: Trace devel
Shivaly-Reddy Sep 4, 2024
ed63e2d
Merge branch 'FP-2784-temp' into FP-2784
Shivaly-Reddy Sep 4, 2024
a94b8f7
FP-2784: Updates including Tim's suggestions
Shivaly-Reddy Sep 9, 2024
3e28797
FP-2784: Updates based on discussions with Tim
Shivaly-Reddy Sep 18, 2024
e70c568
FP-2784: Change TraceLogger to TraceFileLogger to distinguish between…
Shivaly-Reddy Sep 18, 2024
8bbda39
Merge branch 'devel' into FP-2784
Shivaly-Reddy Sep 18, 2024
d30244b
FP-2784: Add trace ID filtering and other changes
Shivaly-Reddy Sep 24, 2024
3e0b546
FP-2784: Add compiler time flags for trace logging config full/minima…
Shivaly-Reddy Sep 24, 2024
15cb971
FP-2784: Spell check error fixes
Shivaly-Reddy Sep 24, 2024
44fc775
FP-2784: Typo updates to processing arrays
Shivaly-Reddy Sep 24, 2024
acf1982
FP-2784: scrubbing comments etc
Shivaly-Reddy Sep 26, 2024
6486bd3
FP-2784 : UT updates in progress
Shivaly-Reddy Oct 2, 2024
64844f4
FP-2784: Updates to UTs and command name clarification
Shivaly-Reddy Oct 3, 2024
66a9cb8
Merge branch 'devel' into FP-2784
Shivaly-Reddy Oct 9, 2024
2dbf993
FP-2784: Updates based on bugs found during UTs and code coverage
Shivaly-Reddy Oct 15, 2024
b42e62c
FP-2784: Fix trace references in Ref
Shivaly-Reddy Oct 15, 2024
9e10a49
FP-2784: Few uwpdates based on CodeQL warnings
Shivaly-Reddy Oct 15, 2024
ca35e21
FP-2784: Fix spell check errors
Shivaly-Reddy Oct 15, 2024
7539954
FP-2784: Deframer cmake file accidentally got altered
Shivaly-Reddy Oct 15, 2024
7d4e9e4
FP-2784: Try fixing CI error
Shivaly-Reddy Oct 16, 2024
f3479d1
FP-2784: Corrected codeql error
Shivaly-Reddy Oct 16, 2024
6bc9b92
FP-2784: Cleanup
Shivaly-Reddy Oct 16, 2024
97af364
FP-2784: Updates based on Tim's review comments
Shivaly-Reddy Oct 17, 2024
179127e
FP-2784: Oops forgot to add the modified files
Shivaly-Reddy Oct 17, 2024
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
3 changes: 2 additions & 1 deletion Fw/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Module subdirectories
set(FPRIME_FRAMEWORK_MODULES Fw_Prm Fw_Cmd Fw_Log Fw_Tlm Fw_Com Fw_Time Fw_Port Fw_Types Fw_Cfg CACHE INTERNAL "Fw mods")
set(FPRIME_FRAMEWORK_MODULES Fw_Prm Fw_Cmd Fw_Trace Fw_Log Fw_Tlm Fw_Com Fw_Time Fw_Port Fw_Types Fw_Cfg CACHE INTERNAL "Fw mods")
# Port subdirectories
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Buffer/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Cmd/")
Expand All @@ -10,6 +10,7 @@ add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Logger/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Prm/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Time/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Tlm/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Trace/")

# Framework subdirectories
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Cfg/")
Expand Down
1 change: 1 addition & 0 deletions Fw/Cfg/SerIds.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ namespace Fw {
FW_TYPEID_PRM_BUFF = 46, //!< Parameter Buffer type id
FW_TYPEID_PRM_STR = 47, //!< Parameter string type id
FW_TYPEID_FILE_BUFF = 48, //!< File piece Buffer type id
FW_TYPEID_TRACE_BUFF= 49, //!< Trace Buffer type id

// Other types

Expand Down
1 change: 1 addition & 0 deletions Fw/Com/ComPacket.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ namespace Fw {
FW_PACKET_PACKETIZED_TLM, // !< Packetized telemetry packet type
FW_PACKET_DP, //!< Data product packet
FW_PACKET_IDLE, // !< Idle packet
FW_PACKET_TRACE, // !< Trace packet
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need a new packet type. Where is it used? The traces would come down as a data product.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was part of initial implementation . Removed it.

FW_PACKET_UNKNOWN = 0xFF // !< Unknown packet
} ComPacketType;

Expand Down
16 changes: 16 additions & 0 deletions Fw/Trace/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
####
# F prime CMakeLists.txt:
#
# SOURCE_FILES: combined list of source and autocoding files
# MOD_DEPS: (optional) module dependencies
#
####
set(MOD_DEPS
Fw/Com
)
set(SOURCE_FILES
"${CMAKE_CURRENT_LIST_DIR}/TraceBuffer.cpp"
"${CMAKE_CURRENT_LIST_DIR}/TraceEntity.cpp"
"${CMAKE_CURRENT_LIST_DIR}/Trace.fpp"
)
register_fprime_module()
13 changes: 13 additions & 0 deletions Fw/Trace/Trace.fpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Fw {

type TraceBuffer


@ Port for sending Traces
port Trace(
$id: FwTraceIdType @< Trace ID
ref timeTag: Fw.Time @< Time Tag
$type: TraceCfg.TraceType @< The trace type argument
ref args: TraceBuffer @< Buffer containing serialized trace entry
)
}
60 changes: 60 additions & 0 deletions Fw/Trace/TraceBuffer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#include <Fw/Trace/TraceBuffer.hpp>
#include <Fw/Types/Assert.hpp>
#include <Fw/Log/TextLogString.hpp>
#include <cstdio>

namespace Fw {

TraceBuffer::TraceBuffer(const U8 *args, NATIVE_UINT_TYPE size) {

Check notice

Code scanning / CodeQL

Use of basic integral type

size uses the basic integral type unsigned int rather than a typedef with size and signedness.
SerializeStatus stat = SerializeBufferBase::setBuff(args,size);

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter args has not been checked.

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter size has not been checked.
FW_ASSERT(FW_SERIALIZE_OK == stat, static_cast<FwAssertArgType>(stat));
Shivaly-Reddy marked this conversation as resolved.
Show resolved Hide resolved
}

TraceBuffer::TraceBuffer() {
}

TraceBuffer::~TraceBuffer() {
}

TraceBuffer::TraceBuffer(const TraceBuffer& other) : Fw::SerializeBufferBase() {

Check warning

Code scanning / CppCheck

Member variable 'TraceBuffer::m_bufferData' is not assigned in the copy constructor. Should it be copied?

Member variable 'TraceBuffer::m_bufferData' is not assigned in the copy constructor. Should it be copied?
SerializeStatus stat = SerializeBufferBase::setBuff(other.m_bufferData,other.getBuffLength());

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter other has not been checked.
FW_ASSERT(FW_SERIALIZE_OK == stat, static_cast<FwAssertArgType>(stat));
}

TraceBuffer& TraceBuffer::operator=(const TraceBuffer& other) {
if(this == &other) {
return *this;
}

SerializeStatus stat = SerializeBufferBase::setBuff(other.m_bufferData,other.getBuffLength());
FW_ASSERT(FW_SERIALIZE_OK == stat, static_cast<FwAssertArgType>(stat));
return *this;
}

NATIVE_UINT_TYPE TraceBuffer::getBuffCapacity() const {

Check notice

Code scanning / CodeQL

Use of basic integral type

getBuffCapacity uses the basic integral type unsigned int rather than a typedef with size and signedness.
return sizeof(this->m_bufferData);
}

const U8* TraceBuffer::getBuffAddr() const {
return this->m_bufferData;
}

U8* TraceBuffer::getBuffAddr() {
return this->m_bufferData;
}

void TraceBuffer::toString(std::string& text) const{

//FW_ASSERT(text != nullptr);
FW_ASSERT(this->getBuffLength() < FW_TRACE_BUFFER_MAX_SIZE);

std::string str_format(reinterpret_cast<const char*>(this->m_bufferData),this->getBuffLength());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is this being used? It looks like there is commented out code that we shouldn't deliver.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was initially writing it as a string output to file to be able to read it. I've removed it since. I thought it would be nice to have for debugging purposes in the future.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed commented out code

text += str_format;

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter text has not been checked.

Check warning

Code scanning / CodeQL

Unchecked return value

The return value of non-void function [operator+=](1) is not checked.
/*char temp_text[1];
for (NATIVE_UINT_TYPE i = 0; i < this->getBuffLength(); i++) {
//snprintf(temp_text,sizeof(temp_text),"%d",this->m_bufferData[i]);
temp_text[0] = static_cast<char>(this->m_bufferData[i]);
text[i] = temp_text[0];
}*/
}
}
47 changes: 47 additions & 0 deletions Fw/Trace/TraceBuffer.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* TraceBuffer.hpp
*
* Author: sreddy
*/

/*
* Description:
* This object contains the TraceBuffer type, used for storing trace entries
*/
#ifndef FW_TRACE_BUFFER_HPP
#define FW_TRACE_BUFFER_HPP

#include <FpConfig.hpp>
#include <Fw/Types/Serializable.hpp>
#include <Fw/Cfg/SerIds.hpp>
#include <string>

namespace Fw {

class TraceBuffer : public SerializeBufferBase {
public:

enum {
SERIALIZED_TYPE_ID = FW_TYPEID_TRACE_BUFF,
SERIALIZED_SIZE = FW_TRACE_BUFFER_MAX_SIZE+ sizeof(FwBuffSizeType)
};

TraceBuffer(const U8 *args, NATIVE_UINT_TYPE size);
TraceBuffer();
TraceBuffer(const TraceBuffer& other);
virtual ~TraceBuffer();
TraceBuffer& operator=(const TraceBuffer& other);

NATIVE_UINT_TYPE getBuffCapacity() const; // !< returns capacity, not current size, of buffer
U8* getBuffAddr();
const U8* getBuffAddr() const;
//! Supports writing this buffer to a string representation
void toString(std::string& text) const;

private:
U8 m_bufferData[FW_TRACE_BUFFER_MAX_SIZE]; // command argument buffer
};

}

#endif
92 changes: 92 additions & 0 deletions Fw/Trace/TraceEntity.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/*
* TraceEntity.cpp
*
*/

#include <Fw/Trace/TraceEntity.hpp>
#include <Fw/Types/Assert.hpp>

namespace Fw {

TraceEntity::TraceEntity() : m_id(0) {
this->m_type = FW_PACKET_TRACE;
}

TraceEntity::~TraceEntity() {
}

SerializeStatus TraceEntity::serialize(SerializeBufferBase& buffer) const {
Fixed Show fixed Hide fixed

SerializeStatus stat = ComPacket::serializeBase(buffer);

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter buffer has not been checked.
if (stat != FW_SERIALIZE_OK) {
return stat;
}

stat = buffer.serialize(this->m_id);
if (stat != FW_SERIALIZE_OK) {
return stat;
}

stat = buffer.serialize(this->m_timeTag);
if (stat != FW_SERIALIZE_OK) {
return stat;
}

// We want to add data but not size for the ground software
return buffer.serialize(this->m_traceBuffer.getBuffAddr(),m_traceBuffer.getBuffLength(),true);

}

SerializeStatus TraceEntity::deserialize(SerializeBufferBase& buffer) {
Fixed Show fixed Hide fixed
SerializeStatus stat = deserializeBase(buffer);

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter buffer has not been checked.
if (stat != FW_SERIALIZE_OK) {
return stat;
}

stat = buffer.deserialize(this->m_id);
if (stat != FW_SERIALIZE_OK) {
return stat;
}

stat = buffer.deserialize(this->m_timeTag);
if (stat != FW_SERIALIZE_OK) {
return stat;
}

// remainder of buffer must be telemetry value
NATIVE_UINT_TYPE size = buffer.getBuffLeft();

Check notice

Code scanning / CodeQL

Use of basic integral type

size uses the basic integral type unsigned int rather than a typedef with size and signedness.
stat = buffer.deserialize(this->m_traceBuffer.getBuffAddr(),size,true);
if (stat == FW_SERIALIZE_OK) {
// Shouldn't fail
stat = this->m_traceBuffer.setBuffLen(size);
FW_ASSERT(stat == FW_SERIALIZE_OK,static_cast<NATIVE_INT_TYPE>(stat));
}
return stat;
}

void TraceEntity::setId(FwTraceIdType id) {
this->m_id = id;

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter id has not been checked.
}

void TraceEntity::setTraceBuffer(const TraceBuffer& buffer) {
this->m_traceBuffer = buffer;

Check warning

Code scanning / CodeQL

Unchecked return value

The return value of non-void function [operator=](1) is not checked.

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter buffer has not been checked.
}

void TraceEntity::setTimeTag(const Fw::Time& timeTag) {
this->m_timeTag = timeTag;

Check warning

Code scanning / CodeQL

Unchecked return value

The return value of non-void function [operator=](1) is not checked.

Check warning

Code scanning / CodeQL

Unchecked function argument

This use of parameter timeTag has not been checked.
}

FwTraceIdType TraceEntity::getId() {
return this->m_id;
}

Fw::Time& TraceEntity::getTimeTag() {
return this->m_timeTag;
}

TraceBuffer& TraceEntity::getTraceBuffer() {
return this->m_traceBuffer;
}


} /* namespace Fw */
41 changes: 41 additions & 0 deletions Fw/Trace/TraceEntity.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* TraceEntity.hpp
*
* Author: sreddy
*/
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Put in more comments describing what this class is for. Or, is it misspelled "TraceEntry"?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's way better than TraceEntity. I'll change it.


#ifndef TRACE_ENTITY_HPP_
#define TRACE_ENTITY_HPP_

#include <Fw/Com/ComPacket.hpp>
#include <Fw/Trace/TraceBuffer.hpp>
#include <Fw/Time/Time.hpp>

namespace Fw {

class TraceEntity : public ComPacket {
public:

TraceEntity();
virtual ~TraceEntity();

SerializeStatus serialize(SerializeBufferBase& buffer) const; //!< serialize contents
SerializeStatus deserialize(SerializeBufferBase& buffer);

void setId(FwTraceIdType id);
void setTraceBuffer(const TraceBuffer& buffer);
void setTimeTag(const Fw::Time& timeTag);

FwTraceIdType getId();
Fw::Time& getTimeTag();
TraceBuffer& getTraceBuffer();

protected:
FwTraceIdType m_id; // !< Channel id
Fw::Time m_timeTag; // !< time tag
TraceBuffer m_traceBuffer; // !< serialized argument data
};

} /* namespace Fw */

#endif /* TRACE_ENTITY_HPP_ */
25 changes: 25 additions & 0 deletions Fw/Trace/docs/sdd.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
\page FwTracePort Fw::Trace Port
# Fw::Trace Port

## 1. Introduction
The `Fw::Trace` port is used to pass serialized trace log values with time tags to record diagnostic data that indicates the order of execution in software.

## 2. Requirements
Trace Requirements in FPrime:
1. F’Prime shall provide a feature called Trace to log diagnostic information on various points of software execution.
- It is a way to create time correlation events as a reaction for resetting software.
2. Trace shall provide a port to log the following:
- Event ID : A unique identifier recording a “Trace Event”
- Time Tag : Captures a high precision timestamp
- Client Data : A small sample of user arguments recorded into trace buffer
3. Trace shall create trace points and log events in software automatically for thread switching(?) and ...TBD, ask Tim
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:) Tim says, and port calls in and out, and message queue and dequeue.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol thanks Tim :)

4. Trace shall provide a port for other components or user defined points to log events during software execution.
5. Trace shall record log events in an in-memory logger with data products to dump the buffers
6. Trace shall store data on a per thread basis so there is only one write to the buffer, preventing a need for mutual exclusion.
7. Trace shall maintain a double buffer, one for logs collected in the previous run before the latest reset and the other for current autopsy events. This way during init a data product can be generated for the trace events from prior run while actively collecting current trace logs.
8. Trace logs shall be stored in recoverable memory so they can be preserved over resets
9. Trace shall write the trace data (stored in buffers) to data products upon boot initialization, a reset and by ground command
10. Trace shall provide a ground command to dump trace logs upon request.
11. Trace shall provide a command to enable/disable Trace logging as it can consume significant code and processing
12. Trace entries shall be put in a dictionary so ground systems can automatically decode trace data

4 changes: 4 additions & 0 deletions Ref/Top/RefTopology.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ void configureTopology() {

// Note: Uncomment when using Svc:TlmPacketizer
//tlmSend.setPacketList(RefPacketsPkts, RefPacketsIgnore, 1);

//Configure Trace Logger filename and size to be used for storing trace data
trace.configure("TraceFile.dat",2720000);
trace.filterTraceType(0xF,Svc::TraceFileLogger_Enable::ENABLE);
}

// Public functions for use in main program are namespaced with deployment name Ref
Expand Down
7 changes: 7 additions & 0 deletions Ref/Top/instances.fpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,12 @@ module Ref {

instance typeDemo: Ref.TypeDemo base id 0x1100

instance trace: Svc.TraceFileLogger base id 0x4E00 \
queue size Default.QUEUE_SIZE \
stack size Default.STACK_SIZE \
priority 96


# ----------------------------------------------------------------------
# Queued component instances
# ----------------------------------------------------------------------
Expand Down Expand Up @@ -165,5 +171,6 @@ module Ref {
instance dpBufferManager: Svc.BufferManager base id 0x4C00

instance version: Svc.Version base id 0x4D00


}
1 change: 1 addition & 0 deletions Ref/Top/topology.fpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ module Ref {
instance dpWriter
instance dpBufferManager
instance version
instance trace

# ----------------------------------------------------------------------
# Pattern graph specifiers
Expand Down
1 change: 1 addition & 0 deletions Svc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/TlmChan/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/TlmPacketizer/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/SystemResources/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Ports/VersionPorts")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/TraceFileLogger/")

# Text logger components included by default,
# but can be disabled if FW_ENABLE_TEXT_LOGGING=0 is desired.
Expand Down
Loading
Loading