GCC Code Coverage Report


Directory: ./
File: Fw/Tlm/TlmPacket.cpp
Date: 2026-09-23 22:11:34
Exec Total Coverage
Lines: 26 71 36.6%
Functions: 6 11 54.5%
Branches: 7 34 20.6%

Line Branch Exec Source
1 /*
2 * TlmPacket.cpp
3 *
4 * Created on: May 24, 2014
5 * Author: Timothy Canham
6 */
7 #include <Fw/Tlm/TlmPacket.hpp>
8 #include <Fw/Types/Assert.hpp>
9 #include <Fw/Types/Serializable.hpp>
10
11 namespace Fw {
12
13
1/1
✓ Branch 2 taken 241 times.
241 TlmPacket::TlmPacket() : m_numEntries(0) {
14 241 this->m_type = ComPacketType::FW_PACKET_TELEM;
15
1/1
✓ Branch 1 taken 241 times.
241 this->m_tlmBuffer.resetSer();
16 241 }
17
18 482 TlmPacket::~TlmPacket() {}
19
20 242 SerializeStatus TlmPacket::resetPktSer() {
21 242 this->m_tlmBuffer.resetSer();
22 // reset packet count
23 242 this->m_numEntries = 0;
24 // make sure packet type is correct before serializing. It should
25 // never be anything but FW_PACKET_TELEM, so assert.
26 242 FW_ASSERT(ComPacketType::FW_PACKET_TELEM == this->m_type, static_cast<FwAssertArgType>(this->m_type));
27 // serialize descriptor
28 // The function serializeBase inherited from ComPacket converts this->m_type
29 // to type FwPacketDescriptorType and serializes the result into this->m_tlmBuffer.
30 242 return this->serializeBase(this->m_tlmBuffer);
31 }
32
33 ✗ SerializeStatus TlmPacket::resetPktDeser() {
34 ✗ this->m_tlmBuffer.resetDeser();
35 // deserialize descriptor
36 // The function deserializeBase inherited from ComPacket deserializes a
37 // value of type FwPacketDescriptorType from this->m_tlmBuffer and stores it
38 // into this->m_type.
39 ✗ Fw::SerializeStatus stat = this->deserializeBase(this->m_tlmBuffer);
40 ✗ if (stat != Fw::FW_SERIALIZE_OK) {
41 ✗ return stat;
42 }
43 // make sure that this->m_tlmBuffer stores a telemetry packet
44 ✗ if (this->m_type != ComPacketType::FW_PACKET_TELEM) {
45 ✗ return Fw::FW_DESERIALIZE_TYPE_MISMATCH;
46 }
47
48 ✗ return Fw::FW_SERIALIZE_OK;
49 }
50
51 241 FwSizeType TlmPacket::getNumEntries() {
52 241 return this->m_numEntries;
53 }
54
55 239 Fw::ComBuffer& TlmPacket::getBuffer() {
56 239 return this->m_tlmBuffer;
57 }
58
59 ✗ void TlmPacket::setBuffer(Fw::ComBuffer& buffer) {
60 ✗ this->m_tlmBuffer = buffer;
61 ✗ }
62
63 3056 SerializeStatus TlmPacket::addValue(FwChanIdType id, Time& timeTag, TlmBuffer& buffer) {
64 // check to make sure there is room for all the fields
65 3056 FwSizeType left = this->m_tlmBuffer.getCapacity() - this->m_tlmBuffer.getSize();
66
2/2
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 3055 times.
3056 if ((sizeof(FwChanIdType) + Time::SERIALIZED_SIZE + buffer.getSize()) > left) {
67 1 return Fw::FW_SERIALIZE_NO_ROOM_LEFT;
68 }
69
70 // serialize items into buffer
71
72 // id
73 3055 SerializeStatus stat = this->m_tlmBuffer.serializeFrom(id);
74
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3055 times.
3055 if (stat != Fw::FW_SERIALIZE_OK) {
75 ✗ return stat;
76 }
77
78 // time tag
79 3055 stat = this->m_tlmBuffer.serializeFrom(timeTag);
80
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3055 times.
3055 if (stat != Fw::FW_SERIALIZE_OK) {
81 ✗ return stat;
82 }
83
84 // telemetry buffer
85 3055 stat = this->m_tlmBuffer.serializeFrom(buffer.getBuffAddr(), buffer.getSize(), Fw::Serialization::OMIT_LENGTH);
86
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3055 times.
3055 if (stat != Fw::FW_SERIALIZE_OK) {
87 ✗ return stat;
88 }
89
90 // increment number of packets
91 3055 this->m_numEntries++;
92
93 3055 return Fw::FW_SERIALIZE_OK;
94 }
95
96 // extract telemetry value
97 ✗ SerializeStatus TlmPacket::extractValue(FwChanIdType& id, Time& timeTag, TlmBuffer& buffer, FwSizeType bufferSize) {
98 // deserialize items out of buffer
99
100 // id
101 ✗ SerializeStatus stat = this->m_tlmBuffer.deserializeTo(id);
102 ✗ if (stat != Fw::FW_SERIALIZE_OK) {
103 ✗ return stat;
104 }
105
106 // time tag
107 ✗ stat = this->m_tlmBuffer.deserializeTo(timeTag);
108 ✗ if (stat != Fw::FW_SERIALIZE_OK) {
109 ✗ return stat;
110 }
111
112 // telemetry buffer
113 ✗ stat = this->m_tlmBuffer.deserializeTo(buffer.getBuffAddr(), bufferSize, Fw::Serialization::OMIT_LENGTH);
114 ✗ if (stat != Fw::FW_SERIALIZE_OK) {
115 ✗ return stat;
116 }
117
118 // set buffer size
119 ✗ stat = buffer.setBuffLen(bufferSize);
120 ✗ if (stat != Fw::FW_SERIALIZE_OK) {
121 ✗ return stat;
122 }
123
124 ✗ return Fw::FW_SERIALIZE_OK;
125 }
126
127 ✗ SerializeStatus TlmPacket::serializeTo(SerialBufferBase& buffer, Fw::Endianness mode) const {
128 // serialize the number of packets
129 ✗ SerializeStatus stat = buffer.serializeFrom(this->m_numEntries, mode);
130 ✗ if (stat != Fw::FW_SERIALIZE_OK) {
131 ✗ return stat;
132 }
133 // Serialize the ComBuffer
134 ✗ return buffer.serializeFrom(this->m_tlmBuffer.getBuffAddr(), m_tlmBuffer.getSize(), Fw::Serialization::OMIT_LENGTH);
135 }
136
137 ✗ SerializeStatus TlmPacket::deserializeFrom(SerialBufferBase& buffer, Fw::Endianness mode) {
138 // deserialize the number of packets
139 ✗ SerializeStatus stat = buffer.deserializeTo(this->m_numEntries, mode);
140 ✗ if (stat != Fw::FW_SERIALIZE_OK) {
141 ✗ return stat;
142 }
143 // deserialize the channel value entry buffers
144 ✗ FwSizeType size = buffer.getDeserializeSizeLeft();
145 ✗ if (size > this->m_tlmBuffer.getCapacity()) {
146 ✗ return FW_DESERIALIZE_SIZE_MISMATCH;
147 }
148 ✗ stat = buffer.deserializeTo(this->m_tlmBuffer.getBuffAddr(), size, Fw::Serialization::OMIT_LENGTH);
149 ✗ if (stat == FW_SERIALIZE_OK) {
150 // Shouldn't fail
151 ✗ stat = this->m_tlmBuffer.setBuffLen(size);
152 ✗ FW_ASSERT(stat == FW_SERIALIZE_OK, static_cast<FwAssertArgType>(stat));
153 }
154 ✗ return stat;
155 }
156
157 } /* namespace Fw */
158