diff --git a/.gitignore b/.gitignore
index d17c56549e..1e422e991c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -82,3 +82,5 @@ depend
/.idea/
/venv/
+
+Packet-Views
diff --git a/Autocoders/Python/bin/tlm_packet_gen.py b/Autocoders/Python/bin/tlm_packet_gen.py
index b1c82b0e07..8e7a45d694 100755
--- a/Autocoders/Python/bin/tlm_packet_gen.py
+++ b/Autocoders/Python/bin/tlm_packet_gen.py
@@ -114,6 +114,8 @@ namespace ${packet_list_namespace} {
PRINT = logging.getLogger("output")
DEBUG = logging.getLogger("debug")
+PACKET_VIEW_DIR = "./Packet-Views"
+
class TlmPacketParseValueError(ValueError):
pass
@@ -136,8 +138,8 @@ class TlmPacketParser(object):
def get_type_size(self, type_name, size):
# switch based on type
- if type == "string":
- return size
+ if type_name == "string":
+ return int(size) + 2 # plus 2 to store the string length
elif type_name == "I8":
return 1
elif type_name == "I16":
@@ -163,28 +165,6 @@ class TlmPacketParser(object):
else:
return None
- # def search_for_file(self,file_type, file_path):
- # '''
- # Searches for a given included port or serializable by looking in three places:
- # - The specified BUILD_ROOT
- # - The F Prime core
- # - The exact specified path
- # @param file_type: type of file searched for
- # @param file_path: path to look for based on offset
- # @return: full path of file
- # '''
- # core = os.environ.get("FPRIME_CORE_DIR", BUILD_ROOT)
- # for possible in [BUILD_ROOT, core, None]:
- # if not possible is None:
- # checker = os.path.join(possible, file_path)
- # else:
- # checker = file_path
- # if os.path.exists(checker):
- # DEBUG.debug("%s xml type description file: %s" % (file_type,file_path))
- # return checker
- # else:
- # return None
-
def generate_channel_size_dict(self, the_parsed_topology_xml, xml_filename):
"""
Generates GDS XML dictionary from parsed topology XML
@@ -224,7 +204,7 @@ class TlmPacketParser(object):
for comp in the_parsed_topology_xml.get_instances():
comp_name = comp.get_name()
- comp_id = int(comp.get_base_id())
+ comp_id = int(comp.get_base_id(), 0)
comp_type = comp.get_type()
if self.verbose:
PRINT.debug("Processing %s" % comp_name)
@@ -246,6 +226,9 @@ class TlmPacketParser(object):
# if channel is enum
if type(chan_type) == type(tuple()):
chan_size = 4
+ # if channel type is string
+ # elif chan_type == "string":
+ # chan_size = int(chan.get_size()) + 2 # FIXME: buffer size storage size magic number - needs to be turned into a constant
# if channel is serializable
elif chan_type in self.size_dict:
chan_size = self.size_dict[chan_type]
@@ -266,7 +249,7 @@ class TlmPacketParser(object):
def gen_packet_file(self, xml_filename):
- view_path = "./Views"
+ view_path = PACKET_VIEW_DIR
if not os.path.exists(view_path):
os.mkdir(view_path)
@@ -275,11 +258,6 @@ class TlmPacketParser(object):
if not os.path.isfile(xml_filename):
raise TlmPacketParseIOError("File %s does not exist!" % xml_filename)
- if not "PacketsAi" in xml_filename:
- raise IOError(
- "ERROR: Missing PacketsAi at end of file name %s" % xml_filename
- )
-
fd = open(xml_filename, "r")
xml_parser = etree.XMLParser(remove_comments=True)
element_tree = etree.parse(fd, parser=xml_parser)
@@ -315,12 +293,12 @@ class TlmPacketParser(object):
ht.num_packets = 0
total_packet_size = 0
levels = []
- view_path = "./Views"
+ view_path = PACKET_VIEW_DIR
# find the topology import
for entry in element_tree.getroot():
# read in topology file
if entry.tag == "import_topology":
- top_file = search_for_file("Packet", entry.text)
+ top_file = search_for_file("Topology", entry.text)
if top_file is None:
raise TlmPacketParseIOError(
"import file %s not found" % entry.text
@@ -424,12 +402,9 @@ class TlmPacketParser(object):
"Invalid xml type %s" % element_tree.getroot().tag
)
- output_file_base = os.path.splitext(os.path.basename(xml_filename))[0].replace(
- "Ai", ""
- )
- file_dir = os.path.dirname(xml_filename).replace(
- get_nearest_build_root(xml_filename) + os.sep, ""
- )
+ output_file_base = os.path.splitext(os.path.basename(xml_filename))[0]
+ nearest_build_root = get_nearest_build_root(xml_filename)
+ file_dir = os.path.relpath(os.path.dirname(xml_filename), nearest_build_root)
missing_channels = False
@@ -499,6 +474,7 @@ class TlmPacketParser(object):
for (
member_name,
member_type,
+ member_array_size,
member_size,
member_format_specifier,
member_comment,
@@ -520,6 +496,8 @@ class TlmPacketParser(object):
)
sys.exit(-1)
serializable_size += type_size
+ if member_array_size != None:
+ serializable_size *= member_array_size
self.add_type_size(serializable_type, serializable_size)
if self.verbose:
print(
@@ -616,7 +594,7 @@ def main():
print(f"Usage: {sys.argv[0]} [options] xml_filename")
return
elif len(args) == 1:
- xml_filename = args[0]
+ xml_filename = os.path.abspath(args[0])
else:
print("ERROR: Too many filenames, should only have one")
return
diff --git a/Autocoders/Python/bin/tlm_packet_gen.sh b/Autocoders/Python/bin/tlm_packet_gen.sh
new file mode 100755
index 0000000000..f2d2743588
--- /dev/null
+++ b/Autocoders/Python/bin/tlm_packet_gen.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/bash
+
+script_dir=$(dirname $0)
+
+# $0 = this script
+# $1 = packet file
+# $2 = deployment build cache (ex. Ref/build-fprime-automatic-native)
+
+export PYTHONPATH=$script_dir/../src
+export BUILD_ROOT=$script_dir/../../../:$2:$2/F-Prime
+echo "BUILD_ROOT=$BUILD_ROOT"
+
+# get python from the path
+python3 $script_dir/tlm_packet_gen.py $1
\ No newline at end of file
diff --git a/Autocoders/Python/src/fprime_ac/parsers/XmlSerializeParser.py b/Autocoders/Python/src/fprime_ac/parsers/XmlSerializeParser.py
index 2b78c4a919..a8132f4e3c 100644
--- a/Autocoders/Python/src/fprime_ac/parsers/XmlSerializeParser.py
+++ b/Autocoders/Python/src/fprime_ac/parsers/XmlSerializeParser.py
@@ -320,6 +320,6 @@ class XmlSerializeParser:
def get_members(self):
"""
- Returns a list of member (name, type, optional size, optional format, optional comment) needed.
+ Returns a list of member (name, type, optional array size, optional size, optional format, optional comment) needed.
"""
return self.__members
diff --git a/Autocoders/Python/src/fprime_ac/utils/buildroot.py b/Autocoders/Python/src/fprime_ac/utils/buildroot.py
index 571f9156fe..f26ab569b9 100644
--- a/Autocoders/Python/src/fprime_ac/utils/buildroot.py
+++ b/Autocoders/Python/src/fprime_ac/utils/buildroot.py
@@ -41,6 +41,7 @@ def get_nearest_build_root(path):
:param path: path to find nearest build root to
:return: nearest build root
"""
+ path = os.path.abspath(path)
parents = filter(
lambda build: os.path.commonpath([build, path]) == build, get_build_roots()
)
diff --git a/Ref/Top/CMakeLists.txt b/Ref/Top/CMakeLists.txt
index 1399d95ebd..9de37fec1a 100644
--- a/Ref/Top/CMakeLists.txt
+++ b/Ref/Top/CMakeLists.txt
@@ -7,6 +7,7 @@
set(SOURCE_FILES
"${CMAKE_CURRENT_LIST_DIR}/instances.fpp"
+ "${CMAKE_CURRENT_LIST_DIR}/RefPackets.xml"
"${CMAKE_CURRENT_LIST_DIR}/topology.fpp"
"${CMAKE_CURRENT_LIST_DIR}/RefTopology.cpp"
)
@@ -18,4 +19,4 @@ set(MOD_DEPS
Drv/TcpClient
)
-register_fprime_module()
\ No newline at end of file
+register_fprime_module()
diff --git a/Ref/Top/RefPacketsAi.xml b/Ref/Top/RefPackets.xml
similarity index 65%
rename from Ref/Top/RefPacketsAi.xml
rename to Ref/Top/RefPackets.xml
index 3a9e2bc86e..8ad799a436 100644
--- a/Ref/Top/RefPacketsAi.xml
+++ b/Ref/Top/RefPackets.xml
@@ -18,8 +18,9 @@
-
+
+
@@ -64,51 +65,83 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/Ref/Top/RefTopology.cpp b/Ref/Top/RefTopology.cpp
index 22a3a2370c..4266f97111 100644
--- a/Ref/Top/RefTopology.cpp
+++ b/Ref/Top/RefTopology.cpp
@@ -10,6 +10,7 @@
// ======================================================================
// Provides access to autocoded functions
#include [
+#include ][
// Necessary project-specified types
#include
@@ -60,7 +61,7 @@ enum TopologyConstants {
// Ping entries are autocoded, however; this code is not properly exported. Thus, it is copied here.
Svc::Health::PingEntry pingEntries[] = {
{PingEntries::blockDrv::WARN, PingEntries::blockDrv::FATAL, "blockDrv"},
- {PingEntries::chanTlm::WARN, PingEntries::chanTlm::FATAL, "chanTlm"},
+ {PingEntries::tlmSend::WARN, PingEntries::tlmSend::FATAL, "chanTlm"},
{PingEntries::cmdDisp::WARN, PingEntries::cmdDisp::FATAL, "cmdDisp"},
{PingEntries::cmdSeq::WARN, PingEntries::cmdSeq::FATAL, "cmdSeq"},
{PingEntries::eventLogger::WARN, PingEntries::eventLogger::FATAL, "eventLogger"},
@@ -114,6 +115,9 @@ void configureTopology() {
// Framer and Deframer components need to be passed a protocol handler
downlink.setup(framing);
uplink.setup(deframing);
+
+ // Note: Uncomment when using Svc:TlmPacketizer
+ //tlmSend.setPacketList(RefPacketsPkts, RefPacketsIgnore, 1);
}
// Public functions for use in main program are namespaced with deployment name Ref
diff --git a/Ref/Top/RefTopologyDefs.hpp b/Ref/Top/RefTopologyDefs.hpp
index 93e50bbfbe..6c5b3de729 100644
--- a/Ref/Top/RefTopologyDefs.hpp
+++ b/Ref/Top/RefTopologyDefs.hpp
@@ -56,7 +56,7 @@ namespace PingEntries {
namespace blockDrv {
enum { WARN = 3, FATAL = 5 };
}
-namespace chanTlm {
+namespace tlmSend {
enum { WARN = 3, FATAL = 5 };
}
namespace cmdDisp {
diff --git a/Ref/Top/instances.fpp b/Ref/Top/instances.fpp
index efde81b0bb..86d2490e81 100644
--- a/Ref/Top/instances.fpp
+++ b/Ref/Top/instances.fpp
@@ -68,11 +68,20 @@ module Ref {
stack size Default.STACK_SIZE \
priority 98
- instance chanTlm: Svc.TlmChan base id 0x0C00 \
+ # comment in Svc.TlmChan or Svc.TlmPacketizer
+ # depending on which form of telemetry downlink
+ # you wish to use
+
+ instance tlmSend: Svc.TlmChan base id 0x0C00 \
queue size Default.QUEUE_SIZE \
stack size Default.STACK_SIZE \
priority 97
+ #instance tlmSend: Svc.TlmPacketizer base id 0x0C00 \
+ # queue size Default.QUEUE_SIZE \
+ # stack size Default.STACK_SIZE \
+ # priority 97
+
instance prmDb: Svc.PrmDb base id 0x0D00 \
queue size Default.QUEUE_SIZE \
stack size Default.STACK_SIZE \
diff --git a/Ref/Top/topology.fpp b/Ref/Top/topology.fpp
index bff1a2af1a..66b226b5db 100644
--- a/Ref/Top/topology.fpp
+++ b/Ref/Top/topology.fpp
@@ -28,7 +28,7 @@ module Ref {
instance SG4
instance SG5
instance blockDrv
- instance chanTlm
+ instance tlmSend
instance cmdDisp
instance cmdSeq
instance comm
@@ -64,7 +64,7 @@ module Ref {
param connections instance prmDb
- telemetry connections instance chanTlm
+ telemetry connections instance tlmSend
text event connections instance textLogger
@@ -78,7 +78,7 @@ module Ref {
connections Downlink {
- chanTlm.PktSend -> downlink.comIn
+ tlmSend.PktSend -> downlink.comIn
eventLogger.PktSend -> downlink.comIn
fileDownlink.bufferSendOut -> downlink.bufferIn
@@ -103,7 +103,7 @@ module Ref {
rateGroupDriverComp.CycleOut[Ports_RateGroups.rateGroup1] -> rateGroup1Comp.CycleIn
rateGroup1Comp.RateGroupMemberOut[0] -> SG1.schedIn
rateGroup1Comp.RateGroupMemberOut[1] -> SG2.schedIn
- rateGroup1Comp.RateGroupMemberOut[2] -> chanTlm.Run
+ rateGroup1Comp.RateGroupMemberOut[2] -> tlmSend.Run
rateGroup1Comp.RateGroupMemberOut[3] -> fileDownlink.Run
rateGroup1Comp.RateGroupMemberOut[4] -> systemResources.run
diff --git a/Svc/TlmPacketizer/TlmPacketizer.cpp b/Svc/TlmPacketizer/TlmPacketizer.cpp
index 9235394af8..e35990b9ea 100644
--- a/Svc/TlmPacketizer/TlmPacketizer.cpp
+++ b/Svc/TlmPacketizer/TlmPacketizer.cpp
@@ -8,391 +8,342 @@
// ALL RIGHTS RESERVED. United States Government Sponsorship
// acknowledged.
-#include
#include
#include
+#include
namespace Svc {
- // ----------------------------------------------------------------------
- // Construction, initialization, and destruction
- // ----------------------------------------------------------------------
+// ----------------------------------------------------------------------
+// Construction, initialization, and destruction
+// ----------------------------------------------------------------------
- TlmPacketizer ::
- TlmPacketizer(
- const char *const compName
- ) :
- TlmPacketizerComponentBase(compName)
- ,m_numPackets(0)
- ,m_configured(false)
- ,m_startLevel(0)
- ,m_maxLevel(0)
- {
- // clear slot pointers
- for (NATIVE_UINT_TYPE entry = 0; entry < TLMPACKETIZER_NUM_TLM_HASH_SLOTS; entry++) {
- this->m_tlmEntries.slots[entry] = nullptr;
- }
- // clear buckets
- for (NATIVE_UINT_TYPE entry = 0; entry < TLMPACKETIZER_HASH_BUCKETS; entry++) {
- this->m_tlmEntries.buckets[entry].used = false;
- this->m_tlmEntries.buckets[entry].bucketNo = entry;
- this->m_tlmEntries.buckets[entry].next = nullptr;
- this->m_tlmEntries.buckets[entry].id = 0;
- }
- // clear free index
- this->m_tlmEntries.free = 0;
- // clear missing tlm channel check
- for (NATIVE_UINT_TYPE entry = 0; entry < TLMPACKETIZER_MAX_MISSING_TLM_CHECK; entry++) {
- this->m_missTlmCheck[entry].checked = false;
- this->m_missTlmCheck[entry].id = 0;
- }
+TlmPacketizer ::TlmPacketizer(const char* const compName)
+ : TlmPacketizerComponentBase(compName), m_numPackets(0), m_configured(false), m_startLevel(0), m_maxLevel(0) {
+ // clear slot pointers
+ for (NATIVE_UINT_TYPE entry = 0; entry < TLMPACKETIZER_NUM_TLM_HASH_SLOTS; entry++) {
+ this->m_tlmEntries.slots[entry] = nullptr;
+ }
+ // clear buckets
+ for (NATIVE_UINT_TYPE entry = 0; entry < TLMPACKETIZER_HASH_BUCKETS; entry++) {
+ this->m_tlmEntries.buckets[entry].used = false;
+ this->m_tlmEntries.buckets[entry].bucketNo = entry;
+ this->m_tlmEntries.buckets[entry].next = nullptr;
+ this->m_tlmEntries.buckets[entry].id = 0;
+ }
+ // clear free index
+ this->m_tlmEntries.free = 0;
+ // clear missing tlm channel check
+ for (NATIVE_UINT_TYPE entry = 0; entry < TLMPACKETIZER_MAX_MISSING_TLM_CHECK; entry++) {
+ this->m_missTlmCheck[entry].checked = false;
+ this->m_missTlmCheck[entry].id = 0;
+ }
- // clear packet buffers
- for (NATIVE_UINT_TYPE buffer = 0; buffer < MAX_PACKETIZER_PACKETS; buffer++) {
- this->m_fillBuffers[buffer].updated = false;
- this->m_fillBuffers[buffer].requested = false;
- this->m_sendBuffers[buffer].updated = false;
- }
- }
+ // clear packet buffers
+ for (NATIVE_UINT_TYPE buffer = 0; buffer < MAX_PACKETIZER_PACKETS; buffer++) {
+ this->m_fillBuffers[buffer].updated = false;
+ this->m_fillBuffers[buffer].requested = false;
+ this->m_sendBuffers[buffer].updated = false;
+ }
+}
- void TlmPacketizer ::
- init(
- const NATIVE_INT_TYPE queueDepth,
- const NATIVE_INT_TYPE instance
- )
- {
+void TlmPacketizer ::init(const NATIVE_INT_TYPE queueDepth, const NATIVE_INT_TYPE instance) {
TlmPacketizerComponentBase::init(queueDepth, instance);
- }
+}
- TlmPacketizer ::
- ~TlmPacketizer()
- {
+TlmPacketizer ::~TlmPacketizer() {}
- }
+void TlmPacketizer::setPacketList(const TlmPacketizerPacketList& packetList,
+ const Svc::TlmPacketizerPacket& ignoreList,
+ const NATIVE_UINT_TYPE startLevel) {
+ FW_ASSERT(packetList.list);
+ FW_ASSERT(ignoreList.list);
+ FW_ASSERT(packetList.numEntries <= MAX_PACKETIZER_PACKETS, packetList.numEntries);
+ // validate packet sizes against maximum com buffer size and populate hash
+ // table
+ for (NATIVE_UINT_TYPE pktEntry = 0; pktEntry < packetList.numEntries; pktEntry++) {
+ // Initial size is packetized telemetry descriptor + size of time tag + sizeof packet ID
+ NATIVE_UINT_TYPE packetLen =
+ sizeof(FwPacketDescriptorType) + Fw::Time::SERIALIZED_SIZE + sizeof(FwTlmPacketizeIdType);
+ FW_ASSERT(packetList.list[pktEntry]->list, pktEntry);
+ // add up entries for each defined packet
+ for (NATIVE_UINT_TYPE tlmEntry = 0; tlmEntry < packetList.list[pktEntry]->numEntries; tlmEntry++) {
+ // get hash value for id
+ FwChanIdType id = packetList.list[pktEntry]->list[tlmEntry].id;
+ TlmEntry* entryToUse = this->findBucket(id);
+ // copy into entry
+ FW_ASSERT(entryToUse);
+ entryToUse->used = true;
+ // not ignored channel
+ entryToUse->ignored = false;
+ entryToUse->id = id;
+ // the offset into the buffer will be the current packet length
+ entryToUse->packetOffset[pktEntry] = packetLen;
- void TlmPacketizer::setPacketList(
- const TlmPacketizerPacketList& packetList,
- const Svc::TlmPacketizerPacket& ignoreList,
- const NATIVE_UINT_TYPE startLevel) {
+ packetLen += packetList.list[pktEntry]->list[tlmEntry].size;
- FW_ASSERT(packetList.list);
- FW_ASSERT(ignoreList.list);
- FW_ASSERT(packetList.numEntries <= MAX_PACKETIZER_PACKETS,packetList.numEntries);
- // validate packet sizes against maximum com buffer size and populate hash
- // table
- for (NATIVE_UINT_TYPE pktEntry = 0; pktEntry < packetList.numEntries; pktEntry++) {
- // Initial size is packetized telemetry descriptor + size of time tag + sizeof packet ID
- NATIVE_UINT_TYPE packetLen = sizeof(FwPacketDescriptorType) + Fw::Time::SERIALIZED_SIZE + sizeof(FwTlmPacketizeIdType);
- FW_ASSERT(packetList.list[pktEntry]->list,pktEntry);
- // add up entries for each defined packet
- for (NATIVE_UINT_TYPE tlmEntry = 0; tlmEntry < packetList.list[pktEntry]->numEntries; tlmEntry++) {
- // get hash value for id
- FwChanIdType id = packetList.list[pktEntry]->list[tlmEntry].id;
- TlmEntry *entryToUse = this->findBucket(id);
- // copy into entry
- FW_ASSERT(entryToUse);
- entryToUse->used = true;
- // not ignored channel
- entryToUse->ignored = false;
- entryToUse->id = id;
- // the offset into the buffer will be the current packet length
- entryToUse->packetOffset[pktEntry] = packetLen;
+ } // end channel in packet
+ FW_ASSERT(packetLen <= FW_COM_BUFFER_MAX_SIZE, packetLen, pktEntry);
+ // clear contents
+ memset(this->m_fillBuffers[pktEntry].buffer.getBuffAddr(), 0, packetLen);
+ // serialize packet descriptor and packet ID now since it will always be the same
+ Fw::SerializeStatus stat = this->m_fillBuffers[pktEntry].buffer.serialize(
+ static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM));
+ FW_ASSERT(Fw::FW_SERIALIZE_OK == stat, stat);
+ stat = this->m_fillBuffers[pktEntry].buffer.serialize(packetList.list[pktEntry]->id);
+ FW_ASSERT(Fw::FW_SERIALIZE_OK == stat, stat);
+ // set packet buffer length
+ stat = this->m_fillBuffers[pktEntry].buffer.setBuffLen(packetLen);
+ FW_ASSERT(Fw::FW_SERIALIZE_OK == stat, stat);
+ // save ID
+ this->m_fillBuffers[pktEntry].id = packetList.list[pktEntry]->id;
+ // save level
+ this->m_fillBuffers[pktEntry].level = packetList.list[pktEntry]->level;
+ // store max level
+ if (packetList.list[pktEntry]->level > this->m_maxLevel) {
+ this->m_maxLevel = packetList.list[pktEntry]->level;
+ }
+ // save start level
+ this->m_startLevel = startLevel;
- packetLen += packetList.list[pktEntry]->list[tlmEntry].size;
+ } // end packet list
- } // end channel in packet
- FW_ASSERT(packetLen <= FW_COM_BUFFER_MAX_SIZE,packetLen,pktEntry);
- // clear contents
- memset(this->m_fillBuffers[pktEntry].buffer.getBuffAddr(),0,packetLen);
- // serialize packet descriptor and packet ID now since it will always be the same
- Fw::SerializeStatus stat = this->m_fillBuffers[pktEntry].buffer.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM));
- FW_ASSERT(Fw::FW_SERIALIZE_OK == stat,stat);
- stat = this->m_fillBuffers[pktEntry].buffer.serialize(packetList.list[pktEntry]->id);
- FW_ASSERT(Fw::FW_SERIALIZE_OK == stat,stat);
- // set packet buffer length
- stat = this->m_fillBuffers[pktEntry].buffer.setBuffLen(packetLen);
- FW_ASSERT(Fw::FW_SERIALIZE_OK == stat,stat);
- // save ID
- this->m_fillBuffers[pktEntry].id = packetList.list[pktEntry]->id;
- // save level
- this->m_fillBuffers[pktEntry].level = packetList.list[pktEntry]->level;
- // store max level
- if (packetList.list[pktEntry]->level > this->m_maxLevel) {
- this->m_maxLevel = packetList.list[pktEntry]->level;
- }
- // save start level
- this->m_startLevel = startLevel;
+ // populate hash table with ignore list
+ for (NATIVE_UINT_TYPE channelEntry = 0; channelEntry < ignoreList.numEntries; channelEntry++) {
+ // get hash value for id
+ FwChanIdType id = ignoreList.list[channelEntry].id;
- } // end packet list
+ TlmEntry* entryToUse = this->findBucket(id);
- // populate hash table with ignore list
- for (NATIVE_UINT_TYPE channelEntry = 0; channelEntry < ignoreList.numEntries; channelEntry++) {
- // get hash value for id
- FwChanIdType id = ignoreList.list[channelEntry].id;
+ // copy into entry
+ FW_ASSERT(entryToUse);
+ entryToUse->used = true;
+ // is ignored channel
+ entryToUse->ignored = true;
+ entryToUse->id = id;
+ } // end ignore list
- TlmEntry *entryToUse = this->findBucket(id);
+ // store number of packets
+ this->m_numPackets = packetList.numEntries;
- // copy into entry
- FW_ASSERT(entryToUse);
- entryToUse->used = true;
- // is ignored channel
- entryToUse->ignored = true;
- entryToUse->id = id;
- } // end ignore list
+ // indicate configured
+ this->m_configured = true;
+}
- // store number of packets
- this->m_numPackets = packetList.numEntries;
+TlmPacketizer::TlmEntry* TlmPacketizer::findBucket(FwChanIdType id) {
+ NATIVE_UINT_TYPE index = this->doHash(id);
+ FW_ASSERT(index < TLMPACKETIZER_HASH_BUCKETS);
+ TlmEntry* entryToUse = nullptr;
+ TlmEntry* prevEntry = nullptr;
- // indicate configured
- this->m_configured = true;
- }
+ // Search to see if channel has already been stored or a bucket needs to be added
+ if (this->m_tlmEntries.slots[index]) {
+ entryToUse = this->m_tlmEntries.slots[index];
+ for (NATIVE_UINT_TYPE bucket = 0; bucket < TLMPACKETIZER_HASH_BUCKETS; bucket++) {
+ if (entryToUse) {
+ if (entryToUse->id == id) { // found the matching entry
+ break;
+ } else { // try next entry
+ prevEntry = entryToUse;
+ entryToUse = entryToUse->next;
+ }
+ } else {
+ // Make sure that we haven't run out of buckets
+ FW_ASSERT(this->m_tlmEntries.free < TLMPACKETIZER_HASH_BUCKETS, this->m_tlmEntries.free);
+ // add new bucket from free list
+ entryToUse = &this->m_tlmEntries.buckets[this->m_tlmEntries.free++];
+ // Coverity warning about null dereference - see if it happens
+ FW_ASSERT(prevEntry);
+ prevEntry->next = entryToUse;
+ // clear next pointer
+ entryToUse->next = nullptr;
+ // set all packet offsets to -1 for new entry
+ for (NATIVE_UINT_TYPE pktOffsetEntry = 0; pktOffsetEntry < MAX_PACKETIZER_PACKETS; pktOffsetEntry++) {
+ entryToUse->packetOffset[pktOffsetEntry] = -1;
+ }
+ break;
+ }
+ }
+ } else {
+ // Make sure that we haven't run out of buckets
+ FW_ASSERT(this->m_tlmEntries.free < TLMPACKETIZER_HASH_BUCKETS, this->m_tlmEntries.free);
+ // create new entry at slot head
+ this->m_tlmEntries.slots[index] = &this->m_tlmEntries.buckets[this->m_tlmEntries.free++];
+ entryToUse = this->m_tlmEntries.slots[index];
+ entryToUse->next = nullptr;
+ // set all packet offsets to -1 for new entry
+ for (NATIVE_UINT_TYPE pktOffsetEntry = 0; pktOffsetEntry < MAX_PACKETIZER_PACKETS; pktOffsetEntry++) {
+ entryToUse->packetOffset[pktOffsetEntry] = -1;
+ }
+ }
- TlmPacketizer::TlmEntry* TlmPacketizer::findBucket(FwChanIdType id) {
- NATIVE_UINT_TYPE index = this->doHash(id);
- FW_ASSERT(index < TLMPACKETIZER_HASH_BUCKETS);
- TlmEntry* entryToUse = nullptr;
- TlmEntry* prevEntry = nullptr;
+ return entryToUse;
+}
- // Search to see if channel has already been stored or a bucket needs to be added
- if (this->m_tlmEntries.slots[index]) {
- entryToUse = this->m_tlmEntries.slots[index];
- for (NATIVE_UINT_TYPE bucket = 0; bucket < TLMPACKETIZER_HASH_BUCKETS; bucket++) {
- if (entryToUse) {
- if (entryToUse->id == id) { // found the matching entry
- break;
- } else { // try next entry
- prevEntry = entryToUse;
- entryToUse = entryToUse->next;
- }
- } else {
- // Make sure that we haven't run out of buckets
- FW_ASSERT(this->m_tlmEntries.free < TLMPACKETIZER_HASH_BUCKETS,this->m_tlmEntries.free);
- // add new bucket from free list
- entryToUse = &this->m_tlmEntries.buckets[this->m_tlmEntries.free++];
- // Coverity warning about null dereference - see if it happens
- FW_ASSERT(prevEntry);
- prevEntry->next = entryToUse;
- // clear next pointer
- entryToUse->next = nullptr;
- // set all packet offsets to -1 for new entry
- for (NATIVE_UINT_TYPE pktOffsetEntry = 0; pktOffsetEntry < MAX_PACKETIZER_PACKETS; pktOffsetEntry++) {
- entryToUse->packetOffset[pktOffsetEntry] = -1;
- }
- break;
- }
- }
- } else {
- // Make sure that we haven't run out of buckets
- FW_ASSERT(this->m_tlmEntries.free < TLMPACKETIZER_HASH_BUCKETS,this->m_tlmEntries.free);
- // create new entry at slot head
- this->m_tlmEntries.slots[index] = &this->m_tlmEntries.buckets[this->m_tlmEntries.free++];
- entryToUse = this->m_tlmEntries.slots[index];
- entryToUse->next = nullptr;
- // set all packet offsets to -1 for new entry
- for (NATIVE_UINT_TYPE pktOffsetEntry = 0; pktOffsetEntry < MAX_PACKETIZER_PACKETS; pktOffsetEntry++) {
- entryToUse->packetOffset[pktOffsetEntry] = -1;
- }
+// ----------------------------------------------------------------------
+// Handler implementations for user-defined typed input ports
+// ----------------------------------------------------------------------
- }
+void TlmPacketizer ::TlmRecv_handler(const NATIVE_INT_TYPE portNum,
+ FwChanIdType id,
+ Fw::Time& timeTag,
+ Fw::TlmBuffer& val) {
+ FW_ASSERT(this->m_configured);
+ // get hash value for id
+ NATIVE_UINT_TYPE index = this->doHash(id);
+ TlmEntry* entryToUse = nullptr;
- return entryToUse;
- }
+ // Search to see if the channel is being sent
+ entryToUse = this->m_tlmEntries.slots[index];
+ // if no entries at hash, channel not part of a packet or is not ignored
+ if (not entryToUse) {
+ this->missingChannel(id);
+ return;
+ }
+ for (NATIVE_UINT_TYPE bucket = 0; bucket < TLMPACKETIZER_HASH_BUCKETS; bucket++) {
+ if (entryToUse) {
+ if (entryToUse->id == id) { // found the matching entry
+ // check to see if the channel is ignored. If so, just return.
+ if (entryToUse->ignored) {
+ return;
+ }
+ break;
+ } else { // try next entry
+ entryToUse = entryToUse->next;
+ }
+ } else {
+ // telemetry channel not in any packets
+ this->missingChannel(id);
+ return;
+ }
+ }
- // ----------------------------------------------------------------------
- // Handler implementations for user-defined typed input ports
- // ----------------------------------------------------------------------
+ // copy telemetry value into active buffers
+ for (NATIVE_UINT_TYPE pkt = 0; pkt < MAX_PACKETIZER_PACKETS; pkt++) {
+ // check if current packet has this channel
+ if (entryToUse->packetOffset[pkt] != -1) {
+ // get destination address
+ // printf("PK %d CH: %d\n",this->m_fillBuffers[pkt].id,id);
+ this->m_lock.lock();
+ this->m_fillBuffers[pkt].updated = true;
+ this->m_fillBuffers[pkt].latestTime = timeTag;
+ U8* ptr = &this->m_fillBuffers[pkt].buffer.getBuffAddr()[entryToUse->packetOffset[pkt]];
+ memcpy(ptr, val.getBuffAddr(), val.getBuffLength());
+ this->m_lock.unLock();
+ }
+ }
+}
- void TlmPacketizer ::
- TlmRecv_handler(
- const NATIVE_INT_TYPE portNum,
- FwChanIdType id,
- Fw::Time &timeTag,
- Fw::TlmBuffer &val
- )
- {
- FW_ASSERT(this->m_configured);
- // get hash value for id
- NATIVE_UINT_TYPE index = this->doHash(id);
- TlmEntry* entryToUse = nullptr;
+void TlmPacketizer ::Run_handler(const NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context) {
+ FW_ASSERT(this->m_configured);
- // Search to see if the channel is being sent
- entryToUse = this->m_tlmEntries.slots[index];
+ // Only write packets if connected
+ if (not this->isConnected_PktSend_OutputPort(0)) {
+ return;
+ }
- // if no entries at hash, channel not part of a packet or is not ignored
- if (not entryToUse) {
- this->missingChannel(id);
- return;
- }
+ // lock mutex long enough to modify active telemetry buffer
+ // so the data can be read without worrying about updates
+ this->m_lock.lock();
+ // copy buffers from fill side to send side
+ for (NATIVE_UINT_TYPE pkt = 0; pkt < this->m_numPackets; pkt++) {
+ if ((this->m_fillBuffers[pkt].updated) and
+ ((this->m_fillBuffers[pkt].level <= this->m_startLevel) or (this->m_fillBuffers[pkt].requested))) {
+ this->m_sendBuffers[pkt] = this->m_fillBuffers[pkt];
+ if (PACKET_UPDATE_ON_CHANGE == PACKET_UPDATE_MODE) {
+ this->m_fillBuffers[pkt].updated = false;
+ }
+ this->m_fillBuffers[pkt].requested = false;
+ // PACKET_UPDATE_AFTER_FIRST_CHANGE will be this case - updated flag will not be cleared
+ } else if ((PACKET_UPDATE_ALWAYS == PACKET_UPDATE_MODE) and
+ (this->m_fillBuffers[pkt].level <= this->m_startLevel)) {
+ this->m_sendBuffers[pkt] = this->m_fillBuffers[pkt];
+ this->m_sendBuffers[pkt].updated = true;
+ } else {
+ this->m_sendBuffers[pkt].updated = false;
+ }
+ }
+ this->m_lock.unLock();
- for (NATIVE_UINT_TYPE bucket = 0; bucket < TLMPACKETIZER_HASH_BUCKETS; bucket++) {
- if (entryToUse) {
- if (entryToUse->id == id) { // found the matching entry
- // check to see if the channel is ignored. If so, just return.
- if (entryToUse->ignored) {
- return;
- }
- break;
- } else { // try next entry
- entryToUse = entryToUse->next;
- }
- } else {
- // telemetry channel not in any packets
- this->missingChannel(id);
- return;
- }
- }
+ // push all updated packet buffers
+ for (NATIVE_UINT_TYPE pkt = 0; pkt < this->m_numPackets; pkt++) {
+ if (this->m_sendBuffers[pkt].updated) {
+ // serialize time into time offset in packet
+ Fw::ExternalSerializeBuffer buff(
+ &this->m_sendBuffers[pkt]
+ .buffer.getBuffAddr()[sizeof(FwPacketDescriptorType) + sizeof(FwTlmPacketizeIdType)],
+ Fw::Time::SERIALIZED_SIZE);
+ Fw::SerializeStatus stat = buff.serialize(this->m_sendBuffers[pkt].latestTime);
+ FW_ASSERT(Fw::FW_SERIALIZE_OK == stat, stat);
- // copy telemetry value into active buffers
- for (NATIVE_UINT_TYPE pkt = 0; pkt < MAX_PACKETIZER_PACKETS; pkt++) {
- // check if current packet has this channel
- if (entryToUse->packetOffset[pkt] != -1) {
- // get destination address
- // printf("PK %d CH: %d\n",this->m_fillBuffers[pkt].id,id);
- this->m_lock.lock();
- this->m_fillBuffers[pkt].updated = true;
- this->m_fillBuffers[pkt].latestTime = timeTag;
- U8* ptr = &this->m_fillBuffers[pkt].buffer.getBuffAddr()[entryToUse->packetOffset[pkt]];
- memcpy(ptr,val.getBuffAddr(),val.getBuffLength());
- this->m_lock.unLock();
- }
- }
+ this->PktSend_out(0, this->m_sendBuffers[pkt].buffer, 0);
+ }
+ }
+}
- }
+void TlmPacketizer ::pingIn_handler(const NATIVE_INT_TYPE portNum, U32 key) {
+ // return key
+ this->pingOut_out(0, key);
+}
- void TlmPacketizer ::
- Run_handler(
- const NATIVE_INT_TYPE portNum,
- NATIVE_UINT_TYPE context
- )
- {
- FW_ASSERT(this->m_configured);
+// ----------------------------------------------------------------------
+// Command handler implementations
+// ----------------------------------------------------------------------
- // Only write packets if connected
- if (not this->isConnected_PktSend_OutputPort(0)) {
- return;
- }
+void TlmPacketizer ::SET_LEVEL_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq, U32 level) {
+ this->m_startLevel = level;
+ if (level > this->m_maxLevel) {
+ this->log_WARNING_LO_MaxLevelExceed(level, this->m_maxLevel);
+ }
+ this->tlmWrite_SendLevel(level);
+ this->log_ACTIVITY_HI_LevelSet(level);
+ this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
+}
- // lock mutex long enough to modify active telemetry buffer
- // so the data can be read without worrying about updates
- this->m_lock.lock();
- // copy buffers from fill side to send side
- for (NATIVE_UINT_TYPE pkt = 0; pkt < this->m_numPackets; pkt++) {
- if ((this->m_fillBuffers[pkt].updated) and
- ((this->m_fillBuffers[pkt].level <= this->m_startLevel) or
- (this->m_fillBuffers[pkt].requested))) {
+void TlmPacketizer ::SEND_PKT_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq, U32 id) {
+ NATIVE_UINT_TYPE pkt = 0;
+ for (pkt = 0; pkt < this->m_numPackets; pkt++) {
+ if (this->m_fillBuffers[pkt].id == id) {
+ this->m_lock.lock();
+ this->m_fillBuffers[pkt].updated = true;
+ this->m_fillBuffers[pkt].latestTime = this->getTime();
+ this->m_fillBuffers[pkt].requested = true;
+ this->m_lock.unLock();
- this->m_sendBuffers[pkt] = this->m_fillBuffers[pkt];
- if (PACKET_UPDATE_ON_CHANGE == PACKET_UPDATE_MODE) {
- this->m_fillBuffers[pkt].updated = false;
- }
- this->m_fillBuffers[pkt].requested = false;
- // PACKET_UPDATE_AFTER_FIRST_CHANGE will be this case - updated flag will not be cleared
- } else if ((PACKET_UPDATE_ALWAYS == PACKET_UPDATE_MODE) and (this->m_fillBuffers[pkt].level <= this->m_startLevel)) {
- this->m_sendBuffers[pkt] = this->m_fillBuffers[pkt];
- this->m_sendBuffers[pkt].updated = true;
- } else {
- this->m_sendBuffers[pkt].updated = false;
- }
- }
- this->m_lock.unLock();
+ this->log_ACTIVITY_LO_PacketSent(id);
+ break;
+ }
+ }
- // push all updated packet buffers
- for (NATIVE_UINT_TYPE pkt = 0; pkt < this->m_numPackets; pkt++) {
- if (this->m_sendBuffers[pkt].updated) {
- // serialize time into time offset in packet
- Fw::ExternalSerializeBuffer buff(&this->m_sendBuffers[pkt].buffer.getBuffAddr()
- [sizeof(FwPacketDescriptorType)+ sizeof(FwTlmPacketizeIdType)],Fw::Time::SERIALIZED_SIZE);
- Fw::SerializeStatus stat = buff.serialize(this->m_sendBuffers[pkt].latestTime);
- FW_ASSERT(Fw::FW_SERIALIZE_OK == stat, stat);
- this->PktSend_out(0,this->m_sendBuffers[pkt].buffer,0);
- }
- }
- }
+ // couldn't find it
+ if (pkt == this->m_numPackets) {
+ log_WARNING_LO_PacketNotFound(id);
+ this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::VALIDATION_ERROR);
+ return;
+ }
- void TlmPacketizer ::
- pingIn_handler(
- const NATIVE_INT_TYPE portNum,
- U32 key
- )
- {
- // return key
- this->pingOut_out(0,key);
- }
+ this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
+}
- // ----------------------------------------------------------------------
- // Command handler implementations
- // ----------------------------------------------------------------------
+NATIVE_UINT_TYPE TlmPacketizer::doHash(FwChanIdType id) {
+ return (id % TLMPACKETIZER_HASH_MOD_VALUE) % TLMPACKETIZER_NUM_TLM_HASH_SLOTS;
+}
- void TlmPacketizer ::
- SET_LEVEL_cmdHandler(
- const FwOpcodeType opCode,
- const U32 cmdSeq,
- U32 level
- )
- {
- this->m_startLevel = level;
- if (level > this->m_maxLevel) {
- this->log_WARNING_LO_MaxLevelExceed(level,this->m_maxLevel);
- }
- this->tlmWrite_SendLevel(level);
- this->log_ACTIVITY_HI_LevelSet(level);
- this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
- }
+void TlmPacketizer::missingChannel(FwChanIdType id) {
+ // search to see if missing channel has already been sent
+ for (NATIVE_UINT_TYPE slot = 0; slot < TLMPACKETIZER_MAX_MISSING_TLM_CHECK; slot++) {
+ // if it's been checked, return
+ if (this->m_missTlmCheck[slot].checked and (this->m_missTlmCheck[slot].id == id)) {
+ return;
+ } else if (not this->m_missTlmCheck[slot].checked) {
+ this->m_missTlmCheck[slot].checked = true;
+ this->m_missTlmCheck[slot].id = id;
+ this->log_WARNING_LO_NoChan(id);
+ return;
+ }
+ }
+}
- void TlmPacketizer ::
- SEND_PKT_cmdHandler(
- const FwOpcodeType opCode,
- const U32 cmdSeq,
- U32 id
- )
- {
- NATIVE_UINT_TYPE pkt = 0;
- for (pkt = 0; pkt < this->m_numPackets; pkt++) {
- if (this->m_fillBuffers[pkt].id == id) {
-
- this->m_lock.lock();
- this->m_fillBuffers[pkt].updated = true;
- this->m_fillBuffers[pkt].latestTime = this->getTime();
- this->m_fillBuffers[pkt].requested = true;
- this->m_lock.unLock();
-
- this->log_ACTIVITY_LO_PacketSent(id);
- break;
- }
- }
-
- // couldn't find it
- if (pkt == this->m_numPackets) {
- log_WARNING_LO_PacketNotFound(id);
- this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::VALIDATION_ERROR);
- return;
- }
-
- this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
- }
-
-
- NATIVE_UINT_TYPE TlmPacketizer::doHash(FwChanIdType id) {
- return (id % TLMPACKETIZER_HASH_MOD_VALUE)%TLMPACKETIZER_NUM_TLM_HASH_SLOTS;
- }
-
- void TlmPacketizer::missingChannel(FwChanIdType id) {
- // search to see if missing channel has already been sent
- for (NATIVE_UINT_TYPE slot = 0; slot < TLMPACKETIZER_MAX_MISSING_TLM_CHECK; slot++) {
- // if it's been checked, return
- if (this->m_missTlmCheck[slot].checked and (this->m_missTlmCheck[slot].id == id)) {
- return;
- } else if (not this->m_missTlmCheck[slot].checked) {
- this->m_missTlmCheck[slot].checked = true;
- this->m_missTlmCheck[slot].id = id;
- this->log_WARNING_LO_NoChan(id);
- return;
- }
- }
-
- }
-
-
-} // end namespace Svc
+} // end namespace Svc
diff --git a/Svc/TlmPacketizer/TlmPacketizer.hpp b/Svc/TlmPacketizer/TlmPacketizer.hpp
index d8492946be..4957bb3cd9 100644
--- a/Svc/TlmPacketizer/TlmPacketizer.hpp
+++ b/Svc/TlmPacketizer/TlmPacketizer.hpp
@@ -1,4 +1,4 @@
-// ======================================================================
+// ======================================================================
// \title TlmPacketizerImpl.hpp
// \author tcanham
// \brief hpp file for TlmPacketizer component implementation class
@@ -11,147 +11,134 @@
#ifndef TlmPacketizer_HPP
#define TlmPacketizer_HPP
+#include "Os/Mutex.hpp"
#include "Svc/TlmPacketizer/TlmPacketizerComponentAc.hpp"
#include "Svc/TlmPacketizer/TlmPacketizerTypes.hpp"
-#include "Svc/TlmPacketizer/TlmPacketizerComponentImplCfg.hpp"
-#include "Os/Mutex.hpp"
+#include "TlmPacketizerCfg.hpp"
namespace Svc {
- class TlmPacketizer :
- public TlmPacketizerComponentBase
- {
+class TlmPacketizer : public TlmPacketizerComponentBase {
+ public:
+ // ----------------------------------------------------------------------
+ // Construction, initialization, and destruction
+ // ----------------------------------------------------------------------
- public:
+ //! Construct object TlmPacketizer
+ //!
+ TlmPacketizer(const char* const compName /*!< The component name*/
+ );
- // ----------------------------------------------------------------------
- // Construction, initialization, and destruction
- // ----------------------------------------------------------------------
+ //! Initialize object TlmPacketizer
+ //!
+ void init(const NATIVE_INT_TYPE queueDepth, /*!< The queue depth*/
+ const NATIVE_INT_TYPE instance = 0 /*!< The instance number*/
+ );
- //! Construct object TlmPacketizer
- //!
- TlmPacketizer(
- const char *const compName /*!< The component name*/
- );
+ void setPacketList(
+ const TlmPacketizerPacketList& packetList, // channels to packetize
+ const Svc::TlmPacketizerPacket& ignoreList, // channels to ignore (i.e. no warning event if not packetized)
+ const NATIVE_UINT_TYPE startLevel); // starting level of packets to send
- //! Initialize object TlmPacketizer
- //!
- void init(
- const NATIVE_INT_TYPE queueDepth, /*!< The queue depth*/
- const NATIVE_INT_TYPE instance = 0 /*!< The instance number*/
- );
+ //! Destroy object TlmPacketizer
+ //!
+ ~TlmPacketizer(void);
- void setPacketList(
- const TlmPacketizerPacketList& packetList, // channels to packetize
- const Svc::TlmPacketizerPacket& ignoreList, // channels to ignore (i.e. no warning event if not packetized)
- const NATIVE_UINT_TYPE startLevel); // starting level of packets to send
+ PRIVATE:
+ // ----------------------------------------------------------------------
+ // Handler implementations for user-defined typed input ports
+ // ----------------------------------------------------------------------
- //! Destroy object TlmPacketizer
- //!
- ~TlmPacketizer(void);
+ //! Handler implementation for TlmRecv
+ //!
+ void TlmRecv_handler(const NATIVE_INT_TYPE portNum, /*!< The port number*/
+ FwChanIdType id, /*!< Telemetry Channel ID*/
+ Fw::Time& timeTag, /*!< Time Tag*/
+ Fw::TlmBuffer& val /*!< Buffer containing serialized telemetry value*/
+ );
- PRIVATE:
+ //! Handler implementation for Run
+ //!
+ void Run_handler(const NATIVE_INT_TYPE portNum, /*!< The port number*/
+ NATIVE_UINT_TYPE context /*!< The call order*/
+ );
- // ----------------------------------------------------------------------
- // Handler implementations for user-defined typed input ports
- // ----------------------------------------------------------------------
+ //! Handler implementation for pingIn
+ //!
+ void pingIn_handler(const NATIVE_INT_TYPE portNum, /*!< The port number*/
+ U32 key /*!< Value to return to pinger*/
+ );
- //! Handler implementation for TlmRecv
- //!
- void TlmRecv_handler(
- const NATIVE_INT_TYPE portNum, /*!< The port number*/
- FwChanIdType id, /*!< Telemetry Channel ID*/
- Fw::Time &timeTag, /*!< Time Tag*/
- Fw::TlmBuffer &val /*!< Buffer containing serialized telemetry value*/
- );
+ //! Implementation for SET_LEVEL command handler
+ //! Set telemetry send leve
+ void SET_LEVEL_cmdHandler(const FwOpcodeType opCode, /*!< The opcode*/
+ const U32 cmdSeq, /*!< The command sequence number*/
+ U32 level /*!< The I32 command argument*/
+ );
- //! Handler implementation for Run
- //!
- void Run_handler(
- const NATIVE_INT_TYPE portNum, /*!< The port number*/
- NATIVE_UINT_TYPE context /*!< The call order*/
- );
+ //! Implementation for SEND_PKT command handler
+ //! Force a packet to be sent
+ void SEND_PKT_cmdHandler(const FwOpcodeType opCode, /*!< The opcode*/
+ const U32 cmdSeq, /*!< The command sequence number*/
+ U32 id /*!< The packet ID*/
+ );
- //! Handler implementation for pingIn
- //!
- void pingIn_handler(
- const NATIVE_INT_TYPE portNum, /*!< The port number*/
- U32 key /*!< Value to return to pinger*/
- );
-
- //! Implementation for SET_LEVEL command handler
- //! Set telemetry send leve
- void SET_LEVEL_cmdHandler(
- const FwOpcodeType opCode, /*!< The opcode*/
- const U32 cmdSeq, /*!< The command sequence number*/
- U32 level /*!< The I32 command argument*/
- );
-
- //! Implementation for SEND_PKT command handler
- //! Force a packet to be sent
- void SEND_PKT_cmdHandler(
- const FwOpcodeType opCode, /*!< The opcode*/
- const U32 cmdSeq, /*!< The command sequence number*/
- U32 id /*!< The packet ID*/
- );
-
- // number of packets to fill
- NATIVE_UINT_TYPE m_numPackets;
- // Array of packet buffers to send
- // Double-buffered to fill one while sending one
-
- struct BufferEntry {
- Fw::ComBuffer buffer; //!< buffer for packetized channels
- Fw::Time latestTime; //!< latest update time
- NATIVE_UINT_TYPE id; //!< channel id
- NATIVE_UINT_TYPE level; //!< channel level
- bool updated; //!< if packet had any updates during last cycle
- bool requested; //!< if the packet was requested with SEND_PKT in the last cycle
- };
-
- // buffers for filling with telemetry
- BufferEntry m_fillBuffers[MAX_PACKETIZER_PACKETS];
- // buffers for sending - will be copied from fill buffers
- BufferEntry m_sendBuffers[MAX_PACKETIZER_PACKETS];
-
- struct TlmEntry {
- FwChanIdType id; //!< telemetry id stored in slot
- // Offsets into packet buffers.
- // -1 means that channel is not in that packet
- NATIVE_INT_TYPE packetOffset[MAX_PACKETIZER_PACKETS];
- TlmEntry* next; //!< pointer to next bucket in table
- bool used; //!< if entry has been used
- bool ignored; //!< ignored packet id
- NATIVE_UINT_TYPE bucketNo; //!< for testing
- };
-
- struct TlmSet {
- TlmEntry* slots[TLMPACKETIZER_NUM_TLM_HASH_SLOTS]; //!< set of hash slots in hash table
- TlmEntry buckets[TLMPACKETIZER_HASH_BUCKETS]; //!< set of buckets used in hash table
- NATIVE_UINT_TYPE free; //!< next free bucket
- } m_tlmEntries;
-
- // hash function for looking up telemetry channel
- NATIVE_UINT_TYPE doHash(FwChanIdType id);
-
- Os::Mutex m_lock; //!< used to lock access to packet buffers
-
- bool m_configured; //!< indicates a table has been passed and packets configured
-
- struct MissingTlmChan {
- FwChanIdType id;
- bool checked;
- } m_missTlmCheck[TLMPACKETIZER_MAX_MISSING_TLM_CHECK];
-
- void missingChannel(FwChanIdType id); //!< Helper to check to see if missing channel warning was sent
-
- TlmEntry* findBucket(FwChanIdType id);
-
- NATIVE_UINT_TYPE m_startLevel; //!< initial level for sending packets
- NATIVE_UINT_TYPE m_maxLevel; //!< maximum level in all packets
+ // number of packets to fill
+ NATIVE_UINT_TYPE m_numPackets;
+ // Array of packet buffers to send
+ // Double-buffered to fill one while sending one
+ struct BufferEntry {
+ Fw::ComBuffer buffer; //!< buffer for packetized channels
+ Fw::Time latestTime; //!< latest update time
+ NATIVE_UINT_TYPE id; //!< channel id
+ NATIVE_UINT_TYPE level; //!< channel level
+ bool updated; //!< if packet had any updates during last cycle
+ bool requested; //!< if the packet was requested with SEND_PKT in the last cycle
};
-} // end namespace Svc
+ // buffers for filling with telemetry
+ BufferEntry m_fillBuffers[MAX_PACKETIZER_PACKETS];
+ // buffers for sending - will be copied from fill buffers
+ BufferEntry m_sendBuffers[MAX_PACKETIZER_PACKETS];
+
+ struct TlmEntry {
+ FwChanIdType id; //!< telemetry id stored in slot
+ // Offsets into packet buffers.
+ // -1 means that channel is not in that packet
+ NATIVE_INT_TYPE packetOffset[MAX_PACKETIZER_PACKETS];
+ TlmEntry* next; //!< pointer to next bucket in table
+ bool used; //!< if entry has been used
+ bool ignored; //!< ignored packet id
+ NATIVE_UINT_TYPE bucketNo; //!< for testing
+ };
+
+ struct TlmSet {
+ TlmEntry* slots[TLMPACKETIZER_NUM_TLM_HASH_SLOTS]; //!< set of hash slots in hash table
+ TlmEntry buckets[TLMPACKETIZER_HASH_BUCKETS]; //!< set of buckets used in hash table
+ NATIVE_UINT_TYPE free; //!< next free bucket
+ } m_tlmEntries;
+
+ // hash function for looking up telemetry channel
+ NATIVE_UINT_TYPE doHash(FwChanIdType id);
+
+ Os::Mutex m_lock; //!< used to lock access to packet buffers
+
+ bool m_configured; //!< indicates a table has been passed and packets configured
+
+ struct MissingTlmChan {
+ FwChanIdType id;
+ bool checked;
+ } m_missTlmCheck[TLMPACKETIZER_MAX_MISSING_TLM_CHECK];
+
+ void missingChannel(FwChanIdType id); //!< Helper to check to see if missing channel warning was sent
+
+ TlmEntry* findBucket(FwChanIdType id);
+
+ NATIVE_UINT_TYPE m_startLevel; //!< initial level for sending packets
+ NATIVE_UINT_TYPE m_maxLevel; //!< maximum level in all packets
+};
+
+} // end namespace Svc
#endif
diff --git a/Svc/TlmPacketizer/TlmPacketizerComponentImplCfg.hpp b/Svc/TlmPacketizer/TlmPacketizerComponentImplCfg.hpp
deleted file mode 100644
index bae4d1e91e..0000000000
--- a/Svc/TlmPacketizer/TlmPacketizerComponentImplCfg.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * TlmPacketizerComponentImplCfg.hpp
- *
- * Created on: Dec 10, 2017
- * Author: tim
- */
-
-// \copyright
-// Copyright 2009-2015, by the California Institute of Technology.
-// ALL RIGHTS RESERVED. United States Government Sponsorship
-// acknowledged.
-
-
-#ifndef SVC_TLMPACKETIZER_TLMPACKETIZERCOMPONENTIMPLCFG_HPP_
-#define SVC_TLMPACKETIZER_TLMPACKETIZERCOMPONENTIMPLCFG_HPP_
-
-#include
-
-namespace Svc {
- static const NATIVE_UINT_TYPE MAX_PACKETIZER_PACKETS = 200;
- static const NATIVE_UINT_TYPE TLMPACKETIZER_NUM_TLM_HASH_SLOTS = 15; // !< Number of slots in the hash table.
- // Works best when set to about twice the number of components producing telemetry
- static const NATIVE_UINT_TYPE TLMPACKETIZER_HASH_MOD_VALUE = 99; // !< The modulo value of the hashing function.
- // Should be set to a little below the ID gaps to spread the entries around
-
- static const NATIVE_UINT_TYPE TLMPACKETIZER_HASH_BUCKETS = 1000; // !< Buckets assignable to a hash slot.
- // Buckets must be >= number of telemetry channels in system
- static const NATIVE_UINT_TYPE TLMPACKETIZER_MAX_MISSING_TLM_CHECK = 25; // !< Maximum number of missing telemetry channel checks
-
- // packet update mode
- enum PacketUpdateMode {
- PACKET_UPDATE_ALWAYS, // Always send packets, even if no changes to channel data
- PACKET_UPDATE_ON_CHANGE, // Only send packets if any of the channels updates
- PACKET_UPDATE_AFTER_FIRST_CHANGE, // Always send packets, but only after first channel has been updated
- };
-
- static const PacketUpdateMode PACKET_UPDATE_MODE = PACKET_UPDATE_ON_CHANGE;
-}
-
-
-
-#endif /* SVC_TLMPACKETIZER_TLMPACKETIZERCOMPONENTIMPLCFG_HPP_ */
diff --git a/Svc/TlmPacketizer/TlmPacketizerTypes.hpp b/Svc/TlmPacketizer/TlmPacketizerTypes.hpp
index 1a0e9efd38..0ef7c38a62 100644
--- a/Svc/TlmPacketizer/TlmPacketizerTypes.hpp
+++ b/Svc/TlmPacketizer/TlmPacketizerTypes.hpp
@@ -10,31 +10,30 @@
// ALL RIGHTS RESERVED. United States Government Sponsorship
// acknowledged.
-
#ifndef SVC_TLMPACKETIZER_TLMPACKETIZERTYPES_HPP_
#define SVC_TLMPACKETIZER_TLMPACKETIZERTYPES_HPP_
#include
-#include
+#include
namespace Svc {
- struct TlmPacketizerChannelEntry {
- FwChanIdType id; //!< Id of channel
- NATIVE_UINT_TYPE size; //!< serialized size of channel in bytes
- };
+struct TlmPacketizerChannelEntry {
+ FwChanIdType id; //!< Id of channel
+ NATIVE_UINT_TYPE size; //!< serialized size of channel in bytes
+};
- struct TlmPacketizerPacket {
- const TlmPacketizerChannelEntry* list; //!< pointer to a channel entry
- FwTlmPacketizeIdType id; //!< packet ID
- NATIVE_UINT_TYPE level; //!< packet level - used to select set of packets to send
- NATIVE_UINT_TYPE numEntries; //!< number of channels in packet
- };
+struct TlmPacketizerPacket {
+ const TlmPacketizerChannelEntry* list; //!< pointer to a channel entry
+ FwTlmPacketizeIdType id; //!< packet ID
+ NATIVE_UINT_TYPE level; //!< packet level - used to select set of packets to send
+ NATIVE_UINT_TYPE numEntries; //!< number of channels in packet
+};
- struct TlmPacketizerPacketList {
- const TlmPacketizerPacket* list[MAX_PACKETIZER_PACKETS]; //!<
- NATIVE_UINT_TYPE numEntries;
- };
-}
+struct TlmPacketizerPacketList {
+ const TlmPacketizerPacket* list[MAX_PACKETIZER_PACKETS]; //!<
+ NATIVE_UINT_TYPE numEntries;
+};
+} // namespace Svc
#endif /* SVC_TLMPACKETIZER_TLMPACKETIZERTYPES_HPP_ */
diff --git a/Svc/TlmPacketizer/test/ut/Tester.cpp b/Svc/TlmPacketizer/test/ut/Tester.cpp
index ff3be6a8de..f72ef3feab 100644
--- a/Svc/TlmPacketizer/test/ut/Tester.cpp
+++ b/Svc/TlmPacketizer/test/ut/Tester.cpp
@@ -18,1051 +18,960 @@
namespace Svc {
- // ----------------------------------------------------------------------
- // Construction and destruction
- // ----------------------------------------------------------------------
+// ----------------------------------------------------------------------
+// Construction and destruction
+// ----------------------------------------------------------------------
- Tester ::
- Tester() :
- TlmPacketizerGTestBase("Tester", MAX_HISTORY_SIZE),
- component("TlmPacketizer")
- ,m_timeSent(false)
- {
+Tester ::Tester() : TlmPacketizerGTestBase("Tester", MAX_HISTORY_SIZE), component("TlmPacketizer"), m_timeSent(false) {
this->initComponents();
this->connectPorts();
- }
+}
- Tester ::
- ~Tester()
- {
+Tester ::~Tester() {}
- }
+// ----------------------------------------------------------------------
+// Tests
+// ----------------------------------------------------------------------
- // ----------------------------------------------------------------------
- // Tests
- // ----------------------------------------------------------------------
+// Some Test tables
- // Some Test tables
+TlmPacketizerChannelEntry packet1List[] = {{10, 4}, {100, 2}, {333, 1}};
- TlmPacketizerChannelEntry packet1List[] = {
- {10, 4},
- {100, 2},
- {333, 1}
- };
+TlmPacketizerChannelEntry packet2List[] = {{10, 4}, {13, 8}, {250, 2}, {22, 1}};
- TlmPacketizerChannelEntry packet2List[] = {
- {10, 4},
- {13, 8},
- {250, 2},
- {22,1}
- };
+TlmPacketizerPacket packet1 = {packet1List, 4, 1, FW_NUM_ARRAY_ELEMENTS(packet1List)};
- TlmPacketizerPacket packet1 = {packet1List, 4, 1, FW_NUM_ARRAY_ELEMENTS(packet1List)};
+TlmPacketizerPacket packet2 = {packet2List, 8, 2, FW_NUM_ARRAY_ELEMENTS(packet2List)};
- TlmPacketizerPacket packet2 = {packet2List, 8, 2, FW_NUM_ARRAY_ELEMENTS(packet2List)};
+TlmPacketizerPacketList packetList = {{&packet1, &packet2}, 2};
- TlmPacketizerPacketList packetList = {
- {&packet1, &packet2},
- 2
- };
+TlmPacketizerChannelEntry ignoreList[] = {{25, 0}, {50, 0}};
- TlmPacketizerChannelEntry ignoreList[] = {
- {25, 0},
- {50, 0}
- };
-
- TlmPacketizerPacket ignore = {ignoreList, 0, 0, FW_NUM_ARRAY_ELEMENTS(ignoreList)};
+TlmPacketizerPacket ignore = {ignoreList, 0, 0, FW_NUM_ARRAY_ELEMENTS(ignoreList)};
- void Tester ::
- initTest()
- {
- this->component.setPacketList(packetList,ignore,2);
-
- }
-
- void Tester ::
- pushTlmTest()
- {
- this->component.setPacketList(packetList,ignore,2);
- Fw::Time ts;
- Fw::TlmBuffer buff;
+void Tester ::initTest() {
+ this->component.setPacketList(packetList, ignore, 2);
+}
- // first channel
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(20)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,100,ts,buff);
-
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(14)));
- this->invoke_to_TlmRecv(0,333,ts,buff);
-
- // second channel
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(50)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1000000)));
- this->invoke_to_TlmRecv(0,13,ts,buff);
-
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1010)));
- this->invoke_to_TlmRecv(0,250,ts,buff);
-
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,22,ts,buff);
-
- }
-
-
- void Tester ::
- sendPacketsTest()
- {
- this->component.setPacketList(packetList,ignore,2);
- Fw::Time ts;
- Fw::TlmBuffer buff;
-
- // first channel
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(20)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- // second channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,100,ts,buff);
-
- // third channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(14)));
- this->invoke_to_TlmRecv(0,333,ts,buff);
-
- // fifth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1000000)));
- this->invoke_to_TlmRecv(0,13,ts,buff);
-
- // sixth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1010)));
- this->invoke_to_TlmRecv(0,250,ts,buff);
-
- // seventh channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,22,ts,buff);
-
- this->setTestTime(this->m_testTime);
- // run scheduler port to send packets
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- ASSERT_FROM_PORT_HISTORY_SIZE(2);
- ASSERT_from_PktSend_SIZE(2);
-
- // construct the packet buffers and make sure they are correct
-
- Fw::ComBuffer comBuff;
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(14)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1010)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
-
- ASSERT_from_PktSend(1,comBuff,static_cast(0));
-
- }
-
- void Tester ::
- sendPacketLevelsTest()
- {
- this->component.setPacketList(packetList,ignore,1);
- Fw::Time ts;
- Fw::TlmBuffer buff;
-
- // first channel
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(20)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- // second channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,100,ts,buff);
-
- // third channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(14)));
- this->invoke_to_TlmRecv(0,333,ts,buff);
-
- // fifth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1000000)));
- this->invoke_to_TlmRecv(0,13,ts,buff);
-
- // sixth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1010)));
- this->invoke_to_TlmRecv(0,250,ts,buff);
-
- // seventh channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,22,ts,buff);
-
- this->setTestTime(this->m_testTime);
- // run scheduler port to send packets
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- ASSERT_FROM_PORT_HISTORY_SIZE(2);
- ASSERT_from_PktSend_SIZE(2);
-
- // construct the packet buffers and make sure they are correct
-
- Fw::ComBuffer comBuff;
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(14)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1010)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
-
- ASSERT_from_PktSend(1,comBuff,static_cast(0));
-
- }
-
- void Tester ::
- updatePacketsTest()
- {
- this->component.setPacketList(packetList,ignore,2);
- Fw::Time ts;
- Fw::TlmBuffer buff;
-
- Fw::ComBuffer comBuff;
-
- // Initially no packets should be pushed
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- // Should be no packets pushed
- ASSERT_from_PktSend_SIZE(0);
-
- // first channel
- ts.set(100,1000);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(20)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- this->m_testTime.add(1,0);
- this->setTestTime(this->m_testTime);
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(2);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
-
- ASSERT_from_PktSend(1,comBuff,static_cast(0));
-
- // second channel
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,100,ts,buff);
-
- this->m_testTime.add(1,0);
- this->setTestTime(this->m_testTime);
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- // only one should be pushed
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(14)));
- this->invoke_to_TlmRecv(0,333,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- // only one should be pushed
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(14)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1000000)));
- this->invoke_to_TlmRecv(0,13,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1010)));
- this->invoke_to_TlmRecv(0,250,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1010)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,22,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1010)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- //** Update all the packets again with new values
-
- // first channel
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1000)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(2);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(14)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1010)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
-
- ASSERT_from_PktSend(1,comBuff,static_cast(0));
-
- // second channel
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(550)));
- this->invoke_to_TlmRecv(0,100,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(550)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(14)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(211)));
- this->invoke_to_TlmRecv(0,333,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(550)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(211)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(34441)));
- this->invoke_to_TlmRecv(0,13,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(34441)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1010)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(8649)));
- this->invoke_to_TlmRecv(0,250,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(34441)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8649)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(65)));
- this->invoke_to_TlmRecv(0,22,ts,buff);
-
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(34441)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8649)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(65)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- }
-
- void Tester ::
- ignoreTest()
- {
- this->component.setPacketList(packetList,ignore,2);
- Fw::Time ts;
- Fw::TlmBuffer buff;
-
- Fw::ComBuffer comBuff;
-
- // Initially no packets should be pushed
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- // Should be no packets pushed
- ASSERT_from_PktSend_SIZE(0);
-
- // first channel
- ts.set(100,1000);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(20)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- this->m_testTime.add(1,0);
- this->setTestTime(this->m_testTime);
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(2);
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(ts));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(0)));
-
- ASSERT_from_PktSend(1,comBuff,static_cast(0));
-
- // ignored channel
-
- buff.resetSer();
- ts.add(1,0);
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(20)));
- this->invoke_to_TlmRecv(0,25,ts,buff);
-
- this->m_testTime.add(1,0);
- this->setTestTime(this->m_testTime);
- this->clearFromPortHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- // no packets should be pushed
- ASSERT_from_PktSend_SIZE(0);
-
- }
-
- void Tester ::
- sendManualPacketTest()
- {
- this->component.setPacketList(packetList,ignore,2);
- Fw::Time ts;
- Fw::TlmBuffer buff;
-
- // first channel
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(20)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- // second channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,100,ts,buff);
-
- // third channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(14)));
- this->invoke_to_TlmRecv(0,333,ts,buff);
-
- // fifth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1000000)));
- this->invoke_to_TlmRecv(0,13,ts,buff);
-
- // sixth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(1010)));
- this->invoke_to_TlmRecv(0,250,ts,buff);
-
- // seventh channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(15)));
- this->invoke_to_TlmRecv(0,22,ts,buff);
-
- this->setTestTime(this->m_testTime);
- // run scheduler port to send packets
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- ASSERT_FROM_PORT_HISTORY_SIZE(2);
- ASSERT_from_PktSend_SIZE(2);
-
- // construct the packet buffers and make sure they are correct
-
- Fw::ComBuffer comBuff1;
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(15)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(14)));
-
- ASSERT_from_PktSend(0,comBuff1,static_cast(0));
-
- Fw::ComBuffer comBuff2;
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff2.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff2.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff2.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff2.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff2.serialize(static_cast(1000000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff2.serialize(static_cast(1010)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff2.serialize(static_cast(15)));
-
- ASSERT_from_PktSend(1,comBuff2,static_cast(0));
-
- // should not be any new packets
- this->clearHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- ASSERT_FROM_PORT_HISTORY_SIZE(0);
- ASSERT_from_PktSend_SIZE(0);
-
- // send command to manually send a packet
- this->sendCmd_SEND_PKT(0,12,4);
- this->component.doDispatch();
- ASSERT_EVENTS_SIZE(1);
- ASSERT_EVENTS_PacketSent(0,4);
- ASSERT_CMD_RESPONSE_SIZE(1);
- ASSERT_CMD_RESPONSE(0,TlmPacketizerComponentBase::OPCODE_SEND_PKT,12,Fw::CmdResponse::OK);
- // dispatch run call to send packet
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
- ASSERT_from_PktSend(0,comBuff1,static_cast(0));
-
- // another packet
- this->clearHistory();
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- ASSERT_FROM_PORT_HISTORY_SIZE(0);
- ASSERT_from_PktSend_SIZE(0);
-
- // send command to manually send a packet
- this->clearHistory();
- this->sendCmd_SEND_PKT(0,12,8);
- this->component.doDispatch();
- ASSERT_EVENTS_SIZE(1);
- ASSERT_EVENTS_PacketSent(0,8);
- ASSERT_CMD_RESPONSE_SIZE(1);
- ASSERT_CMD_RESPONSE(0,TlmPacketizerComponentBase::OPCODE_SEND_PKT,12,Fw::CmdResponse::OK);
- // dispatch run call to send packet
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
- ASSERT_from_PktSend_SIZE(1);
- ASSERT_from_PktSend(0,comBuff2,static_cast(0));
-
- // Try to send invalid packet
- // send command to manually send a packet
- this->clearHistory();
- this->sendCmd_SEND_PKT(0,12,20);
- this->component.doDispatch();
- ASSERT_EVENTS_SIZE(1);
- ASSERT_EVENTS_PacketNotFound(0,20);
- ASSERT_CMD_RESPONSE_SIZE(1);
- ASSERT_CMD_RESPONSE(0,TlmPacketizerComponentBase::OPCODE_SEND_PKT,12,Fw::CmdResponse::VALIDATION_ERROR);
-
- }
-
- void Tester ::
- setPacketLevelTest()
- {
- this->component.setPacketList(packetList,ignore,0);
- Fw::Time ts;
- Fw::TlmBuffer buff;
-
- // first channel
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x20)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- // second channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x15)));
- this->invoke_to_TlmRecv(0,100,ts,buff);
-
- // third channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x14)));
- this->invoke_to_TlmRecv(0,333,ts,buff);
-
- // fifth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x1000000)));
- this->invoke_to_TlmRecv(0,13,ts,buff);
-
- // sixth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x1010)));
- this->invoke_to_TlmRecv(0,250,ts,buff);
-
- // seventh channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x15)));
- this->invoke_to_TlmRecv(0,22,ts,buff);
-
- this->setTestTime(this->m_testTime);
- // run scheduler port to send packets
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- // should be no packets sent since packet level is 0
- ASSERT_FROM_PORT_HISTORY_SIZE(0);
- ASSERT_from_PktSend_SIZE(0);
-
- // send the command to select packet level 1
- this->clearHistory();
- this->sendCmd_SET_LEVEL(0,13,1);
- this->component.doDispatch();
- ASSERT_EVENTS_SIZE(1);
- ASSERT_EVENTS_LevelSet_SIZE(1);
- ASSERT_EVENTS_LevelSet(0,1);
- ASSERT_TLM_SIZE(1);
- ASSERT_TLM_SendLevel_SIZE(1);
- ASSERT_TLM_SendLevel(0,1);
-
- // send the packets
- // first channel
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x20)));
- this->invoke_to_TlmRecv(0,10,ts,buff);
-
- // second channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x15)));
- this->invoke_to_TlmRecv(0,100,ts,buff);
-
- // third channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x14)));
- this->invoke_to_TlmRecv(0,333,ts,buff);
-
- // fifth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x1000000)));
- this->invoke_to_TlmRecv(0,13,ts,buff);
-
- // sixth channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x1010)));
- this->invoke_to_TlmRecv(0,250,ts,buff);
-
- // seventh channel
- buff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,buff.serialize(static_cast(0x15)));
- this->invoke_to_TlmRecv(0,22,ts,buff);
-
- this->setTestTime(this->m_testTime);
- // run scheduler port to send packets
- this->invoke_to_Run(0,0);
- this->component.doDispatch();
-
- // should be one packet sent since packet level is 1
- ASSERT_FROM_PORT_HISTORY_SIZE(1);
- ASSERT_from_PktSend_SIZE(1);
-
- // Should be packet 4
-
- Fw::ComBuffer comBuff1;
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(0x20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(0x15)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff1.serialize(static_cast(0x14)));
-
- ASSERT_from_PktSend(0,comBuff1,static_cast(0));
-
-return;
-
- ASSERT_FROM_PORT_HISTORY_SIZE(2);
- ASSERT_from_PktSend_SIZE(2);
-
- // construct the packet buffers and make sure they are correct
-
- Fw::ComBuffer comBuff;
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(4)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(14)));
-
- ASSERT_from_PktSend(0,comBuff,static_cast(0));
-
- comBuff.resetSer();
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(Fw::ComPacket::FW_PACKET_PACKETIZED_TLM)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(8)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(this->m_testTime));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(20)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1000000)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(1010)));
- ASSERT_EQ(Fw::FW_SERIALIZE_OK,comBuff.serialize(static_cast(15)));
-
- ASSERT_from_PktSend(1,comBuff,static_cast(0));
-
- }
-
- void Tester ::
- nonPacketizedChannelTest() {
-
- this->component.setPacketList(packetList,ignore,2);
- Fw::Time ts;
- Fw::TlmBuffer buff;
-
- // start at non-used channel
- for (NATIVE_UINT_TYPE channel = 1000; channel < 1000 + TLMPACKETIZER_MAX_MISSING_TLM_CHECK; channel++) {
- this->clearEvents();
- this->invoke_to_TlmRecv(0,channel,ts,buff);
- ASSERT_EVENTS_SIZE(1);
- ASSERT_EVENTS_NoChan_SIZE(1);
- ASSERT_EVENTS_NoChan(0,channel);
- }
-
- // One more channel should not emit event
- this->clearEvents();
- this->invoke_to_TlmRecv(0,1000+TLMPACKETIZER_MAX_MISSING_TLM_CHECK,ts,buff);
- ASSERT_EVENTS_SIZE(0);
- ASSERT_EVENTS_NoChan_SIZE(0);
-
- // sending the missing channels again should emit no events
-
- for (NATIVE_UINT_TYPE channel = 1000; channel < 1000 + TLMPACKETIZER_MAX_MISSING_TLM_CHECK; channel++) {
- this->clearEvents();
- this->invoke_to_TlmRecv(0,channel,ts,buff);
- ASSERT_EVENTS_SIZE(0);
- ASSERT_EVENTS_NoChan_SIZE(0);
- }
-
- }
-
- void Tester ::
- pingTest() {
-
- this->component.setPacketList(packetList,ignore,2);
- // ping component
- this->clearFromPortHistory();
- this->invoke_to_pingIn(0,static_cast(0x1234));
- this->component.doDispatch();
- ASSERT_from_pingOut_SIZE(1);
- ASSERT_from_pingOut(0,static_cast(0x1234));
-
- }
-
- // ----------------------------------------------------------------------
- // Handlers for typed from ports
- // ----------------------------------------------------------------------
-
- void Tester ::
- from_Time_handler(
- const NATIVE_INT_TYPE portNum,
- Fw::Time &time
- )
- {
- time = this->m_testTime;
- this->m_timeSent = true;
- }
-
- void Tester ::
- from_PktSend_handler(
- const NATIVE_INT_TYPE portNum,
- Fw::ComBuffer &data,
- U32 context
- )
- {
+void Tester ::pushTlmTest() {
+ this->component.setPacketList(packetList, ignore, 2);
+ Fw::Time ts;
+ Fw::TlmBuffer buff;
+
+ // first channel
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(20)));
+ this->invoke_to_TlmRecv(0, 10, ts, buff);
+
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(15)));
+ this->invoke_to_TlmRecv(0, 100, ts, buff);
+
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(14)));
+ this->invoke_to_TlmRecv(0, 333, ts, buff);
+
+ // second channel
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(50)));
+ this->invoke_to_TlmRecv(0, 10, ts, buff);
+
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(1000000)));
+ this->invoke_to_TlmRecv(0, 13, ts, buff);
+
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(1010)));
+ this->invoke_to_TlmRecv(0, 250, ts, buff);
+
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(15)));
+ this->invoke_to_TlmRecv(0, 22, ts, buff);
+}
+
+void Tester ::sendPacketsTest() {
+ this->component.setPacketList(packetList, ignore, 2);
+ Fw::Time ts;
+ Fw::TlmBuffer buff;
+
+ // first channel
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(20)));
+ this->invoke_to_TlmRecv(0, 10, ts, buff);
+
+ // second channel
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(15)));
+ this->invoke_to_TlmRecv(0, 100, ts, buff);
+
+ // third channel
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(14)));
+ this->invoke_to_TlmRecv(0, 333, ts, buff);
+
+ // fifth channel
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(1000000)));
+ this->invoke_to_TlmRecv(0, 13, ts, buff);
+
+ // sixth channel
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast(1010)));
+ this->invoke_to_TlmRecv(0, 250, ts, buff);
+
+ // seventh channel
+ buff.resetSer();
+ ASSERT_EQ(Fw::FW_SERIALIZE_OK, buff.serialize(static_cast]