Skip to content

Commit c1dbbfb

Browse files
committed
Merge remote-tracking branch 'origin/main' into feature/event-throttle-time
2 parents c2df13a + 04a4ff2 commit c1dbbfb

File tree

303 files changed

+8353
-18736
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

303 files changed

+8353
-18736
lines changed

compiler/lib/src/main/scala/codegen/CppWriter/ArrayCppWriter.scala

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -484,13 +484,19 @@ case class ArrayCppWriter (
484484
CppDoc.Type("Fw::SerializeBufferBase&"),
485485
"buffer",
486486
Some("The serial buffer"),
487+
),
488+
CppDoc.Function.Param(
489+
CppDoc.Type("Fw::Endianness"),
490+
"mode",
491+
Some("Endianness of serialized buffer"),
492+
Some("Fw::Endianness::BIG"),
487493
)
488494
),
489495
CppDoc.Type("Fw::SerializeStatus"),
490496
List.concat(
491497
lines("Fw::SerializeStatus status = Fw::FW_SERIALIZE_OK;"),
492498
indexIterator(
493-
line("status = buffer.serializeFrom((*this)[index]);") ::
499+
line("status = buffer.serializeFrom((*this)[index], mode);") ::
494500
wrapInIf("status != Fw::FW_SERIALIZE_OK", lines("return status;")),
495501
),
496502
lines("return status;"),
@@ -506,13 +512,19 @@ case class ArrayCppWriter (
506512
CppDoc.Type("Fw::SerializeBufferBase&"),
507513
"buffer",
508514
Some("The serial buffer"),
515+
),
516+
CppDoc.Function.Param(
517+
CppDoc.Type("Fw::Endianness"),
518+
"mode",
519+
Some("Endianness of serialized buffer"),
520+
Some("Fw::Endianness::BIG"),
509521
)
510522
),
511523
CppDoc.Type("Fw::SerializeStatus"),
512524
List.concat(
513525
lines("Fw::SerializeStatus status = Fw::FW_SERIALIZE_OK;"),
514526
indexIterator(
515-
line("status = buffer.deserializeTo((*this)[index]);") ::
527+
line("status = buffer.deserializeTo((*this)[index], mode);") ::
516528
wrapInIf("status != Fw::FW_SERIALIZE_OK", lines("return status;")),
517529
),
518530
lines("return status;"),

compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentCppWriterUtils.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,12 @@ abstract class ComponentCppWriterUtils(
978978

979979
object ComponentCppWriterUtils {
980980

981+
/** Whether code generation is internal or external to the component */
982+
enum InternalOrExternal {
983+
case Internal
984+
case External
985+
}
986+
981987
/** ( parameter name, parameter type name, parameter type ) **/
982988
type ParamTypeMapInfo = (String, String, Type)
983989
type CmdParamTypeMap = Map[Command.Opcode, List[ParamTypeMapInfo]]

compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentPorts.scala

Lines changed: 116 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -14,167 +14,145 @@ case class ComponentPorts(
1414

1515
private val outputPortWriter = ComponentOutputPorts(s, aNode)
1616

17-
def getConstantMembers: List[CppDoc.Class.Member] = {
18-
List(
19-
getConstants(specialInputPorts),
20-
getConstants(typedInputPorts),
21-
getConstants(serialInputPorts),
22-
getConstants(specialOutputPorts),
23-
getConstants(typedOutputPorts),
24-
getConstants(serialOutputPorts),
25-
).flatten
26-
}
27-
28-
def getPublicFunctionMembers: List[CppDoc.Class.Member] = {
29-
List(
30-
inputPortWriter.getGetters(specialInputPorts),
31-
inputPortWriter.getGetters(typedInputPorts),
32-
inputPortWriter.getGetters(serialInputPorts),
33-
outputPortWriter.getTypedConnectors(specialOutputPorts),
34-
outputPortWriter.getTypedConnectors(typedOutputPorts),
35-
outputPortWriter.getSerialConnectors(specialOutputPorts),
36-
outputPortWriter.getSerialConnectors(typedOutputPorts),
37-
outputPortWriter.getSerialConnectors(serialOutputPorts),
38-
).flatten
39-
}
40-
41-
def getProtectedFunctionMembers: List[CppDoc.Class.Member] = {
42-
List(
43-
getNumGetters(specialInputPorts),
44-
getNumGetters(typedInputPorts),
45-
getNumGetters(serialInputPorts),
46-
getNumGetters(specialOutputPorts),
47-
getNumGetters(typedOutputPorts),
48-
getNumGetters(serialOutputPorts),
49-
outputPortWriter.getConnectionStatusQueries(specialOutputPorts),
50-
outputPortWriter.getConnectionStatusQueries(typedOutputPorts),
51-
outputPortWriter.getConnectionStatusQueries(serialOutputPorts),
52-
inputPortWriter.getHandlerBases(dataProductInputPorts),
53-
inputPortWriter.getHandlers(typedInputPorts),
54-
inputPortWriter.getHandlerBases(typedInputPorts),
55-
inputPortWriter.getHandlers(serialInputPorts),
56-
inputPortWriter.getHandlerBases(serialInputPorts),
57-
inputPortWriter.getPreMsgHooks(dataProductAsyncInputPorts),
58-
inputPortWriter.getPreMsgHooks(typedAsyncInputPorts),
59-
inputPortWriter.getPreMsgHooks(serialAsyncInputPorts),
60-
inputPortWriter.getOverflowHooks(dataProductHookPorts),
61-
inputPortWriter.getOverflowHooks(typedHookPorts),
62-
inputPortWriter.getOverflowHooks(serialHookPorts),
63-
outputPortWriter.getInvokers(dataProductOutputPorts),
64-
outputPortWriter.getInvokers(typedOutputPorts),
65-
outputPortWriter.getInvokers(serialOutputPorts),
66-
).flatten
67-
}
68-
69-
def getPrivateFunctionMembers: List[CppDoc.Class.Member] = {
70-
List(
71-
inputPortWriter.getCallbacks(specialInputPorts),
72-
inputPortWriter.getCallbacks(typedInputPorts),
73-
inputPortWriter.getCallbacks(serialInputPorts)
74-
).flatten
75-
}
76-
77-
def getVariableMembers: List[CppDoc.Class.Member] = {
78-
List(
79-
getVariables(specialInputPorts),
80-
getVariables(typedInputPorts),
81-
getVariables(serialInputPorts),
82-
getVariables(specialOutputPorts),
83-
getVariables(typedOutputPorts),
84-
getVariables(serialOutputPorts),
85-
).flatten
86-
}
17+
def getConstantMembers: List[CppDoc.Class.Member] = List.concat(
18+
getConstants(specialInputPorts),
19+
getConstants(typedInputPorts),
20+
getConstants(serialInputPorts),
21+
getConstants(specialOutputPorts),
22+
getConstants(typedOutputPorts),
23+
getConstants(serialOutputPorts),
24+
)
25+
26+
def getPublicFunctionMembers: List[CppDoc.Class.Member] = List.concat(
27+
inputPortWriter.getGetters(specialInputPorts),
28+
inputPortWriter.getGetters(typedInputPorts),
29+
inputPortWriter.getGetters(serialInputPorts),
30+
outputPortWriter.getTypedConnectors(specialOutputPorts),
31+
outputPortWriter.getTypedConnectors(typedOutputPorts),
32+
outputPortWriter.getSerialConnectors(specialOutputPorts),
33+
outputPortWriter.getSerialConnectors(typedOutputPorts),
34+
outputPortWriter.getSerialConnectors(serialOutputPorts),
35+
)
36+
37+
def getProtectedFunctionMembers: List[CppDoc.Class.Member] = List.concat(
38+
getNumGetters(specialInputPorts),
39+
getNumGetters(typedInputPorts),
40+
getNumGetters(serialInputPorts),
41+
getNumGetters(specialOutputPorts),
42+
getNumGetters(typedOutputPorts),
43+
getNumGetters(serialOutputPorts),
44+
outputPortWriter.getConnectionStatusQueries(specialOutputPorts),
45+
outputPortWriter.getConnectionStatusQueries(typedOutputPorts),
46+
outputPortWriter.getConnectionStatusQueries(serialOutputPorts),
47+
inputPortWriter.getHandlerBases(dataProductInputPorts),
48+
inputPortWriter.getHandlers(typedInputPorts),
49+
inputPortWriter.getHandlerBases(typedInputPorts),
50+
inputPortWriter.getHandlers(serialInputPorts),
51+
inputPortWriter.getHandlerBases(serialInputPorts),
52+
inputPortWriter.getPreMsgHooks(dataProductAsyncInputPorts),
53+
inputPortWriter.getPreMsgHooks(typedAsyncInputPorts),
54+
inputPortWriter.getPreMsgHooks(serialAsyncInputPorts),
55+
inputPortWriter.getOverflowHooks(dataProductHookPorts),
56+
inputPortWriter.getOverflowHooks(typedHookPorts),
57+
inputPortWriter.getOverflowHooks(serialHookPorts),
58+
outputPortWriter.getInvokers(dataProductOutputPorts),
59+
outputPortWriter.getInvokers(typedOutputPorts),
60+
outputPortWriter.getInvokers(serialOutputPorts),
61+
)
62+
63+
def getPrivateFunctionMembers: List[CppDoc.Class.Member] = List.concat(
64+
inputPortWriter.getCallbacks(specialInputPorts),
65+
inputPortWriter.getCallbacks(typedInputPorts),
66+
inputPortWriter.getCallbacks(serialInputPorts)
67+
)
68+
69+
def getVariableMembers: List[CppDoc.Class.Member] = List.concat(
70+
getVariables(specialInputPorts),
71+
getVariables(typedInputPorts),
72+
getVariables(serialInputPorts),
73+
getVariables(specialOutputPorts),
74+
getVariables(typedOutputPorts),
75+
getVariables(serialOutputPorts),
76+
)
8777

8878
private def getConstants(ports: List[PortInstance]): List[CppDoc.Class.Member] = {
89-
if ports.isEmpty then Nil
90-
else List(
79+
lazy val member = {
80+
val kind = getPortListTypeString(ports)
81+
val direction = ports.head.getDirection.get.toString
82+
def enumConstant(p: PortInstance) =
83+
writeEnumConstant(portConstantName(p), p.getArraySize)
9184
linesClassMember(
92-
List(
93-
Line.blank :: lines(
94-
s"//! Enumerations for numbers of ${getPortListTypeString(ports)} ${ports.head.getDirection.get.toString} ports"
95-
),
96-
wrapInEnum(
97-
ports.flatMap(p =>
98-
writeEnumConstant(
99-
portConstantName(p),
100-
p.getArraySize,
101-
)
102-
)
103-
)
104-
).flatten
85+
Line.blank ::
86+
line(s"//! Enumerations for numbers of $kind $direction ports") ::
87+
wrapInEnum(ports.flatMap(enumConstant))
10588
)
106-
)
89+
}
90+
guardedList (!ports.isEmpty) (List(member))
10791
}
10892

10993
def generateNumGetters(
11094
ports: List[PortInstance],
11195
portName: PortInstance => String,
11296
numGetterName: PortInstance => String,
113-
variableName: PortInstance => String
97+
ioe: ComponentCppWriterUtils.InternalOrExternal =
98+
ComponentCppWriterUtils.InternalOrExternal.Internal
11499
) = {
115-
mapPorts(ports, p => List(
116-
functionClassMember(
117-
Some(
118-
s"""|Get the number of ${portName(p)} ports
119-
|
120-
|\\return The number of ${portName(p)} ports
121-
|"""
122-
),
123-
numGetterName(p),
124-
Nil,
125-
CppDoc.Type("FwIndexType"),
126-
lines(
127-
s"return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->${variableName(p)}));"
128-
),
129-
CppDoc.Function.NonSV,
130-
CppDoc.Function.Const
131-
)
132-
))
100+
lazy val constantPrefix = ioe match {
101+
case ComponentCppWriterUtils.InternalOrExternal.Internal => ""
102+
case ComponentCppWriterUtils.InternalOrExternal.External =>
103+
s"$componentClassName::"
104+
}
105+
def generateNumGetter(p: PortInstance) = lines(
106+
s"""|
107+
|//! Get the number of ${portName(p)} ports
108+
|//!
109+
|//! \\return The number of ${portName(p)} ports
110+
|static constexpr FwIndexType ${numGetterName(p)}() {
111+
| return ${constantPrefix}${portConstantName(p)};
112+
|}
113+
|"""
114+
)
115+
mapPorts(
116+
ports,
117+
p => List(linesClassMember(generateNumGetter(p))),
118+
CppDoc.Lines.Hpp
119+
)
133120
}
134121

135122
private def getNumGetters(ports: List[PortInstance]): List[CppDoc.Class.Member] = {
136-
val dirStr = ports match {
137-
case Nil => ""
138-
case _ => ports.head.getDirection.get.toString
139-
}
140-
123+
lazy val direction = ports.headOption.map(_.getDirection.get.toString).getOrElse("")
124+
lazy val kind = getPortListTypeString(ports)
125+
def portName(p: PortInstance) =
126+
s"${p.getUnqualifiedName} ${p.getDirection.get.toString}"
141127
addAccessTagAndComment(
142128
"protected",
143-
s"Getters for numbers of ${getPortListTypeString(ports)} $dirStr ports",
144-
generateNumGetters(
145-
ports,
146-
(p: PortInstance) => s"${p.getUnqualifiedName} ${p.getDirection.get.toString}",
147-
portNumGetterName,
148-
portVariableName
149-
)
129+
s"Getters for numbers of $kind $direction ports",
130+
generateNumGetters(ports, portName, portNumGetterName),
131+
CppDoc.Lines.Hpp
150132
)
151133
}
152134

153135
private def getVariables(ports: List[PortInstance]): List[CppDoc.Class.Member] = {
154-
val dirStr = ports match {
155-
case Nil => ""
156-
case _ => ports.head.getDirection.get.toString
136+
lazy val direction = ports.headOption.map(_.getDirection.get.toString).getOrElse("")
137+
def variable(p: PortInstance) = {
138+
val typeName = getQualifiedPortTypeName(p, p.getDirection.get)
139+
val name = portVariableName(p)
140+
val num = portConstantName(p)
141+
lines(
142+
s"""|
143+
|//! ${p.getDirection.get.toString.capitalize} port ${p.getUnqualifiedName}
144+
|$typeName $name[$num];
145+
|"""
146+
)
157147
}
158-
159148
addAccessTagAndComment(
160149
"private",
161-
s"${getPortListTypeString(ports).capitalize} $dirStr ports",
162-
mapPorts(ports, p => {
163-
val typeName = getQualifiedPortTypeName(p, p.getDirection.get)
164-
val name = portVariableName(p)
165-
val num = portConstantName(p)
166-
167-
List(
168-
linesClassMember(
169-
lines(
170-
s"""|
171-
|//! ${p.getDirection.get.toString.capitalize} port ${p.getUnqualifiedName}
172-
|$typeName $name[$num];
173-
|"""
174-
)
175-
)
176-
)
177-
}, CppDoc.Lines.Hpp),
150+
s"${getPortListTypeString(ports).capitalize} $direction ports",
151+
mapPorts(
152+
ports,
153+
p => List(linesClassMember(variable(p))),
154+
CppDoc.Lines.Hpp
155+
),
178156
CppDoc.Lines.Hpp
179157
)
180158
}

compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/TestWriter/ComponentTestUtils.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ abstract class ComponentTestUtils(
167167
def outputPortName(name: String) =
168168
s"to_$name"
169169

170-
/** Get the corresponding tester port name for a port in the component under test */
170+
/** Get the corresponding tester port name for a port in the component under test */
171171
def testerPortName(p: PortInstance) =
172172
p.getDirection.get match {
173173
case PortInstance.Direction.Input => outputPortName(p.getUnqualifiedName)

compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/TestWriter/ComponentTesterBaseWriter.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,9 @@ case class ComponentTesterBaseWriter(
505505
inputPorts ++ outputPorts,
506506
testerPortName,
507507
testerPortNumGetterName,
508-
testerPortVariableName
509-
)
508+
ComponentCppWriterUtils.InternalOrExternal.External
509+
),
510+
CppDoc.Lines.Hpp
510511
)
511512
}
512513

0 commit comments

Comments
 (0)