F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
FpySequencerComponentAc.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title FpySequencerComponentAc.hpp
3 // \author Generated by fpp-to-cpp
4 // \brief hpp file for FpySequencer component base class
5 // ======================================================================
6 
7 #ifndef Svc_FpySequencerComponentAc_HPP
8 #define Svc_FpySequencerComponentAc_HPP
9 
10 #include <atomic>
11 
12 #include "Fw/Cmd/CmdPortAc.hpp"
13 #include "Fw/Cmd/CmdRegPortAc.hpp"
16 #include "Fw/Cmd/CmdString.hpp"
17 #include "Fw/Com/ComPortAc.hpp"
19 #include "Fw/FPrimeBasicTypes.hpp"
20 #include "Fw/Log/LogPortAc.hpp"
21 #include "Fw/Log/LogString.hpp"
22 #include "Fw/Log/LogTextPortAc.hpp"
23 #if !FW_DIRECT_PORT_CALLS
25 #endif
26 #if !FW_DIRECT_PORT_CALLS
28 #endif
29 #include "Fw/Prm/PrmGetPortAc.hpp"
30 #include "Fw/Prm/PrmSetPortAc.hpp"
31 #include "Fw/Prm/PrmString.hpp"
32 #include "Fw/Time/TimePortAc.hpp"
33 #include "Fw/Tlm/TlmGetPortAc.hpp"
34 #include "Fw/Tlm/TlmPortAc.hpp"
35 #include "Fw/Tlm/TlmString.hpp"
37 #include "Os/Mutex.hpp"
78 #include "Svc/Ping/PingPortAc.hpp"
91 
92 static_assert(
94  "FpySequencer component requires serialization"
95 );
96 
97 namespace Svc {
98 
105  {
106 
107  // ----------------------------------------------------------------------
108  // Friend classes
109  // ----------------------------------------------------------------------
110 
114  friend class FpySequencerTester;
115 
116  protected:
117 
118  // ----------------------------------------------------------------------
119  // Constants
120  // ----------------------------------------------------------------------
121 
123  enum {
125  };
126 
128  enum {
135  };
136 
138  enum {
147  };
148 
150  enum {
157  };
158 
160  enum {
162  };
163 
165  enum {
166  OPCODE_RUN = 0x0,
172  OPCODE_SET_BREAKPOINT = 0x6,
174  OPCODE_BREAK = 0x7,
178  OPCODE_CONTINUE = 0x8,
183  OPCODE_STEP = 0xa,
191  };
192 
194  enum {
242  };
243 
245  enum {
268  };
269 
271  enum {
273  PARAMID_SEQ_BASE_DIR = 0x1,
277  };
281 
283  enum class SmId : FwEnumStoreType {
284  sequencer,
285  };
286 
287  protected:
288 
289  // ----------------------------------------------------------------------
290  // Types for internal state machines
291  // ----------------------------------------------------------------------
292 
296  {
297 
298  // ----------------------------------------------------------------------
299  // Friend classes
300  // ----------------------------------------------------------------------
301 
305  friend class FpySequencerTester;
306 
307  public:
308 
311  FpySequencerComponentBase& component
312  );
313 
314  public:
315 
317  void init(
319  );
320 
321  public:
322 
325 
326  private:
327 
329  void action_signalEntered(
330  Signal signal
331  );
332 
334  void action_setSequenceFilePath(
335  Signal signal,
337  );
338 
340  void action_setSequenceBlockState(
341  Signal signal,
343  );
344 
346  void action_setSequenceArguments(
347  Signal signal,
349  );
350 
352  void action_validate(
353  Signal signal
354  );
355 
357  void action_report_seqSucceeded(
358  Signal signal
359  );
360 
362  void action_report_seqCancelled(
363  Signal signal
364  );
365 
367  void action_report_seqFailed(
368  Signal signal
369  );
370 
372  void action_report_seqStarted(
373  Signal signal
374  );
375 
377  void action_setGoalState_RUNNING(
378  Signal signal
379  );
380 
382  void action_setGoalState_VALID(
383  Signal signal
384  );
385 
387  void action_setGoalState_IDLE(
388  Signal signal
389  );
390 
392  void action_sendCmdResponse_OK(
393  Signal signal
394  );
395 
397  void action_sendCmdResponse_EXECUTION_ERROR(
398  Signal signal
399  );
400 
402  void action_clearSequenceFile(
403  Signal signal
404  );
405 
407  void action_clearBreakpoint(
408  Signal signal
409  );
410 
412  void action_clearSequenceArguments(
413  Signal signal
414  );
415 
417  void action_checkShouldWake(
418  Signal signal
419  );
420 
422  void action_dispatchStatement(
423  Signal signal
424  );
425 
427  void action_resetRuntime(
428  Signal signal
429  );
430 
432  void action_checkStatementTimeout(
433  Signal signal
434  );
435 
437  void action_incrementSequenceCounter(
438  Signal signal
439  );
440 
442  void action_pushArgsToStack(
443  Signal signal
444  );
445 
447  void action_report_seqBroken(
448  Signal signal
449  );
450 
452  void action_setBreakpoint(
453  Signal signal,
455  );
456 
458  void action_setBreakBeforeNextLine(
459  Signal signal
460  );
461 
463  void action_clearBreakBeforeNextLine(
464  Signal signal
465  );
466 
467  private:
468 
470  bool guard_goalStateIs_RUNNING(
471  Signal signal
472  ) const;
473 
475  bool guard_shouldBreak(
476  Signal signal
477  ) const;
478 
480  bool guard_breakOnce(
481  Signal signal
482  ) const;
483 
484  private:
485 
487  FpySequencerComponentBase& m_component;
488 
489  };
490 
491  public:
492 
493  // ----------------------------------------------------------------------
494  // Component initialization
495  // ----------------------------------------------------------------------
496 
498  void init(
499  FwSizeType queueDepth,
500  FwEnumStoreType instance = 0
501  );
502 
503 #if !FW_DIRECT_PORT_CALLS
504 
505  public:
506 
507  // ----------------------------------------------------------------------
508  // Getters for special input ports
509  // ----------------------------------------------------------------------
510 
515  FwIndexType portNum
516  );
517 
518 #endif
519 
520 #if !FW_DIRECT_PORT_CALLS
521 
522  public:
523 
524  // ----------------------------------------------------------------------
525  // Getters for typed input ports
526  // ----------------------------------------------------------------------
527 
532  FwIndexType portNum
533  );
534 
539  FwIndexType portNum
540  );
541 
546  FwIndexType portNum
547  );
548 
553  FwIndexType portNum
554  );
555 
560  FwIndexType portNum
561  );
562 
567  FwIndexType portNum
568  );
569 
570 #endif
571 
572 #if !FW_DIRECT_PORT_CALLS
573 
574  public:
575 
576  // ----------------------------------------------------------------------
577  // Connect input ports to special output ports
578  // ----------------------------------------------------------------------
579 
582  FwIndexType portNum,
583  Fw::InputCmdRegPort* port
584  );
585 
588  FwIndexType portNum,
590  );
591 
594  FwIndexType portNum,
595  Fw::InputLogPort* port
596  );
597 
598 #if FW_ENABLE_TEXT_LOGGING == 1
599 
601  void set_logTextOut_OutputPort(
602  FwIndexType portNum,
603  Fw::InputLogTextPort* port
604  );
605 
606 #endif
607 
610  FwIndexType portNum,
611  Fw::InputPrmGetPort* port
612  );
613 
616  FwIndexType portNum,
617  Fw::InputPrmSetPort* port
618  );
619 
622  FwIndexType portNum,
623  Fw::InputTimePort* port
624  );
625 
628  FwIndexType portNum,
629  Fw::InputTlmPort* port
630  );
631 
632 #endif
633 
634 #if !FW_DIRECT_PORT_CALLS
635 
636  public:
637 
638  // ----------------------------------------------------------------------
639  // Connect typed input ports to typed output ports
640  // ----------------------------------------------------------------------
641 
644  FwIndexType portNum,
645  Fw::InputComPort* port
646  );
647 
650  FwIndexType portNum,
651  Fw::InputPrmGetPort* port
652  );
653 
656  FwIndexType portNum,
657  Fw::InputTlmGetPort* port
658  );
659 
662  FwIndexType portNum,
663  Svc::InputPingPort* port
664  );
665 
668  FwIndexType portNum,
670  );
671 
674  FwIndexType portNum,
676  );
677 
678 #endif
679 
680 #if !FW_DIRECT_PORT_CALLS && FW_PORT_SERIALIZATION
681 
682  public:
683 
684  // ----------------------------------------------------------------------
685  // Connect serial input ports to special output ports
686  // ----------------------------------------------------------------------
687 
690  FwIndexType portNum,
691  Fw::InputSerializePort* port
692  );
693 
696  FwIndexType portNum,
697  Fw::InputSerializePort* port
698  );
699 
702  FwIndexType portNum,
703  Fw::InputSerializePort* port
704  );
705 
706 #if FW_ENABLE_TEXT_LOGGING == 1
707 
709  void set_logTextOut_OutputPort(
710  FwIndexType portNum,
711  Fw::InputSerializePort* port
712  );
713 
714 #endif
715 
718  FwIndexType portNum,
719  Fw::InputSerializePort* port
720  );
721 
724  FwIndexType portNum,
725  Fw::InputSerializePort* port
726  );
727 
730  FwIndexType portNum,
731  Fw::InputSerializePort* port
732  );
733 
734 #endif
735 
736 #if !FW_DIRECT_PORT_CALLS && FW_PORT_SERIALIZATION
737 
738  public:
739 
740  // ----------------------------------------------------------------------
741  // Connect serial input ports to typed output ports
742  // ----------------------------------------------------------------------
743 
746  FwIndexType portNum,
747  Fw::InputSerializePort* port
748  );
749 
752  FwIndexType portNum,
753  Fw::InputSerializePort* port
754  );
755 
758  FwIndexType portNum,
759  Fw::InputSerializePort* port
760  );
761 
764  FwIndexType portNum,
765  Fw::InputSerializePort* port
766  );
767 
768 #endif
769 
770 #if !FW_DIRECT_PORT_CALLS && FW_PORT_SERIALIZATION
771 
772  public:
773 
774  // ----------------------------------------------------------------------
775  // Connect typed and serial input ports to serial output ports
776  // ----------------------------------------------------------------------
777 
779  void set_serialOut_OutputPort(
780  FwIndexType portNum,
781  Fw::InputPortBase* port
782  );
783 
784 #endif
785 
786  public:
787 
788  // ----------------------------------------------------------------------
789  // Command registration
790  // ----------------------------------------------------------------------
791 
795  void regCommands();
796 
797  public:
798 
799  // ----------------------------------------------------------------------
800  // Parameter loading
801  // ----------------------------------------------------------------------
802 
806  void loadParameters();
807 
808  protected:
809 
810  // ----------------------------------------------------------------------
811  // Component construction and destruction
812  // ----------------------------------------------------------------------
813 
816  const char* compName = ""
817  );
818 
820  virtual ~FpySequencerComponentBase();
821 
822  protected:
823 
824  // ----------------------------------------------------------------------
825  // Getters for numbers of special input ports
826  // ----------------------------------------------------------------------
827 
832  return NUM_CMDIN_INPUT_PORTS;
833  }
834 
835  protected:
836 
837  // ----------------------------------------------------------------------
838  // Getters for numbers of typed input ports
839  // ----------------------------------------------------------------------
840 
846  }
847 
853  }
854 
859  return NUM_PINGIN_INPUT_PORTS;
860  }
861 
867  }
868 
874  }
875 
881  }
882 
883  protected:
884 
885  // ----------------------------------------------------------------------
886  // Getters for numbers of special output ports
887  // ----------------------------------------------------------------------
888 
894  }
895 
901  }
902 
908  }
909 
910 #if FW_ENABLE_TEXT_LOGGING == 1
911 
915  static constexpr FwIndexType getNum_logTextOut_OutputPorts() {
917  }
918 
919 #endif
920 
926  }
927 
933  }
934 
940  }
941 
947  }
948 
949  protected:
950 
951  // ----------------------------------------------------------------------
952  // Getters for numbers of typed output ports
953  // ----------------------------------------------------------------------
954 
960  }
961 
967  }
968 
974  }
975 
981  }
982 
988  }
989 
995  }
996 
997  protected:
998 
999  // ----------------------------------------------------------------------
1000  // Getters for numbers of serial output ports
1001  // ----------------------------------------------------------------------
1002 
1008  }
1009 
1010  protected:
1011 
1012  // ----------------------------------------------------------------------
1013  // Connection status queries for special output ports
1014  // ----------------------------------------------------------------------
1015 
1020  FwIndexType portNum
1021  ) const;
1022 
1027  FwIndexType portNum
1028  ) const;
1029 
1034  FwIndexType portNum
1035  ) const;
1036 
1037 #if FW_ENABLE_TEXT_LOGGING == 1
1038 
1042  bool isConnected_logTextOut_OutputPort(
1043  FwIndexType portNum
1044  ) const;
1045 
1046 #endif
1047 
1052  FwIndexType portNum
1053  ) const;
1054 
1059  FwIndexType portNum
1060  ) const;
1061 
1066  FwIndexType portNum
1067  ) const;
1068 
1073  FwIndexType portNum
1074  ) const;
1075 
1076  protected:
1077 
1078  // ----------------------------------------------------------------------
1079  // Connection status queries for typed output ports
1080  // ----------------------------------------------------------------------
1081 
1086  FwIndexType portNum
1087  ) const;
1088 
1093  FwIndexType portNum
1094  ) const;
1095 
1100  FwIndexType portNum
1101  ) const;
1102 
1107  FwIndexType portNum
1108  ) const;
1109 
1114  FwIndexType portNum
1115  ) const;
1116 
1121  FwIndexType portNum
1122  ) const;
1123 
1124  protected:
1125 
1126  // ----------------------------------------------------------------------
1127  // Connection status queries for serial output ports
1128  // ----------------------------------------------------------------------
1129 
1134  FwIndexType portNum
1135  ) const;
1136 
1137 #if FW_DIRECT_PORT_CALLS
1138  public:
1139 #else
1140  protected:
1141 #endif
1142 
1143  // ----------------------------------------------------------------------
1144  // Port handler base-class functions for special input ports
1145  //
1146  // Call these functions directly to bypass the corresponding ports
1147  // ----------------------------------------------------------------------
1148 
1150  void cmdIn_handlerBase(
1151  FwIndexType portNum,
1152  FwOpcodeType opCode,
1153  U32 cmdSeq,
1154  Fw::CmdArgBuffer& args
1155  );
1156 
1157  protected:
1158 
1159  // ----------------------------------------------------------------------
1160  // Handlers to implement for typed input ports
1161  // ----------------------------------------------------------------------
1162 
1164  virtual void checkTimers_handler(
1165  FwIndexType portNum,
1166  U32 context
1167  ) = 0;
1168 
1170  virtual void cmdResponseIn_handler(
1171  FwIndexType portNum,
1172  FwOpcodeType opCode,
1173  U32 cmdSeq,
1174  const Fw::CmdResponse& response
1175  ) = 0;
1176 
1178  virtual void pingIn_handler(
1179  FwIndexType portNum,
1180  U32 key
1181  ) = 0;
1182 
1184  virtual void seqCancelIn_handler(
1185  FwIndexType portNum
1186  ) = 0;
1187 
1189  virtual void seqRunIn_handler(
1190  FwIndexType portNum,
1191  const Fw::StringBase& filename,
1192  const Svc::SeqArgs& args
1193  ) = 0;
1194 
1196  virtual void tlmWrite_handler(
1197  FwIndexType portNum,
1198  U32 context
1199  ) = 0;
1200 
1201 #if FW_DIRECT_PORT_CALLS
1202  public:
1203 #else
1204  protected:
1205 #endif
1206 
1207  // ----------------------------------------------------------------------
1208  // Port handler base-class functions for typed input ports
1209  //
1210  // Call these functions directly to bypass the corresponding ports
1211  // ----------------------------------------------------------------------
1212 
1215  FwIndexType portNum,
1216  U32 context
1217  );
1218 
1221  FwIndexType portNum,
1222  FwOpcodeType opCode,
1223  U32 cmdSeq,
1224  const Fw::CmdResponse& response
1225  );
1226 
1228  void pingIn_handlerBase(
1229  FwIndexType portNum,
1230  U32 key
1231  );
1232 
1235  FwIndexType portNum
1236  );
1237 
1239  void seqRunIn_handlerBase(
1240  FwIndexType portNum,
1241  const Fw::StringBase& filename,
1242  const Svc::SeqArgs& args
1243  );
1244 
1246  void tlmWrite_handlerBase(
1247  FwIndexType portNum,
1248  U32 context
1249  );
1250 
1251  protected:
1252 
1253  // ----------------------------------------------------------------------
1254  // Pre-message hooks for typed async input ports
1255  //
1256  // Each of these functions is invoked just before processing a message
1257  // on the corresponding port. By default, they do nothing. You can
1258  // override them to provide specific pre-message behavior.
1259  // ----------------------------------------------------------------------
1260 
1262  virtual void checkTimers_preMsgHook(
1263  FwIndexType portNum,
1264  U32 context
1265  );
1266 
1268  virtual void cmdResponseIn_preMsgHook(
1269  FwIndexType portNum,
1270  FwOpcodeType opCode,
1271  U32 cmdSeq,
1272  const Fw::CmdResponse& response
1273  );
1274 
1276  virtual void pingIn_preMsgHook(
1277  FwIndexType portNum,
1278  U32 key
1279  );
1280 
1282  virtual void seqCancelIn_preMsgHook(
1283  FwIndexType portNum
1284  );
1285 
1287  virtual void seqRunIn_preMsgHook(
1288  FwIndexType portNum,
1289  const Fw::StringBase& filename,
1290  const Svc::SeqArgs& args
1291  );
1292 
1294  virtual void tlmWrite_preMsgHook(
1295  FwIndexType portNum,
1296  U32 context
1297  );
1298 
1299  protected:
1300 
1301  // ----------------------------------------------------------------------
1302  // Invocation functions for typed output ports
1303  // ----------------------------------------------------------------------
1304 
1306  void cmdOut_out(
1307  FwIndexType portNum,
1308  Fw::ComBuffer& data,
1309  U32 context
1310  ) const;
1311 
1314  FwIndexType portNum,
1315  FwPrmIdType id,
1316  Fw::ParamBuffer& val
1317  ) const;
1319 
1322  FwIndexType portNum,
1323  FwChanIdType id,
1324  Fw::Time& timeTag,
1325  Fw::TlmBuffer& val
1326  ) const;
1329 
1331  void pingOut_out(
1332  FwIndexType portNum,
1333  U32 key
1334  ) const;
1335 
1337  void seqDoneOut_out(
1338  FwIndexType portNum,
1339  FwOpcodeType opCode,
1340  U32 cmdSeq,
1341  const Fw::CmdResponse& response
1342  ) const;
1343 
1345  void seqStartOut_out(
1346  FwIndexType portNum,
1347  const Fw::StringBase& filename,
1348  const Svc::SeqArgs& args
1349  ) const;
1350 
1351  protected:
1352 
1353  // ----------------------------------------------------------------------
1354  // Invocation functions for serial output ports
1355  // ----------------------------------------------------------------------
1356 
1359  FwIndexType portNum,
1360  Fw::LinearBufferBase& buffer
1361  );
1362 
1363  protected:
1364 
1365  // ----------------------------------------------------------------------
1366  // Internal interface handlers
1367  // ----------------------------------------------------------------------
1368 
1371  const Svc::FpySequencer_AllocateDirective& directive,
1372  U64 sequenceIndex
1373  ) = 0;
1374 
1377  const Svc::FpySequencer_CallDirective& directive,
1378  U64 sequenceIndex
1379  ) = 0;
1380 
1383  const Svc::FpySequencer_ConstCmdDirective& directive,
1384  U64 sequenceIndex
1385  ) = 0;
1386 
1389  const Svc::FpySequencer_DiscardDirective& directive,
1390  U64 sequenceIndex
1391  ) = 0;
1392 
1395  const Svc::FpySequencer_ExitDirective& directive,
1396  U64 sequenceIndex
1397  ) = 0;
1398 
1401  const Svc::FpySequencer_GetFieldDirective& directive,
1402  U64 sequenceIndex
1403  ) = 0;
1404 
1407  const Svc::FpySequencer_GotoDirective& directive,
1408  U64 sequenceIndex
1409  ) = 0;
1410 
1413  const Svc::FpySequencer_IfDirective& directive,
1414  U64 sequenceIndex
1415  ) = 0;
1416 
1419  const Svc::FpySequencer_LoadAbsDirective& directive,
1420  U64 sequenceIndex
1421  ) = 0;
1422 
1425  const Svc::FpySequencer_LoadRelDirective& directive,
1426  U64 sequenceIndex
1427  ) = 0;
1428 
1431  const Svc::FpySequencer_MemCmpDirective& directive,
1432  U64 sequenceIndex
1433  ) = 0;
1434 
1437  const Svc::FpySequencer_NoOpDirective& directive,
1438  U64 sequenceIndex
1439  ) = 0;
1440 
1443  const Svc::FpySequencer_PeekDirective& directive,
1444  U64 sequenceIndex
1445  ) = 0;
1446 
1449  const Svc::FpySequencer_PopEventDirective& directive,
1450  U64 sequenceIndex
1451  ) = 0;
1452 
1456  U64 sequenceIndex
1457  ) = 0;
1458 
1461  const Svc::FpySequencer_PushPrmDirective& directive,
1462  U64 sequenceIndex
1463  ) = 0;
1464 
1467  const Svc::FpySequencer_PushRandDirective& directive,
1468  U64 sequenceIndex
1469  ) = 0;
1470 
1473  const Svc::FpySequencer_PushTimeDirective& directive,
1474  U64 sequenceIndex
1475  ) = 0;
1476 
1479  const Svc::FpySequencer_PushTlmValDirective& directive,
1480  U64 sequenceIndex
1481  ) = 0;
1482 
1486  U64 sequenceIndex
1487  ) = 0;
1488 
1491  const Svc::FpySequencer_PushValDirective& directive,
1492  U64 sequenceIndex
1493  ) = 0;
1494 
1497  const Svc::FpySequencer_ReturnDirective& directive,
1498  U64 sequenceIndex
1499  ) = 0;
1500 
1503  const Svc::FpySequencer_SetSeedDirective& directive,
1504  U64 sequenceIndex
1505  ) = 0;
1506 
1509  const Svc::FpySequencer_StackCmdDirective& directive,
1510  U64 sequenceIndex
1511  ) = 0;
1512 
1515  const Svc::FpySequencer_StackOpDirective& directive,
1516  U64 sequenceIndex
1517  ) = 0;
1518 
1521  const Svc::FpySequencer_StoreAbsDirective& directive,
1522  U64 sequenceIndex
1523  ) = 0;
1524 
1528  U64 sequenceIndex
1529  ) = 0;
1530 
1533  const Svc::FpySequencer_StoreRelDirective& directive,
1534  U64 sequenceIndex
1535  ) = 0;
1536 
1540  U64 sequenceIndex
1541  ) = 0;
1542 
1545  const Svc::FpySequencer_WaitAbsDirective& directive,
1546  U64 sequenceIndex
1547  ) = 0;
1548 
1551  const Svc::FpySequencer_WaitRelDirective& directive,
1552  U64 sequenceIndex
1553  ) = 0;
1554 
1555  protected:
1556 
1557  // ----------------------------------------------------------------------
1558  // Internal interface base-class functions
1559  // ----------------------------------------------------------------------
1560 
1563  const Svc::FpySequencer_AllocateDirective& directive,
1564  U64 sequenceIndex
1565  );
1566 
1569  const Svc::FpySequencer_CallDirective& directive,
1570  U64 sequenceIndex
1571  );
1572 
1575  const Svc::FpySequencer_ConstCmdDirective& directive,
1576  U64 sequenceIndex
1577  );
1578 
1581  const Svc::FpySequencer_DiscardDirective& directive,
1582  U64 sequenceIndex
1583  );
1584 
1587  const Svc::FpySequencer_ExitDirective& directive,
1588  U64 sequenceIndex
1589  );
1590 
1593  const Svc::FpySequencer_GetFieldDirective& directive,
1594  U64 sequenceIndex
1595  );
1596 
1599  const Svc::FpySequencer_GotoDirective& directive,
1600  U64 sequenceIndex
1601  );
1602 
1605  const Svc::FpySequencer_IfDirective& directive,
1606  U64 sequenceIndex
1607  );
1608 
1611  const Svc::FpySequencer_LoadAbsDirective& directive,
1612  U64 sequenceIndex
1613  );
1614 
1617  const Svc::FpySequencer_LoadRelDirective& directive,
1618  U64 sequenceIndex
1619  );
1620 
1623  const Svc::FpySequencer_MemCmpDirective& directive,
1624  U64 sequenceIndex
1625  );
1626 
1629  const Svc::FpySequencer_NoOpDirective& directive,
1630  U64 sequenceIndex
1631  );
1632 
1635  const Svc::FpySequencer_PeekDirective& directive,
1636  U64 sequenceIndex
1637  );
1638 
1641  const Svc::FpySequencer_PopEventDirective& directive,
1642  U64 sequenceIndex
1643  );
1644 
1648  U64 sequenceIndex
1649  );
1650 
1653  const Svc::FpySequencer_PushPrmDirective& directive,
1654  U64 sequenceIndex
1655  );
1656 
1659  const Svc::FpySequencer_PushRandDirective& directive,
1660  U64 sequenceIndex
1661  );
1662 
1665  const Svc::FpySequencer_PushTimeDirective& directive,
1666  U64 sequenceIndex
1667  );
1668 
1671  const Svc::FpySequencer_PushTlmValDirective& directive,
1672  U64 sequenceIndex
1673  );
1674 
1678  U64 sequenceIndex
1679  );
1680 
1683  const Svc::FpySequencer_PushValDirective& directive,
1684  U64 sequenceIndex
1685  );
1686 
1689  const Svc::FpySequencer_ReturnDirective& directive,
1690  U64 sequenceIndex
1691  );
1692 
1695  const Svc::FpySequencer_SetSeedDirective& directive,
1696  U64 sequenceIndex
1697  );
1698 
1701  const Svc::FpySequencer_StackCmdDirective& directive,
1702  U64 sequenceIndex
1703  );
1704 
1707  const Svc::FpySequencer_StackOpDirective& directive,
1708  U64 sequenceIndex
1709  );
1710 
1713  const Svc::FpySequencer_StoreAbsDirective& directive,
1714  U64 sequenceIndex
1715  );
1716 
1720  U64 sequenceIndex
1721  );
1722 
1725  const Svc::FpySequencer_StoreRelDirective& directive,
1726  U64 sequenceIndex
1727  );
1728 
1732  U64 sequenceIndex
1733  );
1734 
1737  const Svc::FpySequencer_WaitAbsDirective& directive,
1738  U64 sequenceIndex
1739  );
1740 
1743  const Svc::FpySequencer_WaitRelDirective& directive,
1744  U64 sequenceIndex
1745  );
1746 
1747  protected:
1748 
1749  // ----------------------------------------------------------------------
1750  // State getter functions
1751  // ----------------------------------------------------------------------
1752 
1755 
1756  protected:
1757 
1758  // ----------------------------------------------------------------------
1759  // Signal send functions
1760  // ----------------------------------------------------------------------
1761 
1765  );
1766 
1770  );
1771 
1775  );
1776 
1779 
1782  const Svc::FpySequencer_BreakpointArgs& value
1783  );
1784 
1787 
1790 
1793 
1796 
1799 
1802 
1805 
1808 
1811 
1814 
1817 
1820 
1823 
1826 
1829 
1832 
1835 
1838 
1841 
1844 
1847 
1848  protected:
1849 
1850  // ----------------------------------------------------------------------
1851  // Functions to implement for internal state machine actions
1852  // ----------------------------------------------------------------------
1853 
1858  SmId smId,
1860  ) = 0;
1861 
1866  SmId smId,
1869  ) = 0;
1870 
1875  SmId smId,
1878  ) = 0;
1879 
1884  SmId smId,
1887  ) = 0;
1888 
1893  SmId smId,
1895  ) = 0;
1896 
1901  SmId smId,
1903  ) = 0;
1904 
1909  SmId smId,
1911  ) = 0;
1912 
1917  SmId smId,
1919  ) = 0;
1920 
1925  SmId smId,
1927  ) = 0;
1928 
1933  SmId smId,
1935  ) = 0;
1936 
1941  SmId smId,
1943  ) = 0;
1944 
1949  SmId smId,
1951  ) = 0;
1952 
1957  SmId smId,
1959  ) = 0;
1960 
1965  SmId smId,
1967  ) = 0;
1968 
1973  SmId smId,
1975  ) = 0;
1976 
1981  SmId smId,
1983  ) = 0;
1984 
1989  SmId smId,
1991  ) = 0;
1992 
1997  SmId smId,
1999  ) = 0;
2000 
2005  SmId smId,
2007  ) = 0;
2008 
2013  SmId smId,
2015  ) = 0;
2016 
2021  SmId smId,
2023  ) = 0;
2024 
2029  SmId smId,
2031  ) = 0;
2032 
2037  SmId smId,
2039  ) = 0;
2040 
2045  SmId smId,
2047  ) = 0;
2048 
2053  SmId smId,
2055  const Svc::FpySequencer_BreakpointArgs& value
2056  ) = 0;
2057 
2062  SmId smId,
2064  ) = 0;
2065 
2070  SmId smId,
2072  ) = 0;
2073 
2074  protected:
2075 
2076  // ----------------------------------------------------------------------
2077  // Functions to implement for internal state machine guards
2078  // ----------------------------------------------------------------------
2079 
2084  SmId smId,
2086  ) const = 0;
2087 
2093  SmId smId,
2095  ) const = 0;
2096 
2101  SmId smId,
2103  ) const = 0;
2104 
2105  protected:
2106 
2107  // ----------------------------------------------------------------------
2108  // Command response
2109  // ----------------------------------------------------------------------
2110 
2112  void cmdResponse_out(
2113  FwOpcodeType opCode,
2114  U32 cmdSeq,
2115  Fw::CmdResponse response
2116  );
2117 
2118  protected:
2119 
2120  // ----------------------------------------------------------------------
2121  // Command handlers to implement
2122  // ----------------------------------------------------------------------
2123 
2127  virtual void RUN_cmdHandler(
2128  FwOpcodeType opCode,
2129  U32 cmdSeq,
2130  const Fw::CmdStringArg& fileName,
2131  const Svc::BlockState& block
2132  ) = 0;
2133 
2135  virtual void RUN_ARGS_cmdHandler(
2136  FwOpcodeType opCode,
2137  U32 cmdSeq,
2138  const Fw::CmdStringArg& fileName,
2139  const Svc::BlockState& block,
2140  const Svc::SeqArgs& buffer
2141  ) = 0;
2142 
2146  virtual void VALIDATE_cmdHandler(
2147  FwOpcodeType opCode,
2148  U32 cmdSeq,
2149  const Fw::CmdStringArg& fileName
2150  ) = 0;
2151 
2155  virtual void VALIDATE_ARGS_cmdHandler(
2156  FwOpcodeType opCode,
2157  U32 cmdSeq,
2158  const Fw::CmdStringArg& fileName,
2159  const Svc::SeqArgs& buffer
2160  ) = 0;
2161 
2165  virtual void RUN_VALIDATED_cmdHandler(
2166  FwOpcodeType opCode,
2167  U32 cmdSeq,
2168  const Svc::BlockState& block
2169  ) = 0;
2170 
2175  virtual void CANCEL_cmdHandler(
2176  FwOpcodeType opCode,
2177  U32 cmdSeq
2178  ) = 0;
2179 
2186  virtual void SET_BREAKPOINT_cmdHandler(
2187  FwOpcodeType opCode,
2188  U32 cmdSeq,
2189  U32 stmtIdx,
2190  bool breakOnce
2191  ) = 0;
2192 
2198  virtual void BREAK_cmdHandler(
2199  FwOpcodeType opCode,
2200  U32 cmdSeq
2201  ) = 0;
2202 
2207  virtual void CONTINUE_cmdHandler(
2208  FwOpcodeType opCode,
2209  U32 cmdSeq
2210  ) = 0;
2211 
2216  virtual void CLEAR_BREAKPOINT_cmdHandler(
2217  FwOpcodeType opCode,
2218  U32 cmdSeq
2219  ) = 0;
2220 
2225  virtual void STEP_cmdHandler(
2226  FwOpcodeType opCode,
2227  U32 cmdSeq
2228  ) = 0;
2229 
2233  virtual void DUMP_STACK_TO_FILE_cmdHandler(
2234  FwOpcodeType opCode,
2235  U32 cmdSeq,
2236  const Fw::CmdStringArg& fileName
2237  ) = 0;
2238 
2239  protected:
2240 
2241  // ----------------------------------------------------------------------
2242  // Command handler base-class functions
2243  //
2244  // Call these functions directly to bypass the command input port
2245  // ----------------------------------------------------------------------
2246 
2250  void RUN_cmdHandlerBase(
2251  FwOpcodeType opCode,
2252  U32 cmdSeq,
2253  Fw::CmdArgBuffer& args
2254  );
2255 
2258  FwOpcodeType opCode,
2259  U32 cmdSeq,
2260  Fw::CmdArgBuffer& args
2261  );
2262 
2267  FwOpcodeType opCode,
2268  U32 cmdSeq,
2269  Fw::CmdArgBuffer& args
2270  );
2271 
2276  FwOpcodeType opCode,
2277  U32 cmdSeq,
2278  Fw::CmdArgBuffer& args
2279  );
2280 
2285  FwOpcodeType opCode,
2286  U32 cmdSeq,
2287  Fw::CmdArgBuffer& args
2288  );
2289 
2294  void CANCEL_cmdHandlerBase(
2295  FwOpcodeType opCode,
2296  U32 cmdSeq,
2297  Fw::CmdArgBuffer& args
2298  );
2299 
2307  FwOpcodeType opCode,
2308  U32 cmdSeq,
2309  Fw::CmdArgBuffer& args
2310  );
2311 
2317  void BREAK_cmdHandlerBase(
2318  FwOpcodeType opCode,
2319  U32 cmdSeq,
2320  Fw::CmdArgBuffer& args
2321  );
2322 
2328  FwOpcodeType opCode,
2329  U32 cmdSeq,
2330  Fw::CmdArgBuffer& args
2331  );
2332 
2338  FwOpcodeType opCode,
2339  U32 cmdSeq,
2340  Fw::CmdArgBuffer& args
2341  );
2342 
2347  void STEP_cmdHandlerBase(
2348  FwOpcodeType opCode,
2349  U32 cmdSeq,
2350  Fw::CmdArgBuffer& args
2351  );
2352 
2357  FwOpcodeType opCode,
2358  U32 cmdSeq,
2359  Fw::CmdArgBuffer& args
2360  );
2361 
2362  protected:
2363 
2364  // ----------------------------------------------------------------------
2365  // Pre-message hooks for async commands
2366  //
2367  // Each of these functions is invoked just before processing the
2368  // corresponding command. By default they do nothing. You can
2369  // override them to provide specific pre-command behavior.
2370  // ----------------------------------------------------------------------
2371 
2373  virtual void RUN_preMsgHook(
2374  FwOpcodeType opCode,
2375  U32 cmdSeq
2376  );
2377 
2379  virtual void RUN_ARGS_preMsgHook(
2380  FwOpcodeType opCode,
2381  U32 cmdSeq
2382  );
2383 
2385  virtual void VALIDATE_preMsgHook(
2386  FwOpcodeType opCode,
2387  U32 cmdSeq
2388  );
2389 
2391  virtual void VALIDATE_ARGS_preMsgHook(
2392  FwOpcodeType opCode,
2393  U32 cmdSeq
2394  );
2395 
2397  virtual void RUN_VALIDATED_preMsgHook(
2398  FwOpcodeType opCode,
2399  U32 cmdSeq
2400  );
2401 
2403  virtual void CANCEL_preMsgHook(
2404  FwOpcodeType opCode,
2405  U32 cmdSeq
2406  );
2407 
2409  virtual void SET_BREAKPOINT_preMsgHook(
2410  FwOpcodeType opCode,
2411  U32 cmdSeq
2412  );
2413 
2415  virtual void BREAK_preMsgHook(
2416  FwOpcodeType opCode,
2417  U32 cmdSeq
2418  );
2419 
2421  virtual void CONTINUE_preMsgHook(
2422  FwOpcodeType opCode,
2423  U32 cmdSeq
2424  );
2425 
2427  virtual void CLEAR_BREAKPOINT_preMsgHook(
2428  FwOpcodeType opCode,
2429  U32 cmdSeq
2430  );
2431 
2433  virtual void STEP_preMsgHook(
2434  FwOpcodeType opCode,
2435  U32 cmdSeq
2436  );
2437 
2439  virtual void DUMP_STACK_TO_FILE_preMsgHook(
2440  FwOpcodeType opCode,
2441  U32 cmdSeq
2442  );
2443 
2444  protected:
2445 
2446  // ----------------------------------------------------------------------
2447  // Event logging functions
2448  // ----------------------------------------------------------------------
2449 
2451  void log_WARNING_HI_InvalidCommand(I32 state) const;
2452 
2454  void log_WARNING_HI_InvalidSeqRunCall(I32 state) const;
2455 
2457  void log_WARNING_HI_InvalidSeqCancelCall(I32 state) const;
2458 
2461  const Fw::StringBase& filePath,
2462  I32 errorCode
2463  ) const;
2464 
2467  FwSizeType writeSize,
2468  const Fw::StringBase& filePath,
2469  I32 errorCode
2470  ) const;
2471 
2474  const Svc::FpySequencer_FileReadStage& readStage,
2475  const Fw::StringBase& filePath,
2476  I32 errorCode
2477  ) const;
2478 
2481  const Svc::FpySequencer_FileReadStage& readStage,
2482  const Fw::StringBase& filePath
2483  ) const;
2484 
2487  const Svc::FpySequencer_FileReadStage& readStage,
2488  const Fw::StringBase& filePath,
2489  I32 errorCode,
2490  U64 buffLeft,
2491  U64 buffLength
2492  ) const;
2493 
2496  U8 expected,
2497  U8 actual
2498  ) const;
2499 
2502  U32 expected,
2503  U32 actual
2504  ) const;
2505 
2507  void log_WARNING_HI_ExtraBytesInSequence(FwSizeType remaining) const;
2508 
2511  U64 bufferSize,
2512  const Fw::StringBase& filePath
2513  ) const;
2514 
2517  const Fw::StringBase& filePath,
2518  I32 errorCode
2519  ) const;
2520 
2523  const Fw::StringBase& baseDir,
2524  const Fw::StringBase& fileName
2525  ) const;
2526 
2529  FwOpcodeType opCode,
2530  U32 stmtIdx,
2531  const Fw::StringBase& filePath,
2532  const Fw::CmdResponse& response
2533  ) const;
2534 
2536  void log_ACTIVITY_HI_SequenceDone(const Fw::StringBase& filePath) const;
2537 
2539  void log_ACTIVITY_HI_SequenceCancelled(const Fw::StringBase& filePath) const;
2540 
2543  const Fw::StringBase& filePath,
2544  I32 errorCode
2545  ) const;
2546 
2549  U8 opcode,
2550  U32 stmtIdx,
2551  const Fw::StringBase& filePath
2552  ) const;
2553 
2556  I32 state,
2557  FwOpcodeType opcode,
2558  const Fw::CmdResponse& response
2559  ) const;
2560 
2563  FwOpcodeType opcode,
2564  const Fw::CmdResponse& response,
2565  U16 oldSequenceIdx,
2566  U16 currentSequenceIdx
2567  ) const;
2568 
2571  FwOpcodeType opcode,
2572  const Fw::CmdResponse& response
2573  ) const;
2574 
2577  FwOpcodeType opcode,
2578  const Fw::CmdResponse& response,
2579  U8 expectedDirectiveOpcode
2580  ) const;
2581 
2584  FwOpcodeType opcode,
2585  const Fw::CmdResponse& response,
2586  FwOpcodeType expectedOpcode
2587  ) const;
2588 
2591  FwOpcodeType opcode,
2592  const Fw::CmdResponse& response,
2593  U16 actualCmdIdx,
2594  U16 expectedCmdIdx
2595  ) const;
2596 
2599  U8 opcode,
2600  U32 stmtIdx,
2601  I32 errorCode,
2602  U64 buffLeft,
2603  U64 buffLength
2604  ) const;
2605 
2608  I32 internalTimeBase,
2609  I32 otherTimeBase
2610  ) const;
2611 
2614  I32 internalTimeContext,
2615  I32 otherTimeContext
2616  ) const;
2617 
2620  FwOpcodeType opCode,
2621  U32 stmtIdx,
2622  const Fw::StringBase& filePath
2623  ) const;
2624 
2627  U8 opCode,
2628  U32 stmtIdx,
2629  const Fw::StringBase& filePath
2630  ) const;
2631 
2634  U8 count,
2635  U8 max
2636  ) const;
2637 
2640  U16 count,
2641  U16 max
2642  ) const;
2643 
2646  Svc::Fpy::StackSizeType expected,
2647  FwSizeType actual,
2648  const Fw::StringBase& filePath
2649  ) const;
2650 
2653  FwSizeType actual,
2654  FwSizeType capacity
2655  ) const;
2656 
2659 
2661  void log_ACTIVITY_HI_SequencePaused(U32 stmtIdx) const;
2662 
2665  U32 breakpointIdx,
2666  bool breakOnce
2667  ) const;
2668 
2670  void log_ACTIVITY_HI_BreakpointCleared() const;
2671 
2673  void log_FATAL_LogFatal(
2674  const Fw::StringBase& filePath,
2675  const Fw::StringBase& message
2676  ) const;
2677 
2680  const Fw::StringBase& filePath,
2681  const Fw::StringBase& message
2682  ) const;
2683 
2686  const Fw::StringBase& filePath,
2687  const Fw::StringBase& message
2688  ) const;
2689 
2692  const Fw::StringBase& filePath,
2693  const Fw::StringBase& message
2694  ) const;
2695 
2698  const Fw::StringBase& filePath,
2699  const Fw::StringBase& message
2700  ) const;
2701 
2704  const Fw::StringBase& filePath,
2705  const Fw::StringBase& message
2706  ) const;
2707 
2710  const Fw::StringBase& filePath,
2711  const Fw::StringBase& message
2712  ) const;
2713 
2716  const Svc::Fpy::DirectiveId& directive,
2717  I32 state
2718  ) const;
2719 
2722  const Svc::Fpy::DirectiveId& directive,
2723  U64 oldSequenceIdx,
2724  U64 currentSequenceIdx
2725  ) const;
2726 
2727  protected:
2728 
2729  // ----------------------------------------------------------------------
2730  // Telemetry serialized write
2731  // ----------------------------------------------------------------------
2732 
2737  void tlmWrite(
2738  FwChanIdType id,
2739  Fw::TlmBuffer& _tlmBuff,
2740  Fw::Time _tlmTime = Fw::Time()
2741  ) const;
2742 
2743  protected:
2744 
2745  // ----------------------------------------------------------------------
2746  // Telemetry write functions
2747  // ----------------------------------------------------------------------
2748 
2752  void tlmWrite_State(
2753  FwEnumStoreType arg,
2754  Fw::Time _tlmTime = Fw::Time()
2755  );
2756 
2761  U64 arg,
2762  Fw::Time _tlmTime = Fw::Time()
2763  );
2764 
2769  U64 arg,
2770  Fw::Time _tlmTime = Fw::Time()
2771  );
2772 
2777  U64 arg,
2778  Fw::Time _tlmTime = Fw::Time()
2779  );
2780 
2787  U64 arg,
2788  Fw::Time _tlmTime = Fw::Time()
2789  );
2790 
2795  U64 arg,
2796  Fw::Time _tlmTime = Fw::Time()
2797  );
2798 
2803  const Svc::Fpy::DirectiveErrorCode& arg,
2804  Fw::Time _tlmTime = Fw::Time()
2805  );
2806 
2811  U64 arg,
2812  Fw::Time _tlmTime = Fw::Time()
2813  );
2814 
2819  const Svc::Fpy::DirectiveId& arg,
2820  Fw::Time _tlmTime = Fw::Time()
2821  );
2822 
2826  void tlmWrite_SeqPath(
2827  const Fw::StringBase& arg,
2828  Fw::Time _tlmTime = Fw::Time()
2829  );
2830 
2835  bool arg,
2836  Fw::Time _tlmTime = Fw::Time()
2837  );
2838 
2843  bool arg,
2844  Fw::Time _tlmTime = Fw::Time()
2845  );
2846 
2851  U8 arg,
2852  Fw::Time _tlmTime = Fw::Time()
2853  );
2854 
2859  U32 arg,
2860  Fw::Time _tlmTime = Fw::Time()
2861  );
2862 
2867  FwOpcodeType arg,
2868  Fw::Time _tlmTime = Fw::Time()
2869  );
2870 
2876  Fw::Time _tlmTime = Fw::Time()
2877  );
2878 
2883  bool arg,
2884  Fw::Time _tlmTime = Fw::Time()
2885  );
2886 
2892  U32 arg,
2893  Fw::Time _tlmTime = Fw::Time()
2894  );
2895 
2900  bool arg,
2901  Fw::Time _tlmTime = Fw::Time()
2902  );
2903 
2910  bool arg,
2911  Fw::Time _tlmTime = Fw::Time()
2912  );
2913 
2918  F32 arg,
2919  Fw::Time _tlmTime = Fw::Time()
2920  );
2921 
2926  const Fw::StringBase& arg,
2927  Fw::Time _tlmTime = Fw::Time()
2928  );
2929 
2930  protected:
2931 
2932  // ----------------------------------------------------------------------
2933  // Parameter hook functions
2934  // ----------------------------------------------------------------------
2935 
2939  virtual void parameterUpdated(
2940  FwPrmIdType id
2941  );
2942 
2948  virtual void parametersLoaded();
2949 
2955  virtual void parameterLoaded(
2956  FwPrmIdType id,
2957  Fw::ParamValid valid
2958  );
2959 
2960  protected:
2961 
2962  // ----------------------------------------------------------------------
2963  // Parameter get functions
2964  // ----------------------------------------------------------------------
2965 
2975  Fw::ParamValid& valid
2976  );
2977 
2987  Fw::ParamValid& valid
2988  );
2989 
2990  protected:
2991 
2992  // ----------------------------------------------------------------------
2993  // Time
2994  // ----------------------------------------------------------------------
2995 
2999  Fw::Time getTime() const;
3000 
3001  private:
3002 
3003  // ----------------------------------------------------------------------
3004  // Message dispatch functions
3005  // ----------------------------------------------------------------------
3006 
3008  virtual MsgDispatchStatus doDispatch();
3009 
3010  private:
3011 
3012  // ----------------------------------------------------------------------
3013  // Calls for messages received on special input ports
3014  // ----------------------------------------------------------------------
3015 
3017  static void m_p_cmdIn_in(
3018  Fw::PassiveComponentBase* callComp,
3019  FwIndexType portNum,
3020  FwOpcodeType opCode,
3021  U32 cmdSeq,
3022  Fw::CmdArgBuffer& args
3023  );
3024 
3025  private:
3026 
3027  // ----------------------------------------------------------------------
3028  // Calls for messages received on typed input ports
3029  // ----------------------------------------------------------------------
3030 
3032  static void m_p_checkTimers_in(
3033  Fw::PassiveComponentBase* callComp,
3034  FwIndexType portNum,
3035  U32 context
3036  );
3037 
3039  static void m_p_cmdResponseIn_in(
3040  Fw::PassiveComponentBase* callComp,
3041  FwIndexType portNum,
3042  FwOpcodeType opCode,
3043  U32 cmdSeq,
3044  const Fw::CmdResponse& response
3045  );
3046 
3048  static void m_p_pingIn_in(
3049  Fw::PassiveComponentBase* callComp,
3050  FwIndexType portNum,
3051  U32 key
3052  );
3053 
3055  static void m_p_seqCancelIn_in(
3056  Fw::PassiveComponentBase* callComp,
3057  FwIndexType portNum
3058  );
3059 
3061  static void m_p_seqRunIn_in(
3062  Fw::PassiveComponentBase* callComp,
3063  FwIndexType portNum,
3064  const Fw::StringBase& filename,
3065  const Svc::SeqArgs& args
3066  );
3067 
3069  static void m_p_tlmWrite_in(
3070  Fw::PassiveComponentBase* callComp,
3071  FwIndexType portNum,
3072  U32 context
3073  );
3074 
3075  private:
3076 
3077  // ----------------------------------------------------------------------
3078  // Invocation functions for special output ports
3079  // ----------------------------------------------------------------------
3080 
3082  void cmdRegOut_out(
3083  FwIndexType portNum,
3084  FwOpcodeType opCode
3085  ) const;
3086 
3088  void cmdResponseOut_out(
3089  FwIndexType portNum,
3090  FwOpcodeType opCode,
3091  U32 cmdSeq,
3092  const Fw::CmdResponse& response
3093  ) const;
3094 
3096  void logOut_out(
3097  FwIndexType portNum,
3098  FwEventIdType id,
3099  Fw::Time& timeTag,
3100  const Fw::LogSeverity& severity,
3101  Fw::LogBuffer& args
3102  ) const;
3103 
3104 #if FW_ENABLE_TEXT_LOGGING
3105 
3107  void logTextOut_out(
3108  FwIndexType portNum,
3109  FwEventIdType id,
3110  Fw::Time& timeTag,
3111  const Fw::LogSeverity& severity,
3112  Fw::TextLogString& text
3113  ) const;
3114 
3115 #endif
3116 
3118  Fw::ParamValid prmGet_out(
3119  FwIndexType portNum,
3120  FwPrmIdType id,
3121  Fw::ParamBuffer& val
3122  ) const;
3124 
3126  void prmSet_out(
3127  FwIndexType portNum,
3128  FwPrmIdType id,
3129  Fw::ParamBuffer& val
3130  ) const;
3131 
3133  void timeCaller_out(
3134  FwIndexType portNum,
3135  Fw::Time& time
3136  ) const;
3137 
3139  void tlmOut_out(
3140  FwIndexType portNum,
3141  FwChanIdType id,
3142  Fw::Time& timeTag,
3143  Fw::TlmBuffer& val
3144  ) const;
3145 
3146  private:
3147 
3148  // ----------------------------------------------------------------------
3149  // Send signal helper functions
3150  // ----------------------------------------------------------------------
3151 
3153  void sendSignalStart(
3154  SmId smId,
3155  FwEnumStoreType signal,
3156  Fw::SerialBufferBase& buffer
3157  );
3158 
3160  void sequencer_sendSignalFinish(
3161  Fw::LinearBufferBase& buffer
3162  );
3163 
3164  private:
3165 
3166  // ----------------------------------------------------------------------
3167  // Helper functions for state machine dispatch
3168  // ----------------------------------------------------------------------
3169 
3171  void smDispatch(
3172  Fw::SerialBufferBase& buffer
3173  );
3174 
3176  static void deserializeSmIdAndSignal(
3177  Fw::SerialBufferBase& buffer,
3178  FwEnumStoreType& smId,
3179  FwEnumStoreType& signal
3180  );
3181 
3183  void Svc_FpySequencer_SequencerStateMachine_smDispatch(
3184  Fw::SerialBufferBase& buffer,
3185  Svc_FpySequencer_SequencerStateMachine& sm,
3187  );
3188 
3189  private:
3190 
3191  // ----------------------------------------------------------------------
3192  // Parameter set functions
3193  // ----------------------------------------------------------------------
3194 
3198  Fw::CmdResponse paramSet_STATEMENT_TIMEOUT_SECS(
3199  Fw::SerialBufferBase& val
3200  );
3201 
3205  Fw::CmdResponse paramSet_SEQ_BASE_DIR(
3206  Fw::SerialBufferBase& val
3207  );
3208 
3209  private:
3210 
3211  // ----------------------------------------------------------------------
3212  // Parameter save functions
3213  // ----------------------------------------------------------------------
3214 
3218  Fw::CmdResponse paramSave_STATEMENT_TIMEOUT_SECS();
3219 
3223  Fw::CmdResponse paramSave_SEQ_BASE_DIR();
3224 
3225 #if !FW_DIRECT_PORT_CALLS
3226 
3227  private:
3228 
3229  // ----------------------------------------------------------------------
3230  // Special input ports
3231  // ----------------------------------------------------------------------
3232 
3234  Fw::InputCmdPort m_cmdIn_InputPort[NUM_CMDIN_INPUT_PORTS];
3235 
3236 #endif
3237 
3238 #if !FW_DIRECT_PORT_CALLS
3239 
3240  private:
3241 
3242  // ----------------------------------------------------------------------
3243  // Typed input ports
3244  // ----------------------------------------------------------------------
3245 
3247  Svc::InputSchedPort m_checkTimers_InputPort[NUM_CHECKTIMERS_INPUT_PORTS];
3248 
3250  Fw::InputCmdResponsePort m_cmdResponseIn_InputPort[NUM_CMDRESPONSEIN_INPUT_PORTS];
3251 
3253  Svc::InputPingPort m_pingIn_InputPort[NUM_PINGIN_INPUT_PORTS];
3254 
3257 
3259  Svc::InputCmdSeqInPort m_seqRunIn_InputPort[NUM_SEQRUNIN_INPUT_PORTS];
3260 
3262  Svc::InputSchedPort m_tlmWrite_InputPort[NUM_TLMWRITE_INPUT_PORTS];
3263 
3264 #endif
3265 
3266 #if !FW_DIRECT_PORT_CALLS
3267 
3268  private:
3269 
3270  // ----------------------------------------------------------------------
3271  // Special output ports
3272  // ----------------------------------------------------------------------
3273 
3275  Fw::OutputCmdRegPort m_cmdRegOut_OutputPort[NUM_CMDREGOUT_OUTPUT_PORTS];
3276 
3278  Fw::OutputCmdResponsePort m_cmdResponseOut_OutputPort[NUM_CMDRESPONSEOUT_OUTPUT_PORTS];
3279 
3281  Fw::OutputLogPort m_logOut_OutputPort[NUM_LOGOUT_OUTPUT_PORTS];
3282 
3283 #if FW_ENABLE_TEXT_LOGGING == 1
3284 
3286  Fw::OutputLogTextPort m_logTextOut_OutputPort[NUM_LOGTEXTOUT_OUTPUT_PORTS];
3287 
3288 #endif
3289 
3291  Fw::OutputPrmGetPort m_prmGet_OutputPort[NUM_PRMGET_OUTPUT_PORTS];
3292 
3294  Fw::OutputPrmSetPort m_prmSet_OutputPort[NUM_PRMSET_OUTPUT_PORTS];
3295 
3297  Fw::OutputTimePort m_timeCaller_OutputPort[NUM_TIMECALLER_OUTPUT_PORTS];
3298 
3300  Fw::OutputTlmPort m_tlmOut_OutputPort[NUM_TLMOUT_OUTPUT_PORTS];
3301 
3302 #endif
3303 
3304 #if !FW_DIRECT_PORT_CALLS
3305 
3306  private:
3307 
3308  // ----------------------------------------------------------------------
3309  // Typed output ports
3310  // ----------------------------------------------------------------------
3311 
3313  Fw::OutputComPort m_cmdOut_OutputPort[NUM_CMDOUT_OUTPUT_PORTS];
3314 
3316  Fw::OutputPrmGetPort m_getParam_OutputPort[NUM_GETPARAM_OUTPUT_PORTS];
3317 
3319  Fw::OutputTlmGetPort m_getTlmChan_OutputPort[NUM_GETTLMCHAN_OUTPUT_PORTS];
3320 
3322  Svc::OutputPingPort m_pingOut_OutputPort[NUM_PINGOUT_OUTPUT_PORTS];
3323 
3325  Fw::OutputCmdResponsePort m_seqDoneOut_OutputPort[NUM_SEQDONEOUT_OUTPUT_PORTS];
3326 
3328  Svc::OutputCmdSeqInPort m_seqStartOut_OutputPort[NUM_SEQSTARTOUT_OUTPUT_PORTS];
3329 
3330 #endif
3331 
3332 #if !FW_DIRECT_PORT_CALLS
3333 
3334  private:
3335 
3336  // ----------------------------------------------------------------------
3337  // Serial output ports
3338  // ----------------------------------------------------------------------
3339 
3341  Fw::OutputSerializePort m_serialOut_OutputPort[NUM_SERIALOUT_OUTPUT_PORTS];
3342 
3343 #endif
3344 
3345  private:
3346 
3347  // ----------------------------------------------------------------------
3348  // First update flags for telemetry channels
3349  // ----------------------------------------------------------------------
3350 
3352  bool m_first_update_State = true;
3353 
3355  bool m_first_update_SequencesSucceeded = true;
3356 
3358  bool m_first_update_SequencesFailed = true;
3359 
3361  bool m_first_update_SequencesCancelled = true;
3362 
3364  bool m_first_update_StatementsDispatched = true;
3365 
3367  bool m_first_update_StatementsFailed = true;
3368 
3370  bool m_first_update_LastDirectiveError = true;
3371 
3373  bool m_first_update_DirectiveErrorIndex = true;
3374 
3376  bool m_first_update_DirectiveErrorId = true;
3377 
3379  bool m_first_update_SeqPath = true;
3380 
3382  bool m_first_update_Debug_ReachedEndOfFile = true;
3383 
3385  bool m_first_update_Debug_NextStatementReadSuccess = true;
3386 
3388  bool m_first_update_Debug_NextStatementOpcode = true;
3389 
3391  bool m_first_update_Debug_NextStatementIndex = true;
3392 
3394  bool m_first_update_Debug_NextCmdOpcode = true;
3395 
3397  bool m_first_update_Debug_StackSize = true;
3398 
3400  bool m_first_update_BreakpointInUse = true;
3401 
3403  bool m_first_update_BreakpointIndex = true;
3404 
3406  bool m_first_update_BreakOnlyOnceOnBreakpoint = true;
3407 
3409  bool m_first_update_BreakBeforeNextLine = true;
3410 
3412  bool m_first_update_PRM_STATEMENT_TIMEOUT_SECS = true;
3413 
3415  bool m_first_update_PRM_SEQ_BASE_DIR = true;
3416 
3417  private:
3418 
3419  // ----------------------------------------------------------------------
3420  // Last value storage for telemetry channels
3421  // ----------------------------------------------------------------------
3422 
3424  FwEnumStoreType m_last_State = {};
3425 
3427  U64 m_last_SequencesSucceeded = {};
3428 
3430  U64 m_last_SequencesFailed = {};
3431 
3433  U64 m_last_SequencesCancelled = {};
3434 
3436  U64 m_last_StatementsDispatched = {};
3437 
3439  U64 m_last_StatementsFailed = {};
3440 
3442  Svc::Fpy::DirectiveErrorCode m_last_LastDirectiveError = {};
3443 
3445  U64 m_last_DirectiveErrorIndex = {};
3446 
3448  Svc::Fpy::DirectiveId m_last_DirectiveErrorId = {};
3449 
3451  Fw::TlmString m_last_SeqPath = {};
3452 
3454  bool m_last_Debug_ReachedEndOfFile = {};
3455 
3457  bool m_last_Debug_NextStatementReadSuccess = {};
3458 
3460  U8 m_last_Debug_NextStatementOpcode = {};
3461 
3463  U32 m_last_Debug_NextStatementIndex = {};
3464 
3466  FwOpcodeType m_last_Debug_NextCmdOpcode = {};
3467 
3469  Svc::Fpy::StackSizeType m_last_Debug_StackSize = {};
3470 
3472  bool m_last_BreakpointInUse = {};
3473 
3475  U32 m_last_BreakpointIndex = {};
3476 
3478  bool m_last_BreakOnlyOnceOnBreakpoint = {};
3479 
3481  bool m_last_BreakBeforeNextLine = {};
3482 
3484  F32 m_last_PRM_STATEMENT_TIMEOUT_SECS = {};
3485 
3487  Fw::TlmString m_last_PRM_SEQ_BASE_DIR = {};
3488 
3489  private:
3490 
3491  // ----------------------------------------------------------------------
3492  // Parameter validity flags
3493  // ----------------------------------------------------------------------
3494 
3496  Fw::ParamValid m_param_STATEMENT_TIMEOUT_SECS_valid = Fw::ParamValid::UNINIT;
3497 
3499  Fw::ParamValid m_param_SEQ_BASE_DIR_valid = Fw::ParamValid::UNINIT;
3500 
3501  private:
3502 
3503  // ----------------------------------------------------------------------
3504  // Parameter variables
3505  // ----------------------------------------------------------------------
3506 
3513  F32 m_STATEMENT_TIMEOUT_SECS;
3514 
3521  Fw::ParamString m_SEQ_BASE_DIR;
3522 
3523  private:
3524 
3525  // ----------------------------------------------------------------------
3526  // State machine instances
3527  // ----------------------------------------------------------------------
3528 
3530  Svc_FpySequencer_SequencerStateMachine m_stateMachine_sequencer;
3531 
3532  private:
3533 
3534  // ----------------------------------------------------------------------
3535  // Mutexes
3536  // ----------------------------------------------------------------------
3537 
3539  Os::Mutex m_paramLock;
3540 
3541  };
3542 
3543 }
3544 
3545 #endif
void cmdOut_out(FwIndexType portNum, Fw::ComBuffer &data, U32 context) const
Invoke output port cmdOut.
void pingOut_out(FwIndexType portNum, U32 key) const
Invoke output port pingOut.
virtual void seqCancelIn_handler(FwIndexType portNum)=0
Handler for input port seqCancelIn.
void sequencer_sendSignal_result_dispatchStatement_noMoreStatements()
Send signal result_dispatchStatement_noMoreStatements to state machine sequencer. ...
sets the index of the next directive to execute
void sequencer_sendSignal_result_checkShouldWake_keepSleeping()
Send signal result_checkShouldWake_keepSleeping to state machine sequencer.
virtual void DUMP_STACK_TO_FILE_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command DUMP_STACK_TO_FILE.
virtual void Svc_FpySequencer_SequencerStateMachine_action_checkStatementTimeout(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void directive_storeAbsConstOffset_internalInterfaceHandler(const Svc::FpySequencer_StoreAbsConstOffsetDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_storeAbsConstOffset.
virtual void Svc_FpySequencer_SequencerStateMachine_action_incrementSequenceCounter(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void directive_pushRand_internalInterfaceHandler(const Svc::FpySequencer_PushRandDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_pushRand.
virtual void Svc_FpySequencer_SequencerStateMachine_action_report_seqFailed(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
bool isConnected_getTlmChan_OutputPort(FwIndexType portNum) const
virtual void directive_call_internalInterfaceHandler(const Svc::FpySequencer_CallDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_call.
void set_seqStartOut_OutputPort(FwIndexType portNum, Svc::InputCmdSeqInPort *port)
Connect port to seqStartOut[portNum].
void log_WARNING_HI_DirectiveTimedOut(U8 opCode, U32 stmtIdx, const Fw::StringBase &filePath) const
Log event DirectiveTimedOut.
virtual void Svc_FpySequencer_SequencerStateMachine_action_setSequenceFilePath(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal, const Svc::FpySequencer_SequenceExecutionArgs &value)=0
virtual void directive_pushPrm_internalInterfaceHandler(const Svc::FpySequencer_PushPrmDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_pushPrm.
virtual void Svc_FpySequencer_SequencerStateMachine_action_signalEntered(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
void log_ACTIVITY_HI_SequencePaused(U32 stmtIdx) const
Log event SequencePaused.
Must be called after VALIDATE. Runs the sequence that was validated.
Fw::InputCmdResponsePort * get_cmdResponseIn_InputPort(FwIndexType portNum)
virtual void seqCancelIn_preMsgHook(FwIndexType portNum)
Pre-message hook for async input port seqCancelIn.
FwIdType FwOpcodeType
The type of a command opcode.
void set_cmdOut_OutputPort(FwIndexType portNum, Fw::InputComPort *port)
Connect port to cmdOut[portNum].
virtual void seqRunIn_handler(FwIndexType portNum, const Fw::StringBase &filename, const Svc::SeqArgs &args)=0
Handler for input port seqRunIn.
branches based off of the top byte of the stack
void tlmWrite_Debug_NextStatementOpcode(U8 arg, Fw::Time _tlmTime=Fw::Time())
virtual void parametersLoaded()
Called whenever parameters are loaded.
bool isConnected_cmdRegOut_OutputPort(FwIndexType portNum) const
void log_WARNING_HI_InsufficientBufferSpace(U64 bufferSize, const Fw::StringBase &filePath) const
Log event InsufficientBufferSpace.
static constexpr FwIndexType getNum_seqStartOut_OutputPorts()
void directive_allocate_internalInterfaceInvoke(const Svc::FpySequencer_AllocateDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_allocate.
bool isConnected_getParam_OutputPort(FwIndexType portNum) const
PlatformSizeType FwSizeType
stores a value to an absolute address in the stack (for global variables), offset from stack ...
virtual void directive_setSeed_internalInterfaceHandler(const Svc::FpySequencer_SetSeedDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_setSeed.
void directive_getField_internalInterfaceInvoke(const Svc::FpySequencer_GetFieldDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_getField.
I32 FwEnumStoreType
void CONTINUE_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void sequencer_sendSignal_cmd_STEP()
Send signal cmd_STEP to state machine sequencer.
void sequencer_sendSignal_result_dispatchStatement_success()
Send signal result_dispatchStatement_success to state machine sequencer.
virtual void cmdResponseIn_handler(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)=0
Handler for input port cmdResponseIn.
void log_WARNING_HI_WrongCRC(U32 expected, U32 actual) const
Log event WrongCRC.
virtual void directive_if_internalInterfaceHandler(const Svc::FpySequencer_IfDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_if.
void log_WARNING_HI_ArgSizeExceedsCapacity(FwSizeType actual, FwSizeType capacity) const
Log event ArgSizeExceedsCapacity.
virtual void CLEAR_BREAKPOINT_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
virtual void parameterUpdated(FwPrmIdType id)
Called whenever a parameter is updated.
void sequencer_sendSignal_cmd_SET_BREAKPOINT(const Svc::FpySequencer_BreakpointArgs &value)
Send signal cmd_SET_BREAKPOINT to state machine sequencer.
virtual void Svc_FpySequencer_SequencerStateMachine_action_sendCmdResponse_OK(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
void directive_pushRand_internalInterfaceInvoke(const Svc::FpySequencer_PushRandDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_pushRand.
virtual void Svc_FpySequencer_SequencerStateMachine_action_pushArgsToStack(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void tlmWrite_preMsgHook(FwIndexType portNum, U32 context)
Pre-message hook for async input port tlmWrite.
void log_WARNING_HI_CommandFailed(FwOpcodeType opCode, U32 stmtIdx, const Fw::StringBase &filePath, const Fw::CmdResponse &response) const
Log event CommandFailed.
virtual void CLEAR_BREAKPOINT_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CLEAR_BREAKPOINT.
static constexpr FwIndexType getNum_cmdIn_InputPorts()
void tlmWrite_Debug_ReachedEndOfFile(bool arg, Fw::Time _tlmTime=Fw::Time())
void RUN_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void directive_call_internalInterfaceInvoke(const Svc::FpySequencer_CallDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_call.
void set_seqDoneOut_OutputPort(FwIndexType portNum, Fw::InputCmdResponsePort *port)
Connect port to seqDoneOut[portNum].
FwIdType FwPrmIdType
The type of a parameter identifier.
void set_tlmOut_OutputPort(FwIndexType portNum, Fw::InputTlmPort *port)
Connect port to tlmOut[portNum].
void log_WARNING_LO_DirectiveWhileNotAwaiting(const Svc::Fpy::DirectiveId &directive, I32 state) const
Log event DirectiveWhileNotAwaiting.
virtual void Svc_FpySequencer_SequencerStateMachine_action_setGoalState_IDLE(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
stores a value to a local variable at a compile-time-known offset relative to the current stack frame...
Fw::SerializeStatus serialOut_out(FwIndexType portNum, Fw::LinearBufferBase &buffer)
Invoke output port serialOut.
void directive_pushPrm_internalInterfaceInvoke(const Svc::FpySequencer_PushPrmDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_pushPrm.
Link-time delegating Mutex implementation.
virtual void directive_pushTlmValAndTime_internalInterfaceHandler(const Svc::FpySequencer_PushTlmValAndTimeDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_pushTlmValAndTime.
virtual void CANCEL_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
void directive_peek_internalInterfaceInvoke(const Svc::FpySequencer_PeekDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_peek.
Fw::ParamValid getParam_out(FwIndexType portNum, FwPrmIdType id, Fw::ParamBuffer &val) const
Invoke output port getParam.
void STEP_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
virtual bool Svc_FpySequencer_SequencerStateMachine_guard_breakOnce(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal) const =0
static constexpr FwIndexType getNum_pingIn_InputPorts()
virtual void Svc_FpySequencer_SequencerStateMachine_action_report_seqStarted(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
bool isConnected_prmGet_OutputPort(FwIndexType portNum) const
pop an opcode and arg buf off the stack, send to cmd dispatcher and await response ...
void log_WARNING_HI_SequenceFilePathTooLong(const Fw::StringBase &baseDir, const Fw::StringBase &fileName) const
Log event SequenceFilePathTooLong.
void sequencer_sendSignal_result_checkShouldWake_wakeup()
Send signal result_checkShouldWake_wakeup to state machine sequencer.
virtual void directive_loadAbs_internalInterfaceHandler(const Svc::FpySequencer_LoadAbsDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_loadAbs.
friend class FpySequencerTesterBase
Friend class tester to support autocoded test harness.
void directive_pushTlmValAndTime_internalInterfaceInvoke(const Svc::FpySequencer_PushTlmValAndTimeDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_pushTlmValAndTime.
bool isConnected_prmSet_OutputPort(FwIndexType portNum) const
virtual void RUN_ARGS_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command RUN_ARGS.
void sequencer_sendSignal_result_success()
Send signal result_success to state machine sequencer.
void log_WARNING_LO_DirectiveFromOldSequence(const Svc::Fpy::DirectiveId &directive, U64 oldSequenceIdx, U64 currentSequenceIdx) const
Log event DirectiveFromOldSequence.
virtual void RUN_VALIDATED_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Svc::BlockState &block)=0
void cmdResponseIn_handlerBase(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)
Handler base-class function for input port cmdResponseIn.
void sequencer_sendSignal_stmtResponse_success()
Send signal stmtResponse_success to state machine sequencer.
virtual void VALIDATE_ARGS_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command VALIDATE_ARGS.
virtual ~FpySequencerComponentBase()
Destroy FpySequencerComponentBase object.
virtual void Svc_FpySequencer_SequencerStateMachine_action_setSequenceArguments(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal, const Svc::FpySequencer_SequenceExecutionArgs &value)=0
void directive_pushVal_internalInterfaceInvoke(const Svc::FpySequencer_PushValDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_pushVal.
void tlmWrite_Debug_StackSize(Svc::Fpy::StackSizeType arg, Fw::Time _tlmTime=Fw::Time())
virtual void SET_BREAKPOINT_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, U32 stmtIdx, bool breakOnce)=0
void sequencer_sendSignal_cmd_VALIDATE(const Svc::FpySequencer_SequenceExecutionArgs &value)
Send signal cmd_VALIDATE to state machine sequencer.
virtual void directive_discard_internalInterfaceHandler(const Svc::FpySequencer_DiscardDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_discard.
static constexpr FwIndexType getNum_tlmWrite_InputPorts()
Enum representing a command response.
virtual void Svc_FpySequencer_SequencerStateMachine_action_validate(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void RUN_VALIDATED_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command RUN_VALIDATED.
void set_logOut_OutputPort(FwIndexType portNum, Fw::InputLogPort *port)
Connect port to logOut[portNum].
virtual void DUMP_STACK_TO_FILE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &fileName)=0
void tlmWrite_State(FwEnumStoreType arg, Fw::Time _tlmTime=Fw::Time())
void log_WARNING_HI_FileApiError(const Fw::StringBase &filePath, I32 errorCode) const
Log event FileApiError.
void tlmWrite_SequencesSucceeded(U64 arg, Fw::Time _tlmTime=Fw::Time())
void log_WARNING_HI_ExtraBytesInSequence(FwSizeType remaining) const
Log event ExtraBytesInSequence.
void directive_pushTime_internalInterfaceInvoke(const Svc::FpySequencer_PushTimeDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_pushTime.
virtual void Svc_FpySequencer_SequencerStateMachine_action_clearSequenceFile(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
pops bytes off the top of the stack and does nothing with them
static constexpr FwIndexType getNum_timeCaller_OutputPorts()
virtual void seqRunIn_preMsgHook(FwIndexType portNum, const Fw::StringBase &filename, const Svc::SeqArgs &args)
Pre-message hook for async input port seqRunIn.
void log_DIAGNOSTIC_LogDiagnostic(const Fw::StringBase &filePath, const Fw::StringBase &message) const
Log event LogDiagnostic.
void log_COMMAND_LogCommand(const Fw::StringBase &filePath, const Fw::StringBase &message) const
Log event LogCommand.
virtual void pingIn_preMsgHook(FwIndexType portNum, U32 key)
Pre-message hook for async input port pingIn.
virtual void STEP_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
void cmdIn_handlerBase(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
Handler base-class function for input port cmdIn.
Loads and validates a sequence with arguments.
void log_WARNING_HI_TooManySequenceDirectives(U16 count, U16 max) const
Log event TooManySequenceDirectives.
void sequencer_sendSignal_stmtResponse_unexpected()
Send signal stmtResponse_unexpected to state machine sequencer.
void sequencer_sendSignal_cmd_BREAK()
Send signal cmd_BREAK to state machine sequencer.
void sequencer_sendSignal_result_dispatchStatement_failure()
Send signal result_dispatchStatement_failure to state machine sequencer.
void log_WARNING_HI_DirectiveDeserializeError(U8 opcode, U32 stmtIdx, I32 errorCode, U64 buffLeft, U64 buffLength) const
Log event DirectiveDeserializeError.
virtual void pingIn_handler(FwIndexType portNum, U32 key)=0
Handler for input port pingIn.
virtual void parameterLoaded(FwPrmIdType id, Fw::ParamValid valid)
Called for each parameter when parameters are loaded.
Svc::InputSchedPort * get_checkTimers_InputPort(FwIndexType portNum)
virtual void STEP_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command STEP.
void RUN_VALIDATED_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void tlmWrite_PRM_STATEMENT_TIMEOUT_SECS(F32 arg, Fw::Time _tlmTime=Fw::Time())
void init()
Object initializer.
Definition: ObjBase.cpp:24
void set_pingOut_OutputPort(FwIndexType portNum, Svc::InputPingPort *port)
Connect port to pingOut[portNum].
static constexpr FwIndexType getNum_tlmOut_OutputPorts()
void log_ACTIVITY_LO_LogActivityLo(const Fw::StringBase &filePath, const Fw::StringBase &message) const
Log event LogActivityLo.
static constexpr FwIndexType getNum_pingOut_OutputPorts()
SerializeStatus
forward declaration for string
Svc_FpySequencer_SequencerStateMachine::State sequencer_getState() const
Get the state of state machine instance sequencer.
void set_getTlmChan_OutputPort(FwIndexType portNum, Fw::InputTlmGetPort *port)
Connect port to getTlmChan[portNum].
void log_WARNING_HI_SequenceExitedWithError(const Fw::StringBase &filePath, I32 errorCode) const
Log event SequenceExitedWithError.
float F32
32-bit floating point
Definition: BasicTypes.h:84
virtual void directive_noOp_internalInterfaceHandler(const Svc::FpySequencer_NoOpDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_noOp.
virtual bool Svc_FpySequencer_SequencerStateMachine_guard_shouldBreak(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal) const =0
void log_WARNING_HI_WrongCmdResponseIndex(FwOpcodeType opcode, const Fw::CmdResponse &response, U16 actualCmdIdx, U16 expectedCmdIdx) const
Log event WrongCmdResponseIndex.
virtual void checkTimers_handler(FwIndexType portNum, U32 context)=0
Handler for input port checkTimers.
static constexpr FwIndexType getNum_getParam_OutputPorts()
static constexpr FwIndexType getNum_cmdRegOut_OutputPorts()
virtual void RUN_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &fileName, const Svc::BlockState &block)=0
virtual void directive_popSerializable_internalInterfaceHandler(const Svc::FpySequencer_PopSerializableDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_popSerializable.
void tlmWrite_StatementsFailed(U64 arg, Fw::Time _tlmTime=Fw::Time())
FwIdType FwEventIdType
The type of an event identifier.
loads a value from a local variable at a compile-time-known offset relative to the current stack fram...
virtual void directive_goto_internalInterfaceHandler(const Svc::FpySequencer_GotoDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_goto.
void seqCancelIn_handlerBase(FwIndexType portNum)
Handler base-class function for input port seqCancelIn.
void log_ACTIVITY_HI_LogActivityHi(const Fw::StringBase &filePath, const Fw::StringBase &message) const
Log event LogActivityHi.
void regCommands()
Register commands with the Command Dispatcher.
F32 paramGet_STATEMENT_TIMEOUT_SECS(Fw::ParamValid &valid)
Svc::InputCmdSeqCancelPort * get_seqCancelIn_InputPort(FwIndexType portNum)
void directive_waitAbs_internalInterfaceInvoke(const Svc::FpySequencer_WaitAbsDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_waitAbs.
void log_WARNING_HI_EndOfFileError(const Svc::FpySequencer_FileReadStage &readStage, const Fw::StringBase &filePath) const
Log event EndOfFileError.
pop two byte arrays off the top of the stack, call memcmp, push 1 if they were equal, 0 otherwise
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
pops a severity and message from the stack and emits an F Prime event
void tlmWrite_DirectiveErrorId(const Svc::Fpy::DirectiveId &arg, Fw::Time _tlmTime=Fw::Time())
static constexpr FwIndexType getNum_cmdResponseIn_InputPorts()
void directive_pushTlmVal_internalInterfaceInvoke(const Svc::FpySequencer_PushTlmValDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_pushTlmVal.
Svc::InputPingPort * get_pingIn_InputPort(FwIndexType portNum)
void directive_waitRel_internalInterfaceInvoke(const Svc::FpySequencer_WaitRelDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_waitRel.
void tlmWrite_Debug_NextCmdOpcode(FwOpcodeType arg, Fw::Time _tlmTime=Fw::Time())
void tlmWrite_handlerBase(FwIndexType portNum, U32 context)
Handler base-class function for input port tlmWrite.
void RUN_ARGS_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
Base-class handler function for command RUN_ARGS.
Fw::InputCmdPort * get_cmdIn_InputPort(FwIndexType portNum)
bool isConnected_cmdResponseOut_OutputPort(FwIndexType portNum) const
virtual void directive_getField_internalInterfaceHandler(const Svc::FpySequencer_GetFieldDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_getField.
void tlmWrite_PRM_SEQ_BASE_DIR(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
virtual void Svc_FpySequencer_SequencerStateMachine_action_clearSequenceArguments(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
void pingIn_handlerBase(FwIndexType portNum, U32 key)
Handler base-class function for input port pingIn.
stores a value to an absolute address in the stack (for global variables), const offset ...
virtual void directive_constCmd_internalInterfaceHandler(const Svc::FpySequencer_ConstCmdDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_constCmd.
void set_timeCaller_OutputPort(FwIndexType portNum, Fw::InputTimePort *port)
Connect port to timeCaller[portNum].
friend class FpySequencerTester
Test implementation for the enclosing component.
virtual void Svc_FpySequencer_SequencerStateMachine_action_dispatchStatement(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void directive_storeAbs_internalInterfaceHandler(const Svc::FpySequencer_StoreAbsDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_storeAbs.
void sequencer_sendSignal_cmd_RUN_VALIDATED(const Svc::FpySequencer_SequenceExecutionArgs &value)
Send signal cmd_RUN_VALIDATED to state machine sequencer.
virtual void Svc_FpySequencer_SequencerStateMachine_action_clearBreakpoint(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void BREAK_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
Svc_FpySequencer_SequencerStateMachine(FpySequencerComponentBase &component)
Constructor.
FwIdType FwChanIdType
The type of a telemetry channel identifier.
void log_WARNING_HI_FileReadError(const Svc::FpySequencer_FileReadStage &readStage, const Fw::StringBase &filePath, I32 errorCode) const
Log event FileReadError.
void set_cmdResponseOut_OutputPort(FwIndexType portNum, Fw::InputCmdResponsePort *port)
Connect port to cmdResponseOut[portNum].
Sequencer blocking state.
FpySequencerComponentBase(const char *compName="")
Construct FpySequencerComponentBase object.
virtual void CONTINUE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
void sequencer_sendSignal_checkTimersIn()
Send signal checkTimersIn to state machine sequencer.
void tlmWrite_StatementsDispatched(U64 arg, Fw::Time _tlmTime=Fw::Time())
void tlmWrite_LastDirectiveError(const Svc::Fpy::DirectiveErrorCode &arg, Fw::Time _tlmTime=Fw::Time())
void VALIDATE_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
virtual void directive_loadRel_internalInterfaceHandler(const Svc::FpySequencer_LoadRelDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_loadRel.
void VALIDATE_ARGS_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
static constexpr FwIndexType getNum_prmSet_OutputPorts()
void directive_constCmd_internalInterfaceInvoke(const Svc::FpySequencer_ConstCmdDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_constCmd.
void log_WARNING_HI_LogWarningHi(const Fw::StringBase &filePath, const Fw::StringBase &message) const
Log event LogWarningHi.
virtual void directive_allocate_internalInterfaceHandler(const Svc::FpySequencer_AllocateDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_allocate.
Implementation of state machine Svc_FpySequencer_SequencerStateMachine.
peeks at N bytes from the stack, starting from an offset relative to the top of the stack ...
void sequencer_sendSignal_stmtResponse_failure()
Send signal stmtResponse_failure to state machine sequencer.
void directive_popEvent_internalInterfaceInvoke(const Svc::FpySequencer_PopEventDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_popEvent.
virtual void directive_pushVal_internalInterfaceHandler(const Svc::FpySequencer_PushValDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_pushVal.
void CANCEL_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
virtual void directive_storeRelConstOffset_internalInterfaceHandler(const Svc::FpySequencer_StoreRelConstOffsetDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_storeRelConstOffset.
void set_cmdRegOut_OutputPort(FwIndexType portNum, Fw::InputCmdRegPort *port)
Connect port to cmdRegOut[portNum].
void tlmWrite_Debug_NextStatementIndex(U32 arg, Fw::Time _tlmTime=Fw::Time())
void sequencer_sendSignal_stmtResponse_beginSleep()
Send signal stmtResponse_beginSleep to state machine sequencer.
void directive_goto_internalInterfaceInvoke(const Svc::FpySequencer_GotoDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_goto.
void log_WARNING_HI_CmdResponseWhileNotAwaiting(FwOpcodeType opcode, const Fw::CmdResponse &response) const
Log event CmdResponseWhileNotAwaiting.
void log_WARNING_HI_CommandTimedOut(FwOpcodeType opCode, U32 stmtIdx, const Fw::StringBase &filePath) const
Log event CommandTimedOut.
void sequencer_sendSignal_result_checkStatementTimeout_noTimeout()
Send signal result_checkStatementTimeout_noTimeout to state machine sequencer.
Enum representing event severity.
Loads, validates and runs a sequence.
static constexpr FwIndexType getNum_seqRunIn_InputPorts()
virtual void tlmWrite_handler(FwIndexType portNum, U32 context)=0
Handler for input port tlmWrite.
Svc::InputCmdSeqInPort * get_seqRunIn_InputPort(FwIndexType portNum)
void directive_stackCmd_internalInterfaceInvoke(const Svc::FpySequencer_StackCmdDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_stackCmd.
void directive_memCmp_internalInterfaceInvoke(const Svc::FpySequencer_MemCmpDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_memCmp.
virtual void directive_stackOp_internalInterfaceHandler(const Svc::FpySequencer_StackOpDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_stackOp.
void loadParameters()
Load the parameters from a parameter source.
virtual void Svc_FpySequencer_SequencerStateMachine_action_sendCmdResponse_EXECUTION_ERROR(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
void log_WARNING_HI_InvalidSeqRunCall(I32 state) const
Log event InvalidSeqRunCall.
virtual void directive_stackCmd_internalInterfaceHandler(const Svc::FpySequencer_StackCmdDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_stackCmd.
static constexpr FwIndexType getNum_cmdOut_OutputPorts()
void directive_loadRel_internalInterfaceInvoke(const Svc::FpySequencer_LoadRelDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_loadRel.
virtual void Svc_FpySequencer_SequencerStateMachine_action_setGoalState_VALID(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void directive_pushTlmVal_internalInterfaceHandler(const Svc::FpySequencer_PushTlmValDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_pushTlmVal.
void directive_stackOp_internalInterfaceInvoke(const Svc::FpySequencer_StackOpDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_stackOp.
sleeps for a relative duration from the current time
virtual void directive_return_internalInterfaceHandler(const Svc::FpySequencer_ReturnDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_return.
void seqDoneOut_out(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response) const
Invoke output port seqDoneOut.
void directive_loadAbs_internalInterfaceInvoke(const Svc::FpySequencer_LoadAbsDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_loadAbs.
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:54
void directive_noOp_internalInterfaceInvoke(const Svc::FpySequencer_NoOpDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_noOp.
bool isConnected_serialOut_OutputPort(FwIndexType portNum) const
virtual void directive_memCmp_internalInterfaceHandler(const Svc::FpySequencer_MemCmpDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_memCmp.
void log_ACTIVITY_HI_BreakpointSet(U32 breakpointIdx, bool breakOnce) const
Log event BreakpointSet.
virtual void directive_waitAbs_internalInterfaceHandler(const Svc::FpySequencer_WaitAbsDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_waitAbs.
virtual void directive_pushTime_internalInterfaceHandler(const Svc::FpySequencer_PushTimeDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_pushTime.
void sequencer_sendSignal_result_timeOpFailed()
Send signal result_timeOpFailed to state machine sequencer.
void BREAK_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void log_WARNING_HI_FileOpenError(const Fw::StringBase &filePath, I32 errorCode) const
Log event FileOpenError.
void init(FpySequencerComponentBase::SmId smId)
Initialize the state machine.
void set_prmSet_OutputPort(FwIndexType portNum, Fw::InputPrmSetPort *port)
Connect port to prmSet[portNum].
virtual void Svc_FpySequencer_SequencerStateMachine_action_setSequenceBlockState(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal, const Svc::FpySequencer_SequenceExecutionArgs &value)=0
Writes the contents of the stack to a file. This command is only valid in the RUNNING.PAUSED state.
void sequencer_sendSignal_cmd_CANCEL()
Send signal cmd_CANCEL to state machine sequencer.
void sequencer_sendSignal_result_checkStatementTimeout_statementTimeout()
Send signal result_checkStatementTimeout_statementTimeout to state machine sequencer.
static constexpr FwIndexType getNum_cmdResponseOut_OutputPorts()
virtual void directive_waitRel_internalInterfaceHandler(const Svc::FpySequencer_WaitRelDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_waitRel.
void sequencer_sendSignal_stmtResponse_keepWaiting()
Send signal stmtResponse_keepWaiting to state machine sequencer.
bool isConnected_tlmOut_OutputPort(FwIndexType portNum) const
virtual void Svc_FpySequencer_SequencerStateMachine_action_resetRuntime(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
void log_WARNING_HI_InvalidCommand(I32 state) const
Log event InvalidCommand.
void tlmWrite_BreakBeforeNextLine(bool arg, Fw::Time _tlmTime=Fw::Time())
bool isConnected_logOut_OutputPort(FwIndexType portNum) const
void log_ACTIVITY_HI_SequenceCancelled(const Fw::StringBase &filePath) const
Log event SequenceCancelled.
virtual void RUN_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command RUN.
void log_ACTIVITY_HI_BreakpointCleared() const
Log event BreakpointCleared.
void log_WARNING_HI_ArgTotalSizeExceedsStackLimit(Svc::Fpy::StackSizeType argSize) const
Log event ArgTotalSizeExceedsStackLimit.
static constexpr FwIndexType getNum_getTlmChan_OutputPorts()
virtual void directive_popEvent_internalInterfaceHandler(const Svc::FpySequencer_PopEventDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_popEvent.
Fw::ParamString paramGet_SEQ_BASE_DIR(Fw::ParamValid &valid)
virtual void directive_peek_internalInterfaceHandler(const Svc::FpySequencer_PeekDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_peek.
bool isConnected_timeCaller_OutputPort(FwIndexType portNum) const
void tlmWrite_SequencesFailed(U64 arg, Fw::Time _tlmTime=Fw::Time())
loads a value from an absolute address in the stack (for global variables)
void tlmWrite_SeqPath(const Fw::StringBase &arg, Fw::Time _tlmTime=Fw::Time())
virtual void SET_BREAKPOINT_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command SET_BREAKPOINT.
PlatformIndexType FwIndexType
virtual void VALIDATE_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command VALIDATE.
static constexpr FwIndexType getNum_checkTimers_InputPorts()
void directive_exit_internalInterfaceInvoke(const Svc::FpySequencer_ExitDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_exit.
static constexpr FwIndexType getNum_serialOut_OutputPorts()
pops a U32 from the stack and uses it to seed the RNG used by PushRandDirective
bool isConnected_pingOut_OutputPort(FwIndexType portNum) const
pops serialized data from stack and sends to serial output port
void directive_storeRelConstOffset_internalInterfaceInvoke(const Svc::FpySequencer_StoreRelConstOffsetDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_storeRelConstOffset.
void log_WARNING_HI_MismatchedTimeContext(I32 internalTimeContext, I32 otherTimeContext) const
Log event MismatchedTimeContext.
virtual void Svc_FpySequencer_SequencerStateMachine_action_clearBreakBeforeNextLine(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
bool isConnected_cmdOut_OutputPort(FwIndexType portNum) const
Svc::InputSchedPort * get_tlmWrite_InputPort(FwIndexType portNum)
void seqRunIn_handlerBase(FwIndexType portNum, const Fw::StringBase &filename, const Svc::SeqArgs &args)
Handler base-class function for input port seqRunIn.
void log_WARNING_HI_WrongSchemaVersion(U8 expected, U8 actual) const
Log event WrongSchemaVersion.
virtual void Svc_FpySequencer_SequencerStateMachine_action_report_seqBroken(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void Svc_FpySequencer_SequencerStateMachine_action_setBreakBeforeNextLine(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
void sequencer_sendSignal_cmd_CLEAR_BREAKPOINT()
Send signal cmd_CLEAR_BREAKPOINT to state machine sequencer.
void directive_storeAbs_internalInterfaceInvoke(const Svc::FpySequencer_StoreAbsDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_storeAbs.
void log_WARNING_LO_LogWarningLo(const Fw::StringBase &filePath, const Fw::StringBase &message) const
Log event LogWarningLo.
Svc::FpySequencer_SequencerStateMachine_State State
The state type.
void log_WARNING_HI_UnknownSequencerDirective(U8 opcode, U32 stmtIdx, const Fw::StringBase &filePath) const
Log event UnknownSequencerDirective.
virtual void VALIDATE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &fileName)=0
void log_WARNING_HI_CmdResponseWhileAwaitingDirective(FwOpcodeType opcode, const Fw::CmdResponse &response, U8 expectedDirectiveOpcode) const
Log event CmdResponseWhileAwaitingDirective.
void log_WARNING_HI_InvalidSeqCancelCall(I32 state) const
Log event InvalidSeqCancelCall.
stores a value to a local variable at a runtime-determined offset relative to the current stack frame...
virtual void Svc_FpySequencer_SequencerStateMachine_action_report_seqSucceeded(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void BREAK_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command BREAK.
void tlmWrite_DirectiveErrorIndex(U64 arg, Fw::Time _tlmTime=Fw::Time())
RateGroupDivider component implementation.
virtual void Svc_FpySequencer_SequencerStateMachine_action_setGoalState_RUNNING(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
virtual void cmdResponseIn_preMsgHook(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)
Pre-message hook for async input port cmdResponseIn.
Enum representing parameter validity.
virtual void Svc_FpySequencer_SequencerStateMachine_action_setBreakpoint(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal, const Svc::FpySequencer_BreakpointArgs &value)=0
void log_FATAL_LogFatal(const Fw::StringBase &filePath, const Fw::StringBase &message) const
Log event LogFatal.
virtual void VALIDATE_ARGS_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &fileName, const Svc::SeqArgs &buffer)=0
void log_WARNING_HI_TooManySequenceArgs(U8 count, U8 max) const
Log event TooManySequenceArgs.
void sequencer_sendSignal_cmd_CONTINUE()
Send signal cmd_CONTINUE to state machine sequencer.
void DUMP_STACK_TO_FILE_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
friend class FpySequencerTester
Friend class tester implementation to support white-box testing.
void log_WARNING_HI_MismatchedTimeBase(I32 internalTimeBase, I32 otherTimeBase) const
Log event MismatchedTimeBase.
void sequencer_sendSignal_result_failure()
Send signal result_failure to state machine sequencer.
void directive_storeAbsConstOffset_internalInterfaceInvoke(const Svc::FpySequencer_StoreAbsConstOffsetDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_storeAbsConstOffset.
void log_WARNING_LO_CmdResponseWhileNotRunningSequence(I32 state, FwOpcodeType opcode, const Fw::CmdResponse &response) const
Log event CmdResponseWhileNotRunningSequence.
bool isConnected_seqStartOut_OutputPort(FwIndexType portNum) const
void directive_return_internalInterfaceInvoke(const Svc::FpySequencer_ReturnDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_return.
virtual void RUN_ARGS_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &fileName, const Svc::BlockState &block, const Svc::SeqArgs &buffer)=0
Handler for command RUN_ARGS.
virtual void CONTINUE_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CONTINUE.
void log_WARNING_HI_ArgSizeMismatch(Svc::Fpy::StackSizeType expected, FwSizeType actual, const Fw::StringBase &filePath) const
Log event ArgSizeMismatch.
virtual void checkTimers_preMsgHook(FwIndexType portNum, U32 context)
Pre-message hook for async input port checkTimers.
void seqStartOut_out(FwIndexType portNum, const Fw::StringBase &filename, const Svc::SeqArgs &args) const
Invoke output port seqStartOut.
void sequencer_sendSignal_entered()
Send signal entered to state machine sequencer.
virtual void Svc_FpySequencer_SequencerStateMachine_action_checkShouldWake(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
void log_WARNING_HI_WrongCmdResponseOpcode(FwOpcodeType opcode, const Fw::CmdResponse &response, FwOpcodeType expectedOpcode) const
Log event WrongCmdResponseOpcode.
FpySequencerComponentBase::SmId getId() const
Get the state machine id.
void directive_popSerializable_internalInterfaceInvoke(const Svc::FpySequencer_PopSerializableDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_popSerializable.
pushes the current Fw.Time struct to the stack
void log_ACTIVITY_HI_SequenceDone(const Fw::StringBase &filePath) const
Log event SequenceDone.
static constexpr FwIndexType getNum_seqDoneOut_OutputPorts()
virtual void directive_exit_internalInterfaceHandler(const Svc::FpySequencer_ExitDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_exit.
virtual bool Svc_FpySequencer_SequencerStateMachine_guard_goalStateIs_RUNNING(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal) const =0
void SET_BREAKPOINT_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
Auto-generated base for FpySequencer component.
static constexpr FwIndexType getNum_logOut_OutputPorts()
void sequencer_sendSignal_cmd_RUN(const Svc::FpySequencer_SequenceExecutionArgs &value)
Send signal cmd_RUN to state machine sequencer.
void log_WARNING_HI_FileWriteError(FwSizeType writeSize, const Fw::StringBase &filePath, I32 errorCode) const
Log event FileWriteError.
void log_WARNING_HI_FileReadDeserializeError(const Svc::FpySequencer_FileReadStage &readStage, const Fw::StringBase &filePath, I32 errorCode, U64 buffLeft, U64 buffLength) const
Log event FileReadDeserializeError.
void log_WARNING_LO_CmdResponseFromOldSequence(FwOpcodeType opcode, const Fw::CmdResponse &response, U16 oldSequenceIdx, U16 currentSequenceIdx) const
Log event CmdResponseFromOldSequence.
void directive_if_internalInterfaceInvoke(const Svc::FpySequencer_IfDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_if.
void checkTimers_handlerBase(FwIndexType portNum, U32 context)
Handler base-class function for input port checkTimers.
static constexpr FwIndexType getNum_prmGet_OutputPorts()
static constexpr FwIndexType getNum_seqCancelIn_InputPorts()
virtual void CANCEL_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CANCEL.
void tlmWrite_BreakOnlyOnceOnBreakpoint(bool arg, Fw::Time _tlmTime=Fw::Time())
virtual void directive_storeRel_internalInterfaceHandler(const Svc::FpySequencer_StoreRelDirective &directive, U64 sequenceIndex)=0
Internal interface handler for directive_storeRel.
Fw::TlmValid getTlmChan_out(FwIndexType portNum, FwChanIdType id, Fw::Time &timeTag, Fw::TlmBuffer &val) const
Invoke output port getTlmChan.
void tlmWrite_SequencesCancelled(U64 arg, Fw::Time _tlmTime=Fw::Time())
void tlmWrite_BreakpointInUse(bool arg, Fw::Time _tlmTime=Fw::Time())
virtual void Svc_FpySequencer_SequencerStateMachine_action_report_seqCancelled(SmId smId, Svc_FpySequencer_SequencerStateMachine::Signal signal)=0
bool isConnected_seqDoneOut_OutputPort(FwIndexType portNum) const
friend class FpySequencerTesterBase
Autocoded test harness for the enclosing component.
void set_prmGet_OutputPort(FwIndexType portNum, Fw::InputPrmGetPort *port)
Connect port to prmGet[portNum].
void set_getParam_OutputPort(FwIndexType portNum, Fw::InputPrmGetPort *port)
Connect port to getParam[portNum].
void CLEAR_BREAKPOINT_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void directive_setSeed_internalInterfaceInvoke(const Svc::FpySequencer_SetSeedDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_setSeed.
U32 StackSizeType
the type which everything referencing a size or offset on the stack is represented in ...
void tlmWrite(FwChanIdType id, Fw::TlmBuffer &_tlmBuff, Fw::Time _tlmTime=Fw::Time()) const
#define FW_PORT_SERIALIZATION
calls for multi-note systems)
Definition: FpConfig.h:83
void directive_discard_internalInterfaceInvoke(const Svc::FpySequencer_DiscardDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_discard.
void tlmWrite_BreakpointIndex(U32 arg, Fw::Time _tlmTime=Fw::Time())
void directive_storeRel_internalInterfaceInvoke(const Svc::FpySequencer_StoreRelDirective &directive, U64 sequenceIndex)
Internal interface base-class function for directive_storeRel.
void tlmWrite_Debug_NextStatementReadSuccess(bool arg, Fw::Time _tlmTime=Fw::Time())