F´ Flight Software - C/C++ Documentation
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 
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].set_version_value(version_string);
25  this->verId_db[id].set_version_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].get_version_value();
51  status = this->verId_db[version_slot].get_version_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].set_version_enum(version_id);
61  this->verId_db[ver_slot].set_version_value(version_string);
62  this->verId_db[ver_slot].set_version_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  FW_ASSERT(version_type.isValid(), version_type.e);
80 
81  switch (version_type) {
83  this->projectVersion_tlm();
84  break;
85 
87  this->fwVersion_tlm();
88  break;
89 
91  this->libraryVersion_tlm();
92  break;
93 
95  this->customVersion_tlm_all();
96  break;
97 
98  case (Svc::VersionType::ALL):
99  this->projectVersion_tlm();
100  this->fwVersion_tlm();
101  this->libraryVersion_tlm();
102  this->customVersion_tlm_all();
103  break;
104  default:
105  FW_ASSERT(0, version_type);
106  break;
107  }
108 
109  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
110 }
111 // ----------------------------------------------------------------------
112 // implementations for internal functions
113 // ----------------------------------------------------------------------
114 // Send both events and tlm for framework version
115 void Version ::fwVersion_tlm() {
117  this->log_ACTIVITY_LO_FrameworkVersion(fw_event);
119  this->tlmWrite_FrameworkVersion(fw_tlm);
120 }
121 
122 // Send both events and tlm for project version
123 void Version ::projectVersion_tlm() {
125  this->log_ACTIVITY_LO_ProjectVersion(proj_event);
127  this->tlmWrite_ProjectVersion(proj_tlm);
128 }
129 
130 // Send both events and tlm for library versions
131 void Version ::libraryVersion_tlm() {
132  // Process libraries array
133  for (U8 i = 0; i < Project::Version::LIBRARY_VERSIONS_COUNT; i++) {
134  // Emit Event/TLM on library versions
136  // Write to Events
137  switch (i) {
138  case VER_SLOT_00:
140  break;
141  case VER_SLOT_01:
143  break;
144  case VER_SLOT_02:
146  break;
147  case VER_SLOT_03:
149  break;
150  case VER_SLOT_04:
152  break;
153  case VER_SLOT_05:
155  break;
156  case VER_SLOT_06:
158  break;
159  case VER_SLOT_07:
161  break;
162  case VER_SLOT_08:
164  break;
165  case VER_SLOT_09:
167  break;
168  default:
169  // It is possible to have more than 10 library versions; however design agreed to only
170  // provide 10 TLM channels for it
171  break;
172  }
173  }
174 }
175 
176 // Send all events and tlm (if verbosity is enabled) for custom versions
177 void Version ::customVersion_tlm_all() {
178  for (U8 i = 0;
179  (m_enable == true) && (m_num_custom_elements != 0) && (i < Svc::VersionCfg::VersionEnum::NUM_CONSTANTS); i++) {
180  Version::customVersion_tlm(VersionSlot(i));
181  }
182 }
183 
184 // Send events and tlm (if verbosity is enabled) for custom versions
185 void Version ::customVersion_tlm(VersionSlot custom_slot) {
186  // Process custom version TLM only if verbosity is enabled and there are any valid writes to it;
187  // it doesn't necessarily have to be consecutive
188  if ((this->verId_db[custom_slot].get_version_value() != "no_ver") &&
189  (this->m_num_custom_elements > 0)) { // Write TLM for valid writes
190 
191  // Emit Events/TLM on custom versions
192  this->log_ACTIVITY_LO_CustomVersions(this->verId_db[custom_slot].get_version_enum(),
193  this->verId_db[custom_slot].get_version_value());
194 
195  if (m_enable == true) { // Send TLM only if verbosity is enabled
196  // Write to TLM
197  switch (custom_slot) {
198  case VER_SLOT_00:
199  this->tlmWrite_CustomVersion01(verId_db[custom_slot]);
200  break;
201  case VER_SLOT_01:
202  this->tlmWrite_CustomVersion02(verId_db[custom_slot]);
203  break;
204  case VER_SLOT_02:
205  this->tlmWrite_CustomVersion03(verId_db[custom_slot]);
206  break;
207  case VER_SLOT_03:
208  this->tlmWrite_CustomVersion04(verId_db[custom_slot]);
209  break;
210  case VER_SLOT_04:
211  this->tlmWrite_CustomVersion05(verId_db[custom_slot]);
212  break;
213  case VER_SLOT_05:
214  this->tlmWrite_CustomVersion06(verId_db[custom_slot]);
215  break;
216  case VER_SLOT_06:
217  this->tlmWrite_CustomVersion07(verId_db[custom_slot]);
218  break;
219  case VER_SLOT_07:
220  this->tlmWrite_CustomVersion08(verId_db[custom_slot]);
221  break;
222  case VER_SLOT_08:
223  this->tlmWrite_CustomVersion09(verId_db[custom_slot]);
224  break;
225  case VER_SLOT_09:
226  this->tlmWrite_CustomVersion10(verId_db[custom_slot]);
227  break;
228  default:
229  // There are only 10 custom slots available
230  FW_ASSERT(0, custom_slot);
231  break;
232  }
233  }
234  }
235 }
236 
237 } // namespace Svc
static const char *const LIBRARY_VERSIONS[]
Definition: version.hpp:15
void tlmWrite_LibraryVersion10(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion10.
void tlmWrite_CustomVersion07(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion07.
void set_version_value(const Fw::StringBase &version_value)
Set member version_value.
void tlmWrite_LibraryVersion04(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion04.
FwIdType FwOpcodeType
The type of a command opcode.
void tlmWrite_LibraryVersion01(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
static const char *const PROJECT_VERSION
Definition: version.hpp:13
void set_version_status(Svc::VersionStatus::T version_status)
Set member version_status.
void tlmWrite_CustomVersion02(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion02.
all above versions
void tlmWrite_CustomVersion10(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion10.
void tlmWrite_LibraryVersion06(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion06.
void tlmWrite_CustomVersion03(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion03.
Svc::VersionStatus::T get_version_status() const
Get member version_status.
void tlmWrite_LibraryVersion03(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion03.
static const FwIndexType LIBRARY_VERSIONS_COUNT
Definition: version.hpp:14
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
void tlmWrite_LibraryVersion08(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion08.
Failure to get version.
void tlmWrite_CustomVersion05(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion05.
Auto-generated base for Version component.
void log_ACTIVITY_LO_ProjectVersion(const Fw::StringBase &version) const
static const char *const FRAMEWORK_VERSION
Definition: version.hpp:12
An enumeration for version status.
void set_version_enum(Svc::VersionCfg::VersionEnum::T version_enum)
Set member version_enum.
T e
The raw enum value.
void tlmWrite_LibraryVersion05(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion05.
The number of enumerated constants.
Fw::ExternalString & get_version_value()
Get member version_value.
Command successfully executed.
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:53
Version(const char *const compName)
Construct Version object.
Definition: Version.cpp:18
void log_ACTIVITY_LO_CustomVersions(Svc::VersionCfg::VersionEnum version_enum, const Fw::StringBase &version_value) const
void config(bool enable)
configure version&#39;s verbosity and startup
Definition: Version.cpp:31
void tlmWrite_CustomVersion09(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion09.
PlatformIndexType FwIndexType
void tlmWrite_CustomVersion06(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion06.
void tlmWrite_LibraryVersion07(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion07.
bool isValid() const
Check raw enum value for validity.
~Version()
Destroy Version object.
Definition: Version.cpp:29
RateGroupDivider component implementation.
An enumeration for Version Type.
void tlmWrite_LibraryVersion02(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion02.
void tlmWrite_CustomVersion04(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion04.
void tlmWrite_CustomVersion01(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
void log_ACTIVITY_LO_FrameworkVersion(const Fw::StringBase &version) const
void log_ACTIVITY_LO_LibraryVersions(const Fw::StringBase &version) const
Tracks versions for project, framework and user defined versions etc.
#define FW_ASSERT(...)
Definition: Assert.hpp:14
bool isValid() const
Check raw enum value for validity.
void tlmWrite_CustomVersion08(const Svc::CustomVersionDb &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel CustomVersion08.
void tlmWrite_LibraryVersion09(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
Write telemetry channel LibraryVersion09.
void tlmWrite_FrameworkVersion(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const
void tlmWrite_ProjectVersion(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time()) const