From 30ac1999f6d77defba35b960e1e8bcaa28a6ebe0 Mon Sep 17 00:00:00 2001
From: Dimitrios Sourlantzis <jem2010@windowslive.com>
Date: Mon, 30 May 2022 13:22:40 +0000
Subject: [PATCH] Read CUC time format

---
 inc/Message.hpp  | 14 ++++++++++++++
 test/Message.cpp | 15 +++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/inc/Message.hpp b/inc/Message.hpp
index d77a1e99..be03a417 100644
--- a/inc/Message.hpp
+++ b/inc/Message.hpp
@@ -535,6 +535,16 @@ public:
 		return reinterpret_cast<double&>(value);
 	}
 
+	/**
+	 * Fetches a timestamp in a custom CUC format consisting of 8 bytes from the current position in the message
+	 */
+	Time::CustomCUC_t readCustomCUCTimeStamp() {
+		Time::CustomCUC_t customCUC_t;
+
+		customCUC_t.elapsed100msTicks = readUint64();
+		return customCUC_t;
+	}
+
 	/**
 	 * Fetches a N-byte string from the current position in the message
 	 *
@@ -744,5 +754,9 @@ template <>
 inline double Message::read() {
 	return readDouble();
 }
+template <>
+inline Time::CustomCUC_t Message::read() {
+	return readCustomCUCTimeStamp();
+}
 
 #endif // ECSS_SERVICES_PACKET_H
diff --git a/test/Message.cpp b/test/Message.cpp
index 619b6be8..43cabf15 100644
--- a/test/Message.cpp
+++ b/test/Message.cpp
@@ -188,6 +188,21 @@ TEST_CASE("Append a CUC timestamp") {
 	}
 }
 
+TEST_CASE("Read a CUC timestamp") {
+	/**
+ 	* Append a custom CUC Time Stamp to a message object and check if is it read corretly
+ 	*/
+		Time::CustomCUC_t timeCUC;
+		timeCUC.elapsed100msTicks = 34511;
+
+		Message message(0, 0, Message::TC, 0);
+		message.appendCustomCUCTimeStamp(timeCUC);
+
+		auto returnTimeCUC = message.readCustomCUCTimeStamp();
+
+		REQUIRE(returnTimeCUC.elapsed100msTicks == 34511);
+}
+
 TEST_CASE("Requirement 7.3.8 (Octet-string)", "[message][ecss]") {
 	Message message(0, 0, Message::TC, 0);
 
-- 
GitLab