mirror of
https://github.com/nasa/fpp.git
synced 2025-12-11 03:05:32 -06:00
Add tests for port invocation code
This commit is contained in:
parent
2db9e58f1b
commit
17f6aa2097
262
compiler/tools/fpp-to-cpp/test/top/TypedPortsTopologyAc.ref.cpp
vendored
Normal file
262
compiler/tools/fpp-to-cpp/test/top/TypedPortsTopologyAc.ref.cpp
vendored
Normal file
@ -0,0 +1,262 @@
|
||||
// ======================================================================
|
||||
// \title TypedPortsTopologyAc.cpp
|
||||
// \author Generated by fpp-to-cpp
|
||||
// \brief cpp file for TypedPorts topology
|
||||
// ======================================================================
|
||||
|
||||
#include "TypedPortsTopologyAc.hpp"
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Component instances
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
namespace M {
|
||||
|
||||
M::PassiveReceiver passiveReceiver(FW_OPTIONAL_NAME("passiveReceiver"));
|
||||
|
||||
}
|
||||
|
||||
namespace M {
|
||||
|
||||
M::PassiveSender passiveSender(FW_OPTIONAL_NAME("passiveSender"));
|
||||
|
||||
}
|
||||
|
||||
namespace M {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Helper functions
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
void initComponents(const TopologyState& state) {
|
||||
M::passiveReceiver.init(InstanceIds::M_passiveReceiver);
|
||||
M::passiveSender.init(InstanceIds::M_passiveSender);
|
||||
}
|
||||
|
||||
void configComponents(const TopologyState& state) {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
void setBaseIds() {
|
||||
M::passiveSender.setIdBase(BaseIds::M_passiveSender);
|
||||
M::passiveReceiver.setIdBase(BaseIds::M_passiveReceiver);
|
||||
}
|
||||
|
||||
void connectComponents() {
|
||||
|
||||
#ifndef FW_DIRECT_PORT_CALLS
|
||||
|
||||
// C
|
||||
M::passiveSender.set_p1_OutputPort(
|
||||
0,
|
||||
M::passiveReceiver.get_p1_InputPort(0)
|
||||
);
|
||||
M::passiveSender.set_p1_OutputPort(
|
||||
1,
|
||||
M::passiveReceiver.get_p1_InputPort(0)
|
||||
);
|
||||
M::passiveSender.set_p2_OutputPort(
|
||||
0,
|
||||
M::passiveReceiver.get_p2_InputPort(1)
|
||||
);
|
||||
M::passiveSender.set_p2_OutputPort(
|
||||
1,
|
||||
M::passiveReceiver.get_p2_InputPort(0)
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void regCommands() {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
void readParameters() {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
void loadParameters() {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
void startTasks(const TopologyState& state) {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
void stopTasks(const TopologyState& state) {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
void freeThreads(const TopologyState& state) {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
void tearDownComponents(const TopologyState& state) {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Setup and teardown functions
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
void setup(const TopologyState& state) {
|
||||
initComponents(state);
|
||||
configComponents(state);
|
||||
setBaseIds();
|
||||
connectComponents();
|
||||
regCommands();
|
||||
readParameters();
|
||||
loadParameters();
|
||||
startTasks(state);
|
||||
}
|
||||
|
||||
void teardown(const TopologyState& state) {
|
||||
stopTasks(state);
|
||||
freeThreads(state);
|
||||
tearDownComponents(state);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#if FW_DIRECT_PORT_CALLS
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Topology-dependent component implementation
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
namespace M {
|
||||
|
||||
bool PassiveSenderComponentBase::isConnected_p1_OutputPort(FwIndexType portNum) const {
|
||||
FW_ASSERT(
|
||||
(0 <= portNum) && (portNum < NUM_P1_OUTPUT_PORTS),
|
||||
static_cast<FwAssertArgType>(portNum),
|
||||
static_cast<FwAssertArgType>(NUM_P1_OUTPUT_PORTS)
|
||||
);
|
||||
bool result = false;
|
||||
const auto instance = this->getInstance();
|
||||
switch (instance) {
|
||||
case ::M::InstanceIds::M_passiveSender:
|
||||
switch (portNum) {
|
||||
case 0:
|
||||
result = true;
|
||||
break;
|
||||
case 1:
|
||||
result = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
FW_ASSERT(0, static_cast<FwAssertArgType>(instance));
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool PassiveSenderComponentBase::isConnected_p2_OutputPort(FwIndexType portNum) const {
|
||||
FW_ASSERT(
|
||||
(0 <= portNum) && (portNum < NUM_P2_OUTPUT_PORTS),
|
||||
static_cast<FwAssertArgType>(portNum),
|
||||
static_cast<FwAssertArgType>(NUM_P2_OUTPUT_PORTS)
|
||||
);
|
||||
bool result = false;
|
||||
const auto instance = this->getInstance();
|
||||
switch (instance) {
|
||||
case ::M::InstanceIds::M_passiveSender:
|
||||
switch (portNum) {
|
||||
case 0:
|
||||
result = true;
|
||||
break;
|
||||
case 1:
|
||||
result = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
FW_ASSERT(0, static_cast<FwAssertArgType>(instance));
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void PassiveSenderComponentBase::p1_out(
|
||||
FwIndexType portNum,
|
||||
U32 x
|
||||
) const {
|
||||
FW_ASSERT(
|
||||
(0 <= portNum) && (portNum < NUM_P1_OUTPUT_PORTS),
|
||||
static_cast<FwAssertArgType>(portNum),
|
||||
static_cast<FwAssertArgType>(NUM_P1_OUTPUT_PORTS)
|
||||
);
|
||||
const auto instance = this->getInstance();
|
||||
switch (instance) {
|
||||
case ::M::InstanceIds::M_passiveSender:
|
||||
switch (portNum) {
|
||||
case 0:
|
||||
M::passiveReceiver.p1_handlerBase(
|
||||
0,
|
||||
x
|
||||
);
|
||||
break;
|
||||
case 1:
|
||||
M::passiveReceiver.p1_handlerBase(
|
||||
0,
|
||||
x
|
||||
);
|
||||
break;
|
||||
default:
|
||||
FW_ASSERT(0, static_cast<FwAssertArgType>(portNum));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
FW_ASSERT(0, static_cast<FwAssertArgType>(instance));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
U32 PassiveSenderComponentBase::p2_out(
|
||||
FwIndexType portNum,
|
||||
U32 x
|
||||
) const {
|
||||
FW_ASSERT(
|
||||
(0 <= portNum) && (portNum < NUM_P2_OUTPUT_PORTS),
|
||||
static_cast<FwAssertArgType>(portNum),
|
||||
static_cast<FwAssertArgType>(NUM_P2_OUTPUT_PORTS)
|
||||
);
|
||||
const auto instance = this->getInstance();
|
||||
U32 _result = {};
|
||||
switch (instance) {
|
||||
case ::M::InstanceIds::M_passiveSender:
|
||||
switch (portNum) {
|
||||
case 0:
|
||||
_result = M::passiveReceiver.p2_handlerBase(
|
||||
1,
|
||||
x
|
||||
);
|
||||
break;
|
||||
case 1:
|
||||
_result = M::passiveReceiver.p2_handlerBase(
|
||||
0,
|
||||
x
|
||||
);
|
||||
break;
|
||||
default:
|
||||
FW_ASSERT(0, static_cast<FwAssertArgType>(portNum));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
FW_ASSERT(0, static_cast<FwAssertArgType>(instance));
|
||||
break;
|
||||
}
|
||||
return _result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
117
compiler/tools/fpp-to-cpp/test/top/TypedPortsTopologyAc.ref.hpp
vendored
Normal file
117
compiler/tools/fpp-to-cpp/test/top/TypedPortsTopologyAc.ref.hpp
vendored
Normal file
@ -0,0 +1,117 @@
|
||||
// ======================================================================
|
||||
// \title TypedPortsTopologyAc.hpp
|
||||
// \author Generated by fpp-to-cpp
|
||||
// \brief hpp file for TypedPorts topology
|
||||
// ======================================================================
|
||||
|
||||
#ifndef M_TypedPortsTopologyAc_HPP
|
||||
#define M_TypedPortsTopologyAc_HPP
|
||||
|
||||
#include "PassiveReceiver.hpp"
|
||||
#include "PassiveSender.hpp"
|
||||
#include "TypedPortsTopologyDefs.hpp"
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Component instances
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
namespace M {
|
||||
|
||||
//! passiveReceiver
|
||||
extern M::PassiveReceiver passiveReceiver;
|
||||
|
||||
}
|
||||
|
||||
namespace M {
|
||||
|
||||
//! passiveSender
|
||||
extern M::PassiveSender passiveSender;
|
||||
|
||||
}
|
||||
|
||||
namespace M {
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Constants
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
namespace BaseIds {
|
||||
enum {
|
||||
M_passiveSender = 0x100,
|
||||
M_passiveReceiver = 0x200,
|
||||
};
|
||||
}
|
||||
|
||||
namespace InstanceIds {
|
||||
enum {
|
||||
M_passiveReceiver,
|
||||
M_passiveSender,
|
||||
};
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Helper functions
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
//! Initialize components
|
||||
void initComponents(
|
||||
const TopologyState& state //!< The topology state
|
||||
);
|
||||
|
||||
//! Configure components
|
||||
void configComponents(
|
||||
const TopologyState& state //!< The topology state
|
||||
);
|
||||
|
||||
//! Set component base Ids
|
||||
void setBaseIds();
|
||||
|
||||
//! Connect components
|
||||
void connectComponents();
|
||||
|
||||
//! Register commands
|
||||
void regCommands();
|
||||
|
||||
//! Read parameters
|
||||
void readParameters();
|
||||
|
||||
//! Load parameters
|
||||
void loadParameters();
|
||||
|
||||
//! Start tasks
|
||||
void startTasks(
|
||||
const TopologyState& state //!< The topology state
|
||||
);
|
||||
|
||||
//! Stop tasks
|
||||
void stopTasks(
|
||||
const TopologyState& state //!< The topology state
|
||||
);
|
||||
|
||||
//! Free threads
|
||||
void freeThreads(
|
||||
const TopologyState& state //!< The topology state
|
||||
);
|
||||
|
||||
//! Tear down components
|
||||
void tearDownComponents(
|
||||
const TopologyState& state //!< The topology state
|
||||
);
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Setup and teardown functions
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
//! Set up the topology
|
||||
void setup(
|
||||
const TopologyState& state //!< The topology state
|
||||
);
|
||||
|
||||
//! Tear down the topology
|
||||
void teardown(
|
||||
const TopologyState& state //!< The topology state
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
4
compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/TypedPorts/.gitignore
vendored
Normal file
4
compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/TypedPorts/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
*.xml
|
||||
*.o
|
||||
*Ac.*
|
||||
*Ai.*
|
||||
@ -0,0 +1,29 @@
|
||||
#ifndef M_Passive_HPP
|
||||
#define M_Passive_HPP
|
||||
|
||||
#include "PassiveComponentAc.hpp"
|
||||
|
||||
namespace M {
|
||||
|
||||
class Passive :
|
||||
public PassiveComponentBase
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
Passive(const char* name) {
|
||||
|
||||
}
|
||||
|
||||
void init(U32 instanceId) {
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Simulate a concrete implementation
|
||||
typedef Passive ConcretePassive;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,42 @@
|
||||
#ifndef M_PassiveReceiver_HPP
|
||||
#define M_PassiveReceiver_HPP
|
||||
|
||||
#include "PassiveReceiverComponentAc.hpp"
|
||||
|
||||
namespace M {
|
||||
|
||||
class PassiveReceiver :
|
||||
public PassiveReceiverComponentBase
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
PassiveReceiver() {
|
||||
|
||||
}
|
||||
|
||||
PassiveReceiver(const char* name) {
|
||||
|
||||
}
|
||||
|
||||
//! Handler for input port p1
|
||||
virtual void p1_handler(
|
||||
FwIndexType portNum, //!< The port number
|
||||
U32 x
|
||||
) {
|
||||
|
||||
}
|
||||
|
||||
//! Handler for input port p2
|
||||
virtual U32 p2_handler(
|
||||
FwIndexType portNum, //!< The port number
|
||||
U32 x
|
||||
) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,26 @@
|
||||
#ifndef M_PassiveSender_HPP
|
||||
#define M_PassiveSender_HPP
|
||||
|
||||
#include "PassiveSenderComponentAc.hpp"
|
||||
|
||||
namespace M {
|
||||
|
||||
class PassiveSender :
|
||||
public PassiveSenderComponentBase
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
PassiveSender() {
|
||||
|
||||
}
|
||||
|
||||
PassiveSender(const char* name) {
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,5 @@
|
||||
namespace M {
|
||||
|
||||
typedef int TopologyState;
|
||||
|
||||
}
|
||||
25
compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/TypedPorts/check
Executable file
25
compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/TypedPorts/check
Executable file
@ -0,0 +1,25 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
fpp_to_cpp=../../../../../../bin/fpp-to-cpp
|
||||
fprime_gcc=../../../../../../scripts/fprime-gcc
|
||||
|
||||
echo ' removing old files'
|
||||
./clean
|
||||
|
||||
dir=`cd ../..; echo $PWD`
|
||||
|
||||
echo ' generating C++'
|
||||
$fpp_to_cpp -p $dir ../../typed_ports.fpp
|
||||
|
||||
for suffix in hpp cpp
|
||||
do
|
||||
cp ../../TypedPortsTopologyAc.ref.$suffix TypedPortsTopologyAc.$suffix
|
||||
done
|
||||
|
||||
flags="-I.. -I../../../fprime -I../../../fprime/config -Wno-unused-parameter -c"
|
||||
echo ' compiling C++'
|
||||
for variable_flags in '' '-DFW_DIRECT_PORT_CALLS'
|
||||
do
|
||||
echo " variable_flags=$variable_flags"
|
||||
$fprime_gcc $variable_flags $flags TypedPortsTopologyAc.cpp
|
||||
done
|
||||
6
compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/TypedPorts/clean
Executable file
6
compiler/tools/fpp-to-cpp/test/top/check-cpp-dir/TypedPorts/clean
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
for file in `find . -name '*~' -or -name '*Ac.*' -or -name '*Ai.xml' -or -name '*.o'`
|
||||
do
|
||||
rm $file
|
||||
done
|
||||
@ -3,3 +3,4 @@ Commands
|
||||
Health
|
||||
Params
|
||||
TlmPackets
|
||||
TypedPorts
|
||||
|
||||
@ -49,3 +49,8 @@ tlm_packets()
|
||||
diff_cpp TwoInstances_P1TlmPackets
|
||||
}
|
||||
|
||||
typed_ports()
|
||||
{
|
||||
run_test "-p $PWD" typed_ports && \
|
||||
diff_cpp TypedPortsTopology
|
||||
}
|
||||
|
||||
@ -6,4 +6,5 @@ nested_namespaces
|
||||
no_namespace
|
||||
params
|
||||
tlm_packets
|
||||
typed_ports
|
||||
"
|
||||
|
||||
40
compiler/tools/fpp-to-cpp/test/top/typed_ports.fpp
Normal file
40
compiler/tools/fpp-to-cpp/test/top/typed_ports.fpp
Normal file
@ -0,0 +1,40 @@
|
||||
module M {
|
||||
|
||||
port P1(x: U32)
|
||||
port P2(x: U32) -> U32
|
||||
|
||||
passive component PassiveSender {
|
||||
|
||||
output port p1: [2] P1
|
||||
output port p2: [2] P2
|
||||
|
||||
}
|
||||
|
||||
passive component PassiveReceiver {
|
||||
|
||||
sync input port p1: [2] P1
|
||||
sync input port p2: [2] P2
|
||||
|
||||
}
|
||||
|
||||
instance passiveSender: PassiveSender base id 0x100
|
||||
instance passiveReceiver: PassiveReceiver base id 0x200
|
||||
|
||||
topology TypedPorts {
|
||||
|
||||
instance passiveSender
|
||||
instance passiveReceiver
|
||||
|
||||
connections C {
|
||||
|
||||
passiveSender.p1 -> passiveReceiver.p1
|
||||
passiveSender.p1 -> passiveReceiver.p1
|
||||
|
||||
passiveSender.p2[0] -> passiveReceiver.p2[1]
|
||||
passiveSender.p2[1] -> passiveReceiver.p2[0]
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -48,3 +48,9 @@ tlm_packets()
|
||||
move_cpp TwoInstancesTopology
|
||||
move_cpp TwoInstances_P1TlmPackets
|
||||
}
|
||||
|
||||
typed_ports()
|
||||
{
|
||||
update "-p $PWD" typed_ports
|
||||
move_cpp TypedPortsTopology
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user