Skip to content

Commit 3d2d23f

Browse files
authored
Remove real time offset correction (#484)
The parameter `realTimeOffsetCorrection` made synchronizing the real time surprising, confusing, and even unreliable. Since we increased our default RF data rate from 1200 Bd to 9600 Bd, the correction is also less useful.
2 parents 6d5be76 + 821b537 commit 3d2d23f

File tree

9 files changed

+21
-48
lines changed

9 files changed

+21
-48
lines changed

Sts1CobcSw/Firmware/RfCommunicationThread.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -882,9 +882,6 @@ auto GetValue(Parameter::Id parameterId) -> Parameter::Value
882882
return rf::GetRxDataRate();
883883
case Parameter::Id::txDataRate:
884884
return rf::GetTxDataRate();
885-
case Parameter::Id::realTimeOffsetCorrection:
886-
return static_cast<std::uint32_t>(persistentVariables.Load<"realTimeOffsetCorrection">()
887-
/ s);
888885
case Parameter::Id::maxEduIdleDuration:
889886
return static_cast<std::uint32_t>(persistentVariables.Load<"maxEduIdleDuration">() / s);
890887
case Parameter::Id::newEduResultIsAvailable:
@@ -906,9 +903,6 @@ auto Set(Parameter parameter) -> void
906903
rf::SetTxDataRate(parameter.value);
907904
txDataRateTopic.publish(parameter.value);
908905
break;
909-
case Parameter::Id::realTimeOffsetCorrection:
910-
persistentVariables.Store<"realTimeOffsetCorrection">(parameter.value * s);
911-
break;
912906
case Parameter::Id::maxEduIdleDuration:
913907
persistentVariables.Store<"maxEduIdleDuration">(parameter.value * s);
914908
break;

Sts1CobcSw/Firmware/StartupAndSpiSupervisorThread.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class StartupAndSpiSupervisorThread : public RODOS::StaticThread<stackSize>
8080
RODOS::hwResetAndReboot();
8181
}
8282
InitializeAndFeedResetDog();
83-
UpdateRealTimeOffset(persistentVariables.Load<"realTime">(), /*useOffsetCorrection=*/false);
83+
UpdateRealTimeOffset(persistentVariables.Load<"realTime">());
8484
DEBUG_PRINT_REAL_TIME();
8585
SetUpFileSystem();
8686
edu::Initialize();

Sts1CobcSw/FramSections/FramLayout.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ inline constexpr auto persistentVariables =
4040
PersistentVariableInfo<"antennasShouldBeDeployed", bool>,
4141
PersistentVariableInfo<"realTime", RealTime>,
4242
PersistentVariableInfo<"realTimeOffset", Duration>,
43-
PersistentVariableInfo<"realTimeOffsetCorrection", Duration>,
4443
PersistentVariableInfo<"nFirmwareChecksumErrors", std::uint8_t>,
4544
PersistentVariableInfo<"epsIsWorking", bool>,
4645
PersistentVariableInfo<"flashIsWorking", bool>,

Sts1CobcSw/RealTime/RealTime.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#include <Sts1CobcSw/RodosTime/RodosTime.hpp>
66

77
#include <strong_type/affine_point.hpp>
8-
#include <strong_type/difference.hpp>
98
#include <strong_type/type.hpp>
109

1110
#include <rodos_no_using_namespace.h>
@@ -15,13 +14,10 @@
1514

1615
namespace sts1cobcsw
1716
{
18-
auto UpdateRealTimeOffset(RealTime realTime, bool useOffsetCorrection) -> void
17+
auto UpdateRealTimeOffset(RealTime realTime) -> void
1918
{
2019
auto currentRodosTime = CurrentRodosTime();
21-
auto offsetCorrection =
22-
useOffsetCorrection ? persistentVariables.Load<"realTimeOffsetCorrection">() : Duration(0);
23-
auto newRealTimeOffset =
24-
RodosTime(value_of(realTime) * RODOS::SECONDS) - currentRodosTime + offsetCorrection;
20+
auto newRealTimeOffset = RodosTime(value_of(realTime) * RODOS::SECONDS) - currentRodosTime;
2521
persistentVariables.Store<"realTimeOffset">(newRealTimeOffset);
2622
}
2723
}

Sts1CobcSw/RealTime/RealTime.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace sts1cobcsw
1414
[[nodiscard]] auto CurrentRealTime() -> RealTime;
1515
[[nodiscard]] auto ToRodosTime(RealTime realTime) -> RodosTime;
1616
[[nodiscard]] auto ToRealTime(RodosTime rodosTime) -> RealTime;
17-
auto UpdateRealTimeOffset(RealTime realTime, bool useOffsetCorrection = true) -> void;
17+
auto UpdateRealTimeOffset(RealTime realTime) -> void;
1818
}
1919

2020

Sts1CobcSw/RfProtocols/Vocabulary.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ struct Parameter
1717
{
1818
rxDataRate = 1,
1919
txDataRate,
20-
realTimeOffsetCorrection,
2120
maxEduIdleDuration,
2221
newEduResultIsAvailable,
2322
};

Sts1CobcSw/RfProtocols/Vocabulary.ipp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ constexpr auto IsValid(Parameter::Id parameterId) -> bool
1212
{
1313
case Parameter::Id::rxDataRate:
1414
case Parameter::Id::txDataRate:
15-
case Parameter::Id::realTimeOffsetCorrection:
1615
case Parameter::Id::maxEduIdleDuration:
1716
case Parameter::Id::newEduResultIsAvailable:
1817
return true;

Tests/SupportPrograms/FramExplorer.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,6 @@ auto PrintAllVariables() -> void
345345
PrintVariable("antennasShouldBeDeployed");
346346
PrintVariable("realTime");
347347
PrintVariable("realTimeOffset");
348-
PrintVariable("realTimeOffsetCorrection");
349348
PrintVariable("nFirmwareChecksumErrors");
350349
PrintVariable("epsIsWorking");
351350
PrintVariable("flashIsWorking");
@@ -385,7 +384,6 @@ auto ResetAllVariables() -> void
385384
persistentVariables.Store<"antennasShouldBeDeployed">(false);
386385
persistentVariables.Store<"realTime">(RealTime(0));
387386
persistentVariables.Store<"realTimeOffset">(Duration(0));
388-
persistentVariables.Store<"realTimeOffsetCorrection">(Duration(0));
389387
persistentVariables.Store<"nFirmwareChecksumErrors">(0);
390388
persistentVariables.Store<"epsIsWorking">(false);
391389
persistentVariables.Store<"flashIsWorking">(false);
@@ -455,10 +453,6 @@ auto PrintVariable(etl::string_view variable) -> void // NOLINT(*value-param)
455453
{
456454
etl::to_string(value_of(persistentVariables.Load<"realTimeOffset">()), value);
457455
}
458-
else if(variable == "realTimeOffsetCorrection")
459-
{
460-
etl::to_string(value_of(persistentVariables.Load<"realTimeOffsetCorrection">()), value);
461-
}
462456
else if(variable == "nFirmwareChecksumErrors")
463457
{
464458
etl::to_string(persistentVariables.Load<"nFirmwareChecksumErrors">(), value);
@@ -599,11 +593,6 @@ auto SetVariable(etl::string_view variable, etl::string_view value) -> void //
599593
{
600594
WriteAndConvertFunction<"realTimeOffset", Duration, ParseAsInt64>(variable, value);
601595
}
602-
else if(variable == "realTimeOffsetCorrection")
603-
{
604-
WriteAndConvertFunction<"realTimeOffsetCorrection", Duration, ParseAsInt64>(variable,
605-
value);
606-
}
607596
else if(variable == "nFirmwareChecksumErrors")
608597
{
609598
WriteAndConvertFunction<"nFirmwareChecksumErrors", std::uint8_t, ParseAsUInt32>(variable,

Tests/UnitTests/Requests.test.cpp

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -210,36 +210,34 @@ TEST_CASE("PerformAFunctionRequest")
210210
TEST_CASE("ReportParameterValuesRequest")
211211
{
212212
auto buffer = etl::vector<Byte, sts1cobcsw::tc::maxPacketLength>{};
213-
buffer.resize(6);
214-
buffer[0] = 0x05_b; // Number of ParameterIDs
213+
buffer.resize(5);
214+
buffer[0] = 0x04_b; // Number of ParameterIDs
215215
buffer[1] = 0x01_b; // ParameterID 1
216216
buffer[2] = 0x02_b; // ParameterID 2
217217
buffer[3] = 0x03_b; // ParameterID 3
218218
buffer[4] = 0x04_b; // ParameterID 4
219-
buffer[5] = 0x05_b; // ParameterID 5
220219

221220
auto parseResult = sts1cobcsw::ParseAsReportParameterValuesRequest(buffer);
222221
REQUIRE(parseResult.has_value());
223222
auto const & request = parseResult.value();
224223

225-
CHECK(request.nParameters == 0x05);
224+
CHECK(request.nParameters == 0x04);
226225
CHECK(request.parameterIds[0] == sts1cobcsw::Parameter::Id::rxDataRate);
227226
CHECK(request.parameterIds[1] == sts1cobcsw::Parameter::Id::txDataRate);
228-
CHECK(request.parameterIds[2] == sts1cobcsw::Parameter::Id::realTimeOffsetCorrection);
229-
CHECK(request.parameterIds[3] == sts1cobcsw::Parameter::Id::maxEduIdleDuration);
230-
CHECK(request.parameterIds[4] == sts1cobcsw::Parameter::Id::newEduResultIsAvailable);
227+
CHECK(request.parameterIds[2] == sts1cobcsw::Parameter::Id::maxEduIdleDuration);
228+
CHECK(request.parameterIds[3] == sts1cobcsw::Parameter::Id::newEduResultIsAvailable);
231229

232230
// No more than 5 Parameters are allowed
233231
buffer[0] = 0x06_b;
234232
parseResult = sts1cobcsw::ParseAsReportParameterValuesRequest(buffer);
235233
CHECK(parseResult.has_error());
236234
CHECK(parseResult.error() == ErrorCode::invalidApplicationData);
237-
buffer[0] = 0x05_b;
235+
buffer[0] = 0x04_b;
238236

239-
// For 5 Parameter, a buffer of 6 is required
237+
// For 4 Parameter, a buffer of 5 is required
240238
auto smallerBuffer = etl::vector<Byte, 5>{};
241-
smallerBuffer.resize(5);
242-
smallerBuffer[0] = 0x05_b; // Number of ParameterIDs
239+
smallerBuffer.resize(4);
240+
smallerBuffer[0] = 0x04_b; // Number of ParameterIDs
243241
smallerBuffer[1] = 0x01_b; // ParameterID 1
244242
smallerBuffer[2] = 0x02_b; // ParameterID 2
245243
smallerBuffer[3] = 0x03_b; // ParameterID 3
@@ -260,8 +258,8 @@ TEST_CASE("ReportParameterValuesRequest")
260258
TEST_CASE("SetParameterValuesRequest")
261259
{
262260
auto buffer = etl::vector<Byte, sts1cobcsw::tc::maxPacketLength>{};
263-
buffer.resize(26);
264-
buffer[0] = 0x05_b; // Number of ParameterIDs
261+
buffer.resize(21);
262+
buffer[0] = 0x04_b; // Number of ParameterIDs
265263
buffer[1] = 0x01_b; // ParameterId 1
266264
buffer[2] = 0xAA_b; // ParameterValue 1 (high byte)
267265
buffer[3] = 0xBB_b; // ParameterValue 1
@@ -274,13 +272,12 @@ TEST_CASE("SetParameterValuesRequest")
274272
buffer[10] = 0xEE_b; // ParameterValue 2 (low byte)
275273
buffer[11] = 0x03_b; // ParameterId 3
276274
buffer[16] = 0x04_b; // ParameterId 4
277-
buffer[21] = 0x05_b; // ParameterId 5
278275

279276
auto parseResult = sts1cobcsw::ParseAsSetParameterValuesRequest(buffer);
280277
CHECK(parseResult.has_value());
281278
auto request = parseResult.value();
282279

283-
CHECK(request.nParameters == 0x05);
280+
CHECK(request.nParameters == 0x04);
284281
CHECK(request.parameters[0].id == sts1cobcsw::Parameter::Id::rxDataRate);
285282
CHECK(request.parameters[0].value == 0xAABB'CCDD);
286283
CHECK(request.parameters[1].id == sts1cobcsw::Parameter::Id::txDataRate);
@@ -298,12 +295,12 @@ TEST_CASE("SetParameterValuesRequest")
298295
parseResult = sts1cobcsw::ParseAsSetParameterValuesRequest(buffer);
299296
CHECK(parseResult.has_error());
300297
CHECK(parseResult.error() == ErrorCode::invalidApplicationData);
301-
buffer[0] = 0x05_b;
298+
buffer[0] = 0x04_b;
302299

303-
// For 5 Parameter, a buffer of 26 is required
304-
auto smallerBuffer = etl::vector<Byte, 25>{};
305-
smallerBuffer.resize(25);
306-
smallerBuffer[0] = 0x05_b; // Number of ParameterIDs
300+
// For 4 Parameter, a buffer of 25 is required
301+
auto smallerBuffer = etl::vector<Byte, 24>{};
302+
smallerBuffer.resize(24);
303+
smallerBuffer[0] = 0x04_b; // Number of ParameterIDs
307304
parseResult = sts1cobcsw::ParseAsSetParameterValuesRequest(smallerBuffer);
308305
CHECK(parseResult.has_error());
309306
CHECK(parseResult.error() == ErrorCode::invalidDataLength);

0 commit comments

Comments
 (0)