F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
Version.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title Version.cpp
3 // \author sreddy
4 // \brief cpp file for Version component implementation class
5 // ======================================================================
6 
8 #include "FpConfig.hpp"
9 
10 #include "versions/version.hpp" //autogenerated file containing hardcoded project and framework versions
11 
12 namespace Svc {
13 
14 // ----------------------------------------------------------------------
15 // Component construction and destruction
16 // ----------------------------------------------------------------------
17 
18 Version ::Version(const char* const compName)
19  : VersionComponentBase(compName), m_enable(false), m_num_custom_elements(0) {
20  Fw::String version_string = "no_ver";
21  // initialize all custom entries
23  // setVersion_enum is by default set to the first enum value, so not setting it here
24  this->verId_db[id].setversion_value(version_string);
25  this->verId_db[id].setversion_status(VersionStatus::FAILURE);
26  }
27 }
28 
30 
31 void Version::config(bool enable) {
32  // Set Verbosity for custom versions
33  this->m_enable = enable;
34 
35  // Setup and send startup TLM
36  this->fwVersion_tlm();
37  this->projectVersion_tlm();
38  this->libraryVersion_tlm();
39 }
40 // ----------------------------------------------------------------------
41 // Handler implementations for user-defined typed input ports
42 // ----------------------------------------------------------------------
43 
44 void Version ::getVersion_handler(FwIndexType portNum,
45  const Svc::VersionCfg::VersionEnum& version_id,
46  Fw::StringBase& version_string,
47  Svc::VersionStatus& status) {
48  FW_ASSERT(version_id.isValid(), version_id.e);
49  U8 version_slot = VersionSlot(version_id.e);
50  version_string = this->verId_db[version_slot].getversion_value();
51  status = this->verId_db[version_slot].getversion_status();
52 }
53 
54 void Version ::setVersion_handler(FwIndexType portNum,
55  const Svc::VersionCfg::VersionEnum& version_id,
56  Fw::StringBase& version_string,
57  Svc::VersionStatus& status) {
58  FW_ASSERT(version_id.isValid(), version_id.e);
59  VersionSlot ver_slot = VersionSlot(version_id.e);
60  this->verId_db[ver_slot].setversion_enum(version_id);
61  this->verId_db[ver_slot].setversion_value(version_string);
62  this->verId_db[ver_slot].setversion_status(status);
63  this->m_num_custom_elements++;
64  this->customVersion_tlm(ver_slot);
65 }
66 
67 // ----------------------------------------------------------------------
68 // Handler implementations for commands
69 // ----------------------------------------------------------------------
70 
71 void Version ::ENABLE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, Svc::VersionEnabled enable) {
72  this->m_enable = (enable == VersionEnabled::ENABLED);
73 
74  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
75 }
76 
77 // Command handler to event versions
78 void Version ::VERSION_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, Svc::VersionType version_type) {
79 
80  FW_ASSERT(version_type.isValid(),version_type.e);
81 
82  switch (version_type) {
84  this->projectVersion_tlm();
85  break;
86 
88  this->fwVersion_tlm();
89  break;
90 
92  this->libraryVersion_tlm();
93  break;
94 
96  this->customVersion_tlm_all();
97  break;
98 
99  case (Svc::VersionType::ALL):
100  this->projectVersion_tlm();
101  this->fwVersion_tlm();
102  this->libraryVersion_tlm();
103  this->customVersion_tlm_all();
104  break;
105  default:
106  FW_ASSERT(0, version_type);
107  break;
108  }
109 
110  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
111 }
112 // ----------------------------------------------------------------------
113 // implementations for internal functions
114 // ----------------------------------------------------------------------
115 // Send both events and tlm for framework version
116 void Version ::fwVersion_tlm() {
118  this->log_ACTIVITY_LO_FrameworkVersion(fw_event);
120  this->tlmWrite_FrameworkVersion(fw_tlm);
121 }
122 
123 // Send both events and tlm for project version
124 void Version ::projectVersion_tlm() {
126  this->log_ACTIVITY_LO_ProjectVersion(proj_event);
128  this->tlmWrite_ProjectVersion(proj_tlm);
129 }
130 
131 // Send both events and tlm for library versions
132 void Version ::libraryVersion_tlm() {
133 
134  // Process libraries array
135  for (U8 i = 0; i < Project::Version::LIBRARY_VERSIONS_COUNT; i++) {
136  // Emit Event/TLM on library versions
138  // Write to Events
139  switch (i) {
140  case VER_SLOT_00:
142  break;
143  case VER_SLOT_01:
145  break;
146  case VER_SLOT_02:
148  break;
149  case VER_SLOT_03:
151  break;
152  case VER_SLOT_04:
154  break;
155  case VER_SLOT_05:
157  break;
158  case VER_SLOT_06:
160  break;
161  case VER_SLOT_07:
163  break;
164  case VER_SLOT_08:
166  break;
167  case VER_SLOT_09:
169  break;
170  default:
171  // It is possible to have more than 10 library versions; however design agreed to only
172  // provide 10 TLM channels for it
173  break;
174  }
175  }
176 }
177 
178 // Send all events and tlm (if verbosity is enabled) for custom versions
179 void Version ::customVersion_tlm_all() {
180  for (U8 i = 0; (m_enable == true) && (m_num_custom_elements != 0) && (i < Svc::VersionCfg::VersionEnum::NUM_CONSTANTS);
181  i++) {
182  Version::customVersion_tlm(VersionSlot(i));
183  }
184 }
185 
186 // Send events and tlm (if verbosity is enabled) for custom versions
187 void Version ::customVersion_tlm(VersionSlot custom_slot) {
188  // Process custom version TLM only if verbosity is enabled and there are any valid writes to it;
189  // it doesn't necessarily have to be consecutive
190  if ((this->verId_db[custom_slot].getversion_value() != "no_ver") &&
191  (this->m_num_custom_elements > 0)) { // Write TLM for valid writes
192 
193  // Emit Events/TLM on custom versions
194  this->log_ACTIVITY_LO_CustomVersions(this->verId_db[custom_slot].getversion_enum(),
195  this->verId_db[custom_slot].getversion_value());
196 
197  if (m_enable == true) { //Send TLM only if verbosity is enabled
198  // Write to TLM
199  switch (custom_slot) {
200  case VER_SLOT_00:
201  this->tlmWrite_CustomVersion01(verId_db[custom_slot]);
202  break;
203  case VER_SLOT_01:
204  this->tlmWrite_CustomVersion02(verId_db[custom_slot]);
205  break;
206  case VER_SLOT_02:
207  this->tlmWrite_CustomVersion03(verId_db[custom_slot]);
208  break;
209  case VER_SLOT_03:
210  this->tlmWrite_CustomVersion04(verId_db[custom_slot]);
211  break;
212  case VER_SLOT_04:
213  this->tlmWrite_CustomVersion05(verId_db[custom_slot]);
214  break;
215  case VER_SLOT_05:
216  this->tlmWrite_CustomVersion06(verId_db[custom_slot]);
217  break;
218  case VER_SLOT_06:
219  this->tlmWrite_CustomVersion07(verId_db[custom_slot]);
220  break;
221  case VER_SLOT_07:
222  this->tlmWrite_CustomVersion08(verId_db[custom_slot]);
223  break;
224  case VER_SLOT_08:
225  this->tlmWrite_CustomVersion09(verId_db[custom_slot]);
226  break;
227  case VER_SLOT_09:
228  this->tlmWrite_CustomVersion10(verId_db[custom_slot]);
229  break;
230  default:
231  // There are only 10 custom slots available
232  FW_ASSERT(0, custom_slot);
233  break;
234  }
235  }
236  }
237 }
238 
239 } // namespace Svc
#define FW_ASSERT(...)
Definition: Assert.hpp:14
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:30
U32 FwOpcodeType
Definition: FpConfig.h:91
PlatformIndexType FwIndexType
Definition: FpConfig.h:25
C++-compatible configuration header for fprime configuration.
@ OK
Command successfully executed.
void setversion_status(Svc::VersionStatus::T version_status)
Set member version_status.
Fw::ExternalString & getversion_value()
Get member version_value.
void setversion_value(const Fw::StringBase &version_value)
Set member version_value.
Svc::VersionStatus::T getversion_status() const
Get member version_status.
void setversion_enum(Svc::VersionCfg::VersionEnum::T version_enum)
Set member version_enum.
@ NUM_CONSTANTS
The number of enumerated constants.
bool isValid() const
Check raw enum value for validity.
Auto-generated base for Version component.
void tlmWrite_CustomVersion04(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion04.
void log_ACTIVITY_LO_CustomVersions(Svc::VersionCfg::VersionEnum version_enum, const Fw::StringBase &version_value)
void tlmWrite_ProjectVersion(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
void tlmWrite_FrameworkVersion(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
void tlmWrite_CustomVersion03(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion03.
void tlmWrite_LibraryVersion09(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion09.
void tlmWrite_LibraryVersion03(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion03.
void tlmWrite_CustomVersion07(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion07.
void tlmWrite_LibraryVersion05(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion05.
void log_ACTIVITY_LO_FrameworkVersion(const Fw::StringBase &version)
void tlmWrite_CustomVersion01(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
void tlmWrite_LibraryVersion04(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion04.
void tlmWrite_CustomVersion08(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion08.
void log_ACTIVITY_LO_LibraryVersions(const Fw::StringBase &version)
void tlmWrite_LibraryVersion08(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion08.
void tlmWrite_LibraryVersion07(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion07.
void tlmWrite_CustomVersion09(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion09.
void tlmWrite_LibraryVersion01(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
void log_ACTIVITY_LO_ProjectVersion(const Fw::StringBase &version)
void tlmWrite_LibraryVersion06(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion06.
void tlmWrite_CustomVersion02(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion02.
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
void tlmWrite_LibraryVersion02(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion02.
void tlmWrite_CustomVersion05(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion05.
void tlmWrite_LibraryVersion10(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel LibraryVersion10.
void tlmWrite_CustomVersion06(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion06.
void tlmWrite_CustomVersion10(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time())
Write telemetry channel CustomVersion10.
Tracks versions for project, framework and user defined versions etc.
@ ENABLED
verbosity enabled
Version(const char *const compName)
Construct Version object.
Definition: Version.cpp:18
void config(bool enable)
configure version's verbosity and startup
Definition: Version.cpp:31
~Version()
Destroy Version object.
Definition: Version.cpp:29
An enumeration for version status.
@ FAILURE
Failure to get version.
An enumeration for Version Type.
bool isValid() const
Check raw enum value for validity.
T e
The raw enum value.
@ LIBRARY
library version
@ FRAMEWORK
framework version
@ CUSTOM
custom version
@ ALL
all above versions
@ PROJECT
project version
static const char *const LIBRARY_VERSIONS[]
Definition: version.hpp:15
static const char *const PROJECT_VERSION
Definition: version.hpp:13
static const FwIndexType LIBRARY_VERSIONS_COUNT
Definition: version.hpp:14
static const char *const FRAMEWORK_VERSION
Definition: version.hpp:12