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 {
243  };
244 
246  enum {
269  };
270 
272  enum {
274  PARAMID_SEQ_BASE_DIR = 0x1,
278  };
282 
284  enum class SmId : FwEnumStoreType {
285  sequencer,
286  };
287 
288  protected:
289 
290  // ----------------------------------------------------------------------
291  // Types for internal state machines
292  // ----------------------------------------------------------------------
293 
297  {
298 
299  // ----------------------------------------------------------------------
300  // Friend classes
301  // ----------------------------------------------------------------------
302 
306  friend class FpySequencerTester;
307 
308  public:
309 
312  FpySequencerComponentBase& component
313  );
314 
315  public:
316 
318  void init(
320  );
321 
322  public:
323 
326 
327  private:
328 
330  void action_signalEntered(
331  Signal signal
332  );
333 
335  void action_setSequenceFilePath(
336  Signal signal,
338  );
339 
341  void action_setSequenceBlockState(
342  Signal signal,
344  );
345 
347  void action_setSequenceArguments(
348  Signal signal,
350  );
351 
353  void action_validate(
354  Signal signal
355  );
356 
358  void action_report_seqSucceeded(
359  Signal signal
360  );
361 
363  void action_report_seqCancelled(
364  Signal signal
365  );
366 
368  void action_report_seqFailed(
369  Signal signal
370  );
371 
373  void action_report_seqStarted(
374  Signal signal
375  );
376 
378  void action_setGoalState_RUNNING(
379  Signal signal
380  );
381 
383  void action_setGoalState_VALID(
384  Signal signal
385  );
386 
388  void action_setGoalState_IDLE(
389  Signal signal
390  );
391 
393  void action_sendCmdResponse_OK(
394  Signal signal
395  );
396 
398  void action_sendCmdResponse_EXECUTION_ERROR(
399  Signal signal
400  );
401 
403  void action_clearSequenceFile(
404  Signal signal
405  );
406 
408  void action_clearBreakpoint(
409  Signal signal
410  );
411 
413  void action_clearSequenceArguments(
414  Signal signal
415  );
416 
418  void action_checkShouldWake(
419  Signal signal
420  );
421 
423  void action_dispatchStatement(
424  Signal signal
425  );
426 
428  void action_resetRuntime(
429  Signal signal
430  );
431 
433  void action_checkStatementTimeout(
434  Signal signal
435  );
436 
438  void action_incrementSequenceCounter(
439  Signal signal
440  );
441 
443  void action_pushArgsToStack(
444  Signal signal
445  );
446 
448  void action_report_seqBroken(
449  Signal signal
450  );
451 
453  void action_setBreakpoint(
454  Signal signal,
456  );
457 
459  void action_setBreakBeforeNextLine(
460  Signal signal
461  );
462 
464  void action_clearBreakBeforeNextLine(
465  Signal signal
466  );
467 
468  private:
469 
471  bool guard_goalStateIs_RUNNING(
472  Signal signal
473  ) const;
474 
476  bool guard_shouldBreak(
477  Signal signal
478  ) const;
479 
481  bool guard_breakOnce(
482  Signal signal
483  ) const;
484 
485  private:
486 
488  FpySequencerComponentBase& m_component;
489 
490  };
491 
492  public:
493 
494  // ----------------------------------------------------------------------
495  // Component initialization
496  // ----------------------------------------------------------------------
497 
499  void init(
500  FwSizeType queueDepth,
501  FwEnumStoreType instance = 0
502  );
503 
504 #if !FW_DIRECT_PORT_CALLS
505 
506  public:
507 
508  // ----------------------------------------------------------------------
509  // Getters for special input ports
510  // ----------------------------------------------------------------------
511 
516  FwIndexType portNum
517  );
518 
519 #endif
520 
521 #if !FW_DIRECT_PORT_CALLS
522 
523  public:
524 
525  // ----------------------------------------------------------------------
526  // Getters for typed input ports
527  // ----------------------------------------------------------------------
528 
533  FwIndexType portNum
534  );
535 
540  FwIndexType portNum
541  );
542 
547  FwIndexType portNum
548  );
549 
554  FwIndexType portNum
555  );
556 
561  FwIndexType portNum
562  );
563 
568  FwIndexType portNum
569  );
570 
571 #endif
572 
573 #if !FW_DIRECT_PORT_CALLS
574 
575  public:
576 
577  // ----------------------------------------------------------------------
578  // Connect input ports to special output ports
579  // ----------------------------------------------------------------------
580 
583  FwIndexType portNum,
584  Fw::InputCmdRegPort* port
585  );
586 
589  FwIndexType portNum,
591  );
592 
595  FwIndexType portNum,
596  Fw::InputLogPort* port
597  );
598 
599 #if FW_ENABLE_TEXT_LOGGING == 1
600 
602  void set_logTextOut_OutputPort(
603  FwIndexType portNum,
604  Fw::InputLogTextPort* port
605  );
606 
607 #endif
608 
611  FwIndexType portNum,
612  Fw::InputPrmGetPort* port
613  );
614 
617  FwIndexType portNum,
618  Fw::InputPrmSetPort* port
619  );
620 
623  FwIndexType portNum,
624  Fw::InputTimePort* port
625  );
626 
629  FwIndexType portNum,
630  Fw::InputTlmPort* port
631  );
632 
633 #endif
634 
635 #if !FW_DIRECT_PORT_CALLS
636 
637  public:
638 
639  // ----------------------------------------------------------------------
640  // Connect typed input ports to typed output ports
641  // ----------------------------------------------------------------------
642 
645  FwIndexType portNum,
646  Fw::InputComPort* port
647  );
648 
651  FwIndexType portNum,
652  Fw::InputPrmGetPort* port
653  );
654 
657  FwIndexType portNum,
658  Fw::InputTlmGetPort* port
659  );
660 
663  FwIndexType portNum,
664  Svc::InputPingPort* port
665  );
666 
669  FwIndexType portNum,
671  );
672 
675  FwIndexType portNum,
677  );
678 
679 #endif
680 
681 #if !FW_DIRECT_PORT_CALLS && FW_PORT_SERIALIZATION
682 
683  public:
684 
685  // ----------------------------------------------------------------------
686  // Connect serial input ports to special output ports
687  // ----------------------------------------------------------------------
688 
691  FwIndexType portNum,
692  Fw::InputSerializePort* port
693  );
694 
697  FwIndexType portNum,
698  Fw::InputSerializePort* port
699  );
700 
703  FwIndexType portNum,
704  Fw::InputSerializePort* port
705  );
706 
707 #if FW_ENABLE_TEXT_LOGGING == 1
708 
710  void set_logTextOut_OutputPort(
711  FwIndexType portNum,
712  Fw::InputSerializePort* port
713  );
714 
715 #endif
716 
719  FwIndexType portNum,
720  Fw::InputSerializePort* port
721  );
722 
725  FwIndexType portNum,
726  Fw::InputSerializePort* port
727  );
728 
731  FwIndexType portNum,
732  Fw::InputSerializePort* port
733  );
734 
735 #endif
736 
737 #if !FW_DIRECT_PORT_CALLS && FW_PORT_SERIALIZATION
738 
739  public:
740 
741  // ----------------------------------------------------------------------
742  // Connect serial input ports to typed output ports
743  // ----------------------------------------------------------------------
744 
747  FwIndexType portNum,
748  Fw::InputSerializePort* port
749  );
750 
753  FwIndexType portNum,
754  Fw::InputSerializePort* port
755  );
756 
759  FwIndexType portNum,
760  Fw::InputSerializePort* port
761  );
762 
765  FwIndexType portNum,
766  Fw::InputSerializePort* port
767  );
768 
769 #endif
770 
771 #if !FW_DIRECT_PORT_CALLS && FW_PORT_SERIALIZATION
772 
773  public:
774 
775  // ----------------------------------------------------------------------
776  // Connect typed and serial input ports to serial output ports
777  // ----------------------------------------------------------------------
778 
780  void set_serialOut_OutputPort(
781  FwIndexType portNum,
782  Fw::InputPortBase* port
783  );
784 
785 #endif
786 
787  public:
788 
789  // ----------------------------------------------------------------------
790  // Command registration
791  // ----------------------------------------------------------------------
792 
796  void regCommands();
797 
798  public:
799 
800  // ----------------------------------------------------------------------
801  // Parameter loading
802  // ----------------------------------------------------------------------
803 
807  void loadParameters();
808 
809  protected:
810 
811  // ----------------------------------------------------------------------
812  // Component construction and destruction
813  // ----------------------------------------------------------------------
814 
817  const char* compName = ""
818  );
819 
821  virtual ~FpySequencerComponentBase();
822 
823  protected:
824 
825  // ----------------------------------------------------------------------
826  // Getters for numbers of special input ports
827  // ----------------------------------------------------------------------
828 
833  return NUM_CMDIN_INPUT_PORTS;
834  }
835 
836  protected:
837 
838  // ----------------------------------------------------------------------
839  // Getters for numbers of typed input ports
840  // ----------------------------------------------------------------------
841 
847  }
848 
854  }
855 
860  return NUM_PINGIN_INPUT_PORTS;
861  }
862 
868  }
869 
875  }
876 
882  }
883 
884  protected:
885 
886  // ----------------------------------------------------------------------
887  // Getters for numbers of special output ports
888  // ----------------------------------------------------------------------
889 
895  }
896 
902  }
903 
909  }
910 
911 #if FW_ENABLE_TEXT_LOGGING == 1
912 
916  static constexpr FwIndexType getNum_logTextOut_OutputPorts() {
918  }
919 
920 #endif
921 
927  }
928 
934  }
935 
941  }
942 
948  }
949 
950  protected:
951 
952  // ----------------------------------------------------------------------
953  // Getters for numbers of typed output ports
954  // ----------------------------------------------------------------------
955 
961  }
962 
968  }
969 
975  }
976 
982  }
983 
989  }
990 
996  }
997 
998  protected:
999 
1000  // ----------------------------------------------------------------------
1001  // Getters for numbers of serial output ports
1002  // ----------------------------------------------------------------------
1003 
1009  }
1010 
1011  protected:
1012 
1013  // ----------------------------------------------------------------------
1014  // Connection status queries for special output ports
1015  // ----------------------------------------------------------------------
1016 
1021  FwIndexType portNum
1022  ) const;
1023 
1028  FwIndexType portNum
1029  ) const;
1030 
1035  FwIndexType portNum
1036  ) const;
1037 
1038 #if FW_ENABLE_TEXT_LOGGING == 1
1039 
1043  bool isConnected_logTextOut_OutputPort(
1044  FwIndexType portNum
1045  ) const;
1046 
1047 #endif
1048 
1053  FwIndexType portNum
1054  ) const;
1055 
1060  FwIndexType portNum
1061  ) const;
1062 
1067  FwIndexType portNum
1068  ) const;
1069 
1074  FwIndexType portNum
1075  ) const;
1076 
1077  protected:
1078 
1079  // ----------------------------------------------------------------------
1080  // Connection status queries for typed output ports
1081  // ----------------------------------------------------------------------
1082 
1087  FwIndexType portNum
1088  ) const;
1089 
1094  FwIndexType portNum
1095  ) const;
1096 
1101  FwIndexType portNum
1102  ) const;
1103 
1108  FwIndexType portNum
1109  ) const;
1110 
1115  FwIndexType portNum
1116  ) const;
1117 
1122  FwIndexType portNum
1123  ) const;
1124 
1125  protected:
1126 
1127  // ----------------------------------------------------------------------
1128  // Connection status queries for serial output ports
1129  // ----------------------------------------------------------------------
1130 
1135  FwIndexType portNum
1136  ) const;
1137 
1138 #if FW_DIRECT_PORT_CALLS
1139  public:
1140 #else
1141  protected:
1142 #endif
1143 
1144  // ----------------------------------------------------------------------
1145  // Port handler base-class functions for special input ports
1146  //
1147  // Call these functions directly to bypass the corresponding ports
1148  // ----------------------------------------------------------------------
1149 
1151  void cmdIn_handlerBase(
1152  FwIndexType portNum,
1153  FwOpcodeType opCode,
1154  U32 cmdSeq,
1155  Fw::CmdArgBuffer& args
1156  );
1157 
1158  protected:
1159 
1160  // ----------------------------------------------------------------------
1161  // Handlers to implement for typed input ports
1162  // ----------------------------------------------------------------------
1163 
1165  virtual void checkTimers_handler(
1166  FwIndexType portNum,
1167  U32 context
1168  ) = 0;
1169 
1171  virtual void cmdResponseIn_handler(
1172  FwIndexType portNum,
1173  FwOpcodeType opCode,
1174  U32 cmdSeq,
1175  const Fw::CmdResponse& response
1176  ) = 0;
1177 
1179  virtual void pingIn_handler(
1180  FwIndexType portNum,
1181  U32 key
1182  ) = 0;
1183 
1185  virtual void seqCancelIn_handler(
1186  FwIndexType portNum
1187  ) = 0;
1188 
1190  virtual void seqRunIn_handler(
1191  FwIndexType portNum,
1192  const Fw::StringBase& filename,
1193  const Svc::SeqArgs& args
1194  ) = 0;
1195 
1197  virtual void tlmWrite_handler(
1198  FwIndexType portNum,
1199  U32 context
1200  ) = 0;
1201 
1202 #if FW_DIRECT_PORT_CALLS
1203  public:
1204 #else
1205  protected:
1206 #endif
1207 
1208  // ----------------------------------------------------------------------
1209  // Port handler base-class functions for typed input ports
1210  //
1211  // Call these functions directly to bypass the corresponding ports
1212  // ----------------------------------------------------------------------
1213 
1216  FwIndexType portNum,
1217  U32 context
1218  );
1219 
1222  FwIndexType portNum,
1223  FwOpcodeType opCode,
1224  U32 cmdSeq,
1225  const Fw::CmdResponse& response
1226  );
1227 
1229  void pingIn_handlerBase(
1230  FwIndexType portNum,
1231  U32 key
1232  );
1233 
1236  FwIndexType portNum
1237  );
1238 
1240  void seqRunIn_handlerBase(
1241  FwIndexType portNum,
1242  const Fw::StringBase& filename,
1243  const Svc::SeqArgs& args
1244  );
1245 
1247  void tlmWrite_handlerBase(
1248  FwIndexType portNum,
1249  U32 context
1250  );
1251 
1252  protected:
1253 
1254  // ----------------------------------------------------------------------
1255  // Pre-message hooks for typed async input ports
1256  //
1257  // Each of these functions is invoked just before processing a message
1258  // on the corresponding port. By default, they do nothing. You can
1259  // override them to provide specific pre-message behavior.
1260  // ----------------------------------------------------------------------
1261 
1263  virtual void cmdResponseIn_preMsgHook(
1264  FwIndexType portNum,
1265  FwOpcodeType opCode,
1266  U32 cmdSeq,
1267  const Fw::CmdResponse& response
1268  );
1269 
1271  virtual void pingIn_preMsgHook(
1272  FwIndexType portNum,
1273  U32 key
1274  );
1275 
1277  virtual void seqCancelIn_preMsgHook(
1278  FwIndexType portNum
1279  );
1280 
1282  virtual void seqRunIn_preMsgHook(
1283  FwIndexType portNum,
1284  const Fw::StringBase& filename,
1285  const Svc::SeqArgs& args
1286  );
1287 
1288  protected:
1289 
1290  // ----------------------------------------------------------------------
1291  // Invocation functions for typed output ports
1292  // ----------------------------------------------------------------------
1293 
1295  void cmdOut_out(
1296  FwIndexType portNum,
1297  Fw::ComBuffer& data,
1298  U32 context
1299  ) const;
1300 
1303  FwIndexType portNum,
1304  FwPrmIdType id,
1305  Fw::ParamBuffer& val
1306  ) const;
1308 
1311  FwIndexType portNum,
1312  FwChanIdType id,
1313  Fw::Time& timeTag,
1314  Fw::TlmBuffer& val
1315  ) const;
1318 
1320  void pingOut_out(
1321  FwIndexType portNum,
1322  U32 key
1323  ) const;
1324 
1326  void seqDoneOut_out(
1327  FwIndexType portNum,
1328  FwOpcodeType opCode,
1329  U32 cmdSeq,
1330  const Fw::CmdResponse& response
1331  ) const;
1332 
1334  void seqStartOut_out(
1335  FwIndexType portNum,
1336  const Fw::StringBase& filename,
1337  const Svc::SeqArgs& args
1338  ) const;
1339 
1340  protected:
1341 
1342  // ----------------------------------------------------------------------
1343  // Invocation functions for serial output ports
1344  // ----------------------------------------------------------------------
1345 
1348  FwIndexType portNum,
1349  Fw::LinearBufferBase& buffer
1350  );
1351 
1352  protected:
1353 
1354  // ----------------------------------------------------------------------
1355  // Hooks for internal ports
1356  //
1357  // Each of these functions is invoked just before dropping a message
1358  // on the corresponding internal port. You should override them to provide
1359  // specific drop behavior.
1360  // ----------------------------------------------------------------------
1361 
1363  virtual void tlmWriteInternal_overflowHook() = 0;
1364 
1365  protected:
1366 
1367  // ----------------------------------------------------------------------
1368  // Internal interface handlers
1369  // ----------------------------------------------------------------------
1370 
1373 
1376  const Svc::FpySequencer_AllocateDirective& directive,
1377  U64 sequenceIndex
1378  ) = 0;
1379 
1382  const Svc::FpySequencer_CallDirective& directive,
1383  U64 sequenceIndex
1384  ) = 0;
1385 
1388  const Svc::FpySequencer_ConstCmdDirective& directive,
1389  U64 sequenceIndex
1390  ) = 0;
1391 
1394  const Svc::FpySequencer_DiscardDirective& directive,
1395  U64 sequenceIndex
1396  ) = 0;
1397 
1400  const Svc::FpySequencer_ExitDirective& directive,
1401  U64 sequenceIndex
1402  ) = 0;
1403 
1406  const Svc::FpySequencer_GetFieldDirective& directive,
1407  U64 sequenceIndex
1408  ) = 0;
1409 
1412  const Svc::FpySequencer_GotoDirective& directive,
1413  U64 sequenceIndex
1414  ) = 0;
1415 
1418  const Svc::FpySequencer_IfDirective& directive,
1419  U64 sequenceIndex
1420  ) = 0;
1421 
1424  const Svc::FpySequencer_LoadAbsDirective& directive,
1425  U64 sequenceIndex
1426  ) = 0;
1427 
1430  const Svc::FpySequencer_LoadRelDirective& directive,
1431  U64 sequenceIndex
1432  ) = 0;
1433 
1436  const Svc::FpySequencer_MemCmpDirective& directive,
1437  U64 sequenceIndex
1438  ) = 0;
1439 
1442  const Svc::FpySequencer_NoOpDirective& directive,
1443  U64 sequenceIndex
1444  ) = 0;
1445 
1448  const Svc::FpySequencer_PeekDirective& directive,
1449  U64 sequenceIndex
1450  ) = 0;
1451 
1454  const Svc::FpySequencer_PopEventDirective& directive,
1455  U64 sequenceIndex
1456  ) = 0;
1457 
1461  U64 sequenceIndex
1462  ) = 0;
1463 
1466  const Svc::FpySequencer_PushPrmDirective& directive,
1467  U64 sequenceIndex
1468  ) = 0;
1469 
1472  const Svc::FpySequencer_PushRandDirective& directive,
1473  U64 sequenceIndex
1474  ) = 0;
1475 
1478  const Svc::FpySequencer_PushTimeDirective& directive,
1479  U64 sequenceIndex
1480  ) = 0;
1481 
1484  const Svc::FpySequencer_PushTlmValDirective& directive,
1485  U64 sequenceIndex
1486  ) = 0;
1487 
1491  U64 sequenceIndex
1492  ) = 0;
1493 
1496  const Svc::FpySequencer_PushValDirective& directive,
1497  U64 sequenceIndex
1498  ) = 0;
1499 
1502  const Svc::FpySequencer_ReturnDirective& directive,
1503  U64 sequenceIndex
1504  ) = 0;
1505 
1508  const Svc::FpySequencer_SetSeedDirective& directive,
1509  U64 sequenceIndex
1510  ) = 0;
1511 
1514  const Svc::FpySequencer_StackCmdDirective& directive,
1515  U64 sequenceIndex
1516  ) = 0;
1517 
1520  const Svc::FpySequencer_StackOpDirective& directive,
1521  U64 sequenceIndex
1522  ) = 0;
1523 
1526  const Svc::FpySequencer_StoreAbsDirective& directive,
1527  U64 sequenceIndex
1528  ) = 0;
1529 
1533  U64 sequenceIndex
1534  ) = 0;
1535 
1538  const Svc::FpySequencer_StoreRelDirective& directive,
1539  U64 sequenceIndex
1540  ) = 0;
1541 
1545  U64 sequenceIndex
1546  ) = 0;
1547 
1550  const Svc::FpySequencer_WaitAbsDirective& directive,
1551  U64 sequenceIndex
1552  ) = 0;
1553 
1556  const Svc::FpySequencer_WaitRelDirective& directive,
1557  U64 sequenceIndex
1558  ) = 0;
1559 
1561  virtual void tlmWriteInternal_internalInterfaceHandler() = 0;
1562 
1563  protected:
1564 
1565  // ----------------------------------------------------------------------
1566  // Internal interface base-class functions
1567  // ----------------------------------------------------------------------
1568 
1571 
1574  const Svc::FpySequencer_AllocateDirective& directive,
1575  U64 sequenceIndex
1576  );
1577 
1580  const Svc::FpySequencer_CallDirective& directive,
1581  U64 sequenceIndex
1582  );
1583 
1586  const Svc::FpySequencer_ConstCmdDirective& directive,
1587  U64 sequenceIndex
1588  );
1589 
1592  const Svc::FpySequencer_DiscardDirective& directive,
1593  U64 sequenceIndex
1594  );
1595 
1598  const Svc::FpySequencer_ExitDirective& directive,
1599  U64 sequenceIndex
1600  );
1601 
1604  const Svc::FpySequencer_GetFieldDirective& directive,
1605  U64 sequenceIndex
1606  );
1607 
1610  const Svc::FpySequencer_GotoDirective& directive,
1611  U64 sequenceIndex
1612  );
1613 
1616  const Svc::FpySequencer_IfDirective& directive,
1617  U64 sequenceIndex
1618  );
1619 
1622  const Svc::FpySequencer_LoadAbsDirective& directive,
1623  U64 sequenceIndex
1624  );
1625 
1628  const Svc::FpySequencer_LoadRelDirective& directive,
1629  U64 sequenceIndex
1630  );
1631 
1634  const Svc::FpySequencer_MemCmpDirective& directive,
1635  U64 sequenceIndex
1636  );
1637 
1640  const Svc::FpySequencer_NoOpDirective& directive,
1641  U64 sequenceIndex
1642  );
1643 
1646  const Svc::FpySequencer_PeekDirective& directive,
1647  U64 sequenceIndex
1648  );
1649 
1652  const Svc::FpySequencer_PopEventDirective& directive,
1653  U64 sequenceIndex
1654  );
1655 
1659  U64 sequenceIndex
1660  );
1661 
1664  const Svc::FpySequencer_PushPrmDirective& directive,
1665  U64 sequenceIndex
1666  );
1667 
1670  const Svc::FpySequencer_PushRandDirective& directive,
1671  U64 sequenceIndex
1672  );
1673 
1676  const Svc::FpySequencer_PushTimeDirective& directive,
1677  U64 sequenceIndex
1678  );
1679 
1682  const Svc::FpySequencer_PushTlmValDirective& directive,
1683  U64 sequenceIndex
1684  );
1685 
1689  U64 sequenceIndex
1690  );
1691 
1694  const Svc::FpySequencer_PushValDirective& directive,
1695  U64 sequenceIndex
1696  );
1697 
1700  const Svc::FpySequencer_ReturnDirective& directive,
1701  U64 sequenceIndex
1702  );
1703 
1706  const Svc::FpySequencer_SetSeedDirective& directive,
1707  U64 sequenceIndex
1708  );
1709 
1712  const Svc::FpySequencer_StackCmdDirective& directive,
1713  U64 sequenceIndex
1714  );
1715 
1718  const Svc::FpySequencer_StackOpDirective& directive,
1719  U64 sequenceIndex
1720  );
1721 
1724  const Svc::FpySequencer_StoreAbsDirective& directive,
1725  U64 sequenceIndex
1726  );
1727 
1731  U64 sequenceIndex
1732  );
1733 
1736  const Svc::FpySequencer_StoreRelDirective& directive,
1737  U64 sequenceIndex
1738  );
1739 
1743  U64 sequenceIndex
1744  );
1745 
1748  const Svc::FpySequencer_WaitAbsDirective& directive,
1749  U64 sequenceIndex
1750  );
1751 
1754  const Svc::FpySequencer_WaitRelDirective& directive,
1755  U64 sequenceIndex
1756  );
1757 
1760 
1761  protected:
1762 
1763  // ----------------------------------------------------------------------
1764  // State getter functions
1765  // ----------------------------------------------------------------------
1766 
1769 
1770  protected:
1771 
1772  // ----------------------------------------------------------------------
1773  // Signal send functions
1774  // ----------------------------------------------------------------------
1775 
1779  );
1780 
1784  );
1785 
1789  );
1790 
1793 
1796  const Svc::FpySequencer_BreakpointArgs& value
1797  );
1798 
1801 
1804 
1807 
1810 
1813 
1816 
1819 
1822 
1825 
1828 
1831 
1834 
1837 
1840 
1843 
1846 
1849 
1852 
1855 
1858 
1861 
1862  protected:
1863 
1864  // ----------------------------------------------------------------------
1865  // Functions to implement for internal state machine actions
1866  // ----------------------------------------------------------------------
1867 
1872  SmId smId,
1874  ) = 0;
1875 
1880  SmId smId,
1883  ) = 0;
1884 
1889  SmId smId,
1892  ) = 0;
1893 
1898  SmId smId,
1901  ) = 0;
1902 
1907  SmId smId,
1909  ) = 0;
1910 
1915  SmId smId,
1917  ) = 0;
1918 
1923  SmId smId,
1925  ) = 0;
1926 
1931  SmId smId,
1933  ) = 0;
1934 
1939  SmId smId,
1941  ) = 0;
1942 
1947  SmId smId,
1949  ) = 0;
1950 
1955  SmId smId,
1957  ) = 0;
1958 
1963  SmId smId,
1965  ) = 0;
1966 
1971  SmId smId,
1973  ) = 0;
1974 
1979  SmId smId,
1981  ) = 0;
1982 
1987  SmId smId,
1989  ) = 0;
1990 
1995  SmId smId,
1997  ) = 0;
1998 
2003  SmId smId,
2005  ) = 0;
2006 
2011  SmId smId,
2013  ) = 0;
2014 
2019  SmId smId,
2021  ) = 0;
2022 
2027  SmId smId,
2029  ) = 0;
2030 
2035  SmId smId,
2037  ) = 0;
2038 
2043  SmId smId,
2045  ) = 0;
2046 
2051  SmId smId,
2053  ) = 0;
2054 
2059  SmId smId,
2061  ) = 0;
2062 
2067  SmId smId,
2069  const Svc::FpySequencer_BreakpointArgs& value
2070  ) = 0;
2071 
2076  SmId smId,
2078  ) = 0;
2079 
2084  SmId smId,
2086  ) = 0;
2087 
2088  protected:
2089 
2090  // ----------------------------------------------------------------------
2091  // Functions to implement for internal state machine guards
2092  // ----------------------------------------------------------------------
2093 
2098  SmId smId,
2100  ) const = 0;
2101 
2107  SmId smId,
2109  ) const = 0;
2110 
2115  SmId smId,
2117  ) const = 0;
2118 
2119  protected:
2120 
2121  // ----------------------------------------------------------------------
2122  // Command response
2123  // ----------------------------------------------------------------------
2124 
2126  void cmdResponse_out(
2127  FwOpcodeType opCode,
2128  U32 cmdSeq,
2129  Fw::CmdResponse response
2130  );
2131 
2132  protected:
2133 
2134  // ----------------------------------------------------------------------
2135  // Command handlers to implement
2136  // ----------------------------------------------------------------------
2137 
2141  virtual void RUN_cmdHandler(
2142  FwOpcodeType opCode,
2143  U32 cmdSeq,
2144  const Fw::CmdStringArg& fileName,
2145  const Svc::BlockState& block
2146  ) = 0;
2147 
2149  virtual void RUN_ARGS_cmdHandler(
2150  FwOpcodeType opCode,
2151  U32 cmdSeq,
2152  const Fw::CmdStringArg& fileName,
2153  const Svc::BlockState& block,
2154  const Svc::SeqArgs& buffer
2155  ) = 0;
2156 
2160  virtual void VALIDATE_cmdHandler(
2161  FwOpcodeType opCode,
2162  U32 cmdSeq,
2163  const Fw::CmdStringArg& fileName
2164  ) = 0;
2165 
2169  virtual void VALIDATE_ARGS_cmdHandler(
2170  FwOpcodeType opCode,
2171  U32 cmdSeq,
2172  const Fw::CmdStringArg& fileName,
2173  const Svc::SeqArgs& buffer
2174  ) = 0;
2175 
2179  virtual void RUN_VALIDATED_cmdHandler(
2180  FwOpcodeType opCode,
2181  U32 cmdSeq,
2182  const Svc::BlockState& block
2183  ) = 0;
2184 
2189  virtual void CANCEL_cmdHandler(
2190  FwOpcodeType opCode,
2191  U32 cmdSeq
2192  ) = 0;
2193 
2200  virtual void SET_BREAKPOINT_cmdHandler(
2201  FwOpcodeType opCode,
2202  U32 cmdSeq,
2203  U32 stmtIdx,
2204  bool breakOnce
2205  ) = 0;
2206 
2212  virtual void BREAK_cmdHandler(
2213  FwOpcodeType opCode,
2214  U32 cmdSeq
2215  ) = 0;
2216 
2221  virtual void CONTINUE_cmdHandler(
2222  FwOpcodeType opCode,
2223  U32 cmdSeq
2224  ) = 0;
2225 
2230  virtual void CLEAR_BREAKPOINT_cmdHandler(
2231  FwOpcodeType opCode,
2232  U32 cmdSeq
2233  ) = 0;
2234 
2239  virtual void STEP_cmdHandler(
2240  FwOpcodeType opCode,
2241  U32 cmdSeq
2242  ) = 0;
2243 
2247  virtual void DUMP_STACK_TO_FILE_cmdHandler(
2248  FwOpcodeType opCode,
2249  U32 cmdSeq,
2250  const Fw::CmdStringArg& fileName
2251  ) = 0;
2252 
2253  protected:
2254 
2255  // ----------------------------------------------------------------------
2256  // Command handler base-class functions
2257  //
2258  // Call these functions directly to bypass the command input port
2259  // ----------------------------------------------------------------------
2260 
2264  void RUN_cmdHandlerBase(
2265  FwOpcodeType opCode,
2266  U32 cmdSeq,
2267  Fw::CmdArgBuffer& args
2268  );
2269 
2272  FwOpcodeType opCode,
2273  U32 cmdSeq,
2274  Fw::CmdArgBuffer& args
2275  );
2276 
2281  FwOpcodeType opCode,
2282  U32 cmdSeq,
2283  Fw::CmdArgBuffer& args
2284  );
2285 
2290  FwOpcodeType opCode,
2291  U32 cmdSeq,
2292  Fw::CmdArgBuffer& args
2293  );
2294 
2299  FwOpcodeType opCode,
2300  U32 cmdSeq,
2301  Fw::CmdArgBuffer& args
2302  );
2303 
2308  void CANCEL_cmdHandlerBase(
2309  FwOpcodeType opCode,
2310  U32 cmdSeq,
2311  Fw::CmdArgBuffer& args
2312  );
2313 
2321  FwOpcodeType opCode,
2322  U32 cmdSeq,
2323  Fw::CmdArgBuffer& args
2324  );
2325 
2331  void BREAK_cmdHandlerBase(
2332  FwOpcodeType opCode,
2333  U32 cmdSeq,
2334  Fw::CmdArgBuffer& args
2335  );
2336 
2342  FwOpcodeType opCode,
2343  U32 cmdSeq,
2344  Fw::CmdArgBuffer& args
2345  );
2346 
2352  FwOpcodeType opCode,
2353  U32 cmdSeq,
2354  Fw::CmdArgBuffer& args
2355  );
2356 
2361  void STEP_cmdHandlerBase(
2362  FwOpcodeType opCode,
2363  U32 cmdSeq,
2364  Fw::CmdArgBuffer& args
2365  );
2366 
2371  FwOpcodeType opCode,
2372  U32 cmdSeq,
2373  Fw::CmdArgBuffer& args
2374  );
2375 
2376  protected:
2377 
2378  // ----------------------------------------------------------------------
2379  // Pre-message hooks for async commands
2380  //
2381  // Each of these functions is invoked just before processing the
2382  // corresponding command. By default they do nothing. You can
2383  // override them to provide specific pre-command behavior.
2384  // ----------------------------------------------------------------------
2385 
2387  virtual void RUN_preMsgHook(
2388  FwOpcodeType opCode,
2389  U32 cmdSeq
2390  );
2391 
2393  virtual void RUN_ARGS_preMsgHook(
2394  FwOpcodeType opCode,
2395  U32 cmdSeq
2396  );
2397 
2399  virtual void VALIDATE_preMsgHook(
2400  FwOpcodeType opCode,
2401  U32 cmdSeq
2402  );
2403 
2405  virtual void VALIDATE_ARGS_preMsgHook(
2406  FwOpcodeType opCode,
2407  U32 cmdSeq
2408  );
2409 
2411  virtual void RUN_VALIDATED_preMsgHook(
2412  FwOpcodeType opCode,
2413  U32 cmdSeq
2414  );
2415 
2417  virtual void CANCEL_preMsgHook(
2418  FwOpcodeType opCode,
2419  U32 cmdSeq
2420  );
2421 
2423  virtual void SET_BREAKPOINT_preMsgHook(
2424  FwOpcodeType opCode,
2425  U32 cmdSeq
2426  );
2427 
2429  virtual void BREAK_preMsgHook(
2430  FwOpcodeType opCode,
2431  U32 cmdSeq
2432  );
2433 
2435  virtual void CONTINUE_preMsgHook(
2436  FwOpcodeType opCode,
2437  U32 cmdSeq
2438  );
2439 
2441  virtual void CLEAR_BREAKPOINT_preMsgHook(
2442  FwOpcodeType opCode,
2443  U32 cmdSeq
2444  );
2445 
2447  virtual void STEP_preMsgHook(
2448  FwOpcodeType opCode,
2449  U32 cmdSeq
2450  );
2451 
2453  virtual void DUMP_STACK_TO_FILE_preMsgHook(
2454  FwOpcodeType opCode,
2455  U32 cmdSeq
2456  );
2457 
2458  protected:
2459 
2460  // ----------------------------------------------------------------------
2461  // Event logging functions
2462  // ----------------------------------------------------------------------
2463 
2465  void log_WARNING_HI_InvalidCommand(I32 state) const;
2466 
2468  void log_WARNING_HI_InvalidSeqRunCall(I32 state) const;
2469 
2471  void log_WARNING_HI_InvalidSeqCancelCall(I32 state) const;
2472 
2475  const Fw::StringBase& filePath,
2476  I32 errorCode
2477  ) const;
2478 
2481  FwSizeType writeSize,
2482  const Fw::StringBase& filePath,
2483  I32 errorCode
2484  ) const;
2485 
2488  const Svc::FpySequencer_FileReadStage& readStage,
2489  const Fw::StringBase& filePath,
2490  I32 errorCode
2491  ) const;
2492 
2495  const Svc::FpySequencer_FileReadStage& readStage,
2496  const Fw::StringBase& filePath
2497  ) const;
2498 
2501  const Svc::FpySequencer_FileReadStage& readStage,
2502  const Fw::StringBase& filePath,
2503  I32 errorCode,
2504  U64 buffLeft,
2505  U64 buffLength
2506  ) const;
2507 
2510  U8 expected,
2511  U8 actual
2512  ) const;
2513 
2516  U32 expected,
2517  U32 actual
2518  ) const;
2519 
2521  void log_WARNING_HI_ExtraBytesInSequence(FwSizeType remaining) const;
2522 
2525  U64 bufferSize,
2526  const Fw::StringBase& filePath
2527  ) const;
2528 
2531  const Fw::StringBase& filePath,
2532  I32 errorCode
2533  ) const;
2534 
2537  const Fw::StringBase& baseDir,
2538  const Fw::StringBase& fileName
2539  ) const;
2540 
2543  FwOpcodeType opCode,
2544  U32 stmtIdx,
2545  const Fw::StringBase& filePath,
2546  const Fw::CmdResponse& response
2547  ) const;
2548 
2550  void log_ACTIVITY_HI_SequenceDone(const Fw::StringBase& filePath) const;
2551 
2553  void log_ACTIVITY_HI_SequenceCancelled(const Fw::StringBase& filePath) const;
2554 
2557  const Fw::StringBase& filePath,
2558  I32 errorCode
2559  ) const;
2560 
2563  U8 opcode,
2564  U32 stmtIdx,
2565  const Fw::StringBase& filePath
2566  ) const;
2567 
2570  I32 state,
2571  FwOpcodeType opcode,
2572  const Fw::CmdResponse& response
2573  ) const;
2574 
2577  FwOpcodeType opcode,
2578  const Fw::CmdResponse& response,
2579  U16 oldSequenceIdx,
2580  U16 currentSequenceIdx
2581  ) const;
2582 
2585  FwOpcodeType opcode,
2586  const Fw::CmdResponse& response
2587  ) const;
2588 
2591  FwOpcodeType opcode,
2592  const Fw::CmdResponse& response,
2593  U8 expectedDirectiveOpcode
2594  ) const;
2595 
2598  FwOpcodeType opcode,
2599  const Fw::CmdResponse& response,
2600  FwOpcodeType expectedOpcode
2601  ) const;
2602 
2605  FwOpcodeType opcode,
2606  const Fw::CmdResponse& response,
2607  U16 actualCmdIdx,
2608  U16 expectedCmdIdx
2609  ) const;
2610 
2613  U8 opcode,
2614  U32 stmtIdx,
2615  I32 errorCode,
2616  U64 buffLeft,
2617  U64 buffLength
2618  ) const;
2619 
2622  I32 internalTimeBase,
2623  I32 otherTimeBase
2624  ) const;
2625 
2628  I32 internalTimeContext,
2629  I32 otherTimeContext
2630  ) const;
2631 
2634  FwOpcodeType opCode,
2635  U32 stmtIdx,
2636  const Fw::StringBase& filePath
2637  ) const;
2638 
2641  U8 opCode,
2642  U32 stmtIdx,
2643  const Fw::StringBase& filePath
2644  ) const;
2645 
2648  U8 count,
2649  U8 max
2650  ) const;
2651 
2654  U16 count,
2655  U16 max
2656  ) const;
2657 
2660  Svc::Fpy::StackSizeType expected,
2661  FwSizeType actual,
2662  const Fw::StringBase& filePath
2663  ) const;
2664 
2667  FwSizeType actual,
2668  FwSizeType capacity
2669  ) const;
2670 
2673 
2675  void log_ACTIVITY_HI_SequencePaused(U32 stmtIdx) const;
2676 
2679  U32 breakpointIdx,
2680  bool breakOnce
2681  ) const;
2682 
2684  void log_ACTIVITY_HI_BreakpointCleared() const;
2685 
2687  void log_FATAL_LogFatal(
2688  const Fw::StringBase& filePath,
2689  const Fw::StringBase& message
2690  ) const;
2691 
2694  const Fw::StringBase& filePath,
2695  const Fw::StringBase& message
2696  ) const;
2697 
2700  const Fw::StringBase& filePath,
2701  const Fw::StringBase& message
2702  ) const;
2703 
2706  const Fw::StringBase& filePath,
2707  const Fw::StringBase& message
2708  ) const;
2709 
2712  const Fw::StringBase& filePath,
2713  const Fw::StringBase& message
2714  ) const;
2715 
2718  const Fw::StringBase& filePath,
2719  const Fw::StringBase& message
2720  ) const;
2721 
2724  const Fw::StringBase& filePath,
2725  const Fw::StringBase& message
2726  ) const;
2727 
2730  const Svc::Fpy::DirectiveId& directive,
2731  I32 state
2732  ) const;
2733 
2736  const Svc::Fpy::DirectiveId& directive,
2737  U64 oldSequenceIdx,
2738  U64 currentSequenceIdx
2739  ) const;
2740 
2743  const Fw::StringBase& filePath,
2744  const Fw::StringBase& sandboxDir
2745  ) const;
2746 
2747  protected:
2748 
2749  // ----------------------------------------------------------------------
2750  // Telemetry serialized write
2751  // ----------------------------------------------------------------------
2752 
2757  void tlmWrite(
2758  FwChanIdType id,
2759  Fw::TlmBuffer& _tlmBuff,
2760  Fw::Time _tlmTime = Fw::Time()
2761  ) const;
2762 
2763  protected:
2764 
2765  // ----------------------------------------------------------------------
2766  // Telemetry write functions
2767  // ----------------------------------------------------------------------
2768 
2772  void tlmWrite_State(
2773  FwEnumStoreType arg,
2774  Fw::Time _tlmTime = Fw::Time()
2775  );
2776 
2781  U64 arg,
2782  Fw::Time _tlmTime = Fw::Time()
2783  );
2784 
2789  U64 arg,
2790  Fw::Time _tlmTime = Fw::Time()
2791  );
2792 
2797  U64 arg,
2798  Fw::Time _tlmTime = Fw::Time()
2799  );
2800 
2807  U64 arg,
2808  Fw::Time _tlmTime = Fw::Time()
2809  );
2810 
2815  U64 arg,
2816  Fw::Time _tlmTime = Fw::Time()
2817  );
2818 
2823  const Svc::Fpy::DirectiveErrorCode& arg,
2824  Fw::Time _tlmTime = Fw::Time()
2825  );
2826 
2831  U64 arg,
2832  Fw::Time _tlmTime = Fw::Time()
2833  );
2834 
2839  const Svc::Fpy::DirectiveId& arg,
2840  Fw::Time _tlmTime = Fw::Time()
2841  );
2842 
2846  void tlmWrite_SeqPath(
2847  const Fw::StringBase& arg,
2848  Fw::Time _tlmTime = Fw::Time()
2849  );
2850 
2855  bool arg,
2856  Fw::Time _tlmTime = Fw::Time()
2857  );
2858 
2863  bool arg,
2864  Fw::Time _tlmTime = Fw::Time()
2865  );
2866 
2871  U8 arg,
2872  Fw::Time _tlmTime = Fw::Time()
2873  );
2874 
2879  U32 arg,
2880  Fw::Time _tlmTime = Fw::Time()
2881  );
2882 
2887  FwOpcodeType arg,
2888  Fw::Time _tlmTime = Fw::Time()
2889  );
2890 
2896  Fw::Time _tlmTime = Fw::Time()
2897  );
2898 
2903  bool arg,
2904  Fw::Time _tlmTime = Fw::Time()
2905  );
2906 
2912  U32 arg,
2913  Fw::Time _tlmTime = Fw::Time()
2914  );
2915 
2920  bool arg,
2921  Fw::Time _tlmTime = Fw::Time()
2922  );
2923 
2930  bool arg,
2931  Fw::Time _tlmTime = Fw::Time()
2932  );
2933 
2938  F32 arg,
2939  Fw::Time _tlmTime = Fw::Time()
2940  );
2941 
2946  const Fw::StringBase& arg,
2947  Fw::Time _tlmTime = Fw::Time()
2948  );
2949 
2950  protected:
2951 
2952  // ----------------------------------------------------------------------
2953  // Parameter hook functions
2954  // ----------------------------------------------------------------------
2955 
2959  virtual void parameterUpdated(
2960  FwPrmIdType id
2961  );
2962 
2968  virtual void parametersLoaded();
2969 
2975  virtual void parameterLoaded(
2976  FwPrmIdType id,
2977  Fw::ParamValid valid
2978  );
2979 
2980  protected:
2981 
2982  // ----------------------------------------------------------------------
2983  // Parameter get functions
2984  // ----------------------------------------------------------------------
2985 
2995  Fw::ParamValid& valid
2996  );
2997 
3007  Fw::ParamValid& valid
3008  );
3009 
3010  protected:
3011 
3012  // ----------------------------------------------------------------------
3013  // Time
3014  // ----------------------------------------------------------------------
3015 
3019  Fw::Time getTime() const;
3020 
3021  private:
3022 
3023  // ----------------------------------------------------------------------
3024  // Message dispatch functions
3025  // ----------------------------------------------------------------------
3026 
3028  virtual MsgDispatchStatus doDispatch();
3029 
3030  private:
3031 
3032  // ----------------------------------------------------------------------
3033  // Calls for messages received on special input ports
3034  // ----------------------------------------------------------------------
3035 
3037  static void m_p_cmdIn_in(
3038  Fw::PassiveComponentBase* callComp,
3039  FwIndexType portNum,
3040  FwOpcodeType opCode,
3041  U32 cmdSeq,
3042  Fw::CmdArgBuffer& args
3043  );
3044 
3045  private:
3046 
3047  // ----------------------------------------------------------------------
3048  // Calls for messages received on typed input ports
3049  // ----------------------------------------------------------------------
3050 
3052  static void m_p_checkTimers_in(
3053  Fw::PassiveComponentBase* callComp,
3054  FwIndexType portNum,
3055  U32 context
3056  );
3057 
3059  static void m_p_cmdResponseIn_in(
3060  Fw::PassiveComponentBase* callComp,
3061  FwIndexType portNum,
3062  FwOpcodeType opCode,
3063  U32 cmdSeq,
3064  const Fw::CmdResponse& response
3065  );
3066 
3068  static void m_p_pingIn_in(
3069  Fw::PassiveComponentBase* callComp,
3070  FwIndexType portNum,
3071  U32 key
3072  );
3073 
3075  static void m_p_seqCancelIn_in(
3076  Fw::PassiveComponentBase* callComp,
3077  FwIndexType portNum
3078  );
3079 
3081  static void m_p_seqRunIn_in(
3082  Fw::PassiveComponentBase* callComp,
3083  FwIndexType portNum,
3084  const Fw::StringBase& filename,
3085  const Svc::SeqArgs& args
3086  );
3087 
3089  static void m_p_tlmWrite_in(
3090  Fw::PassiveComponentBase* callComp,
3091  FwIndexType portNum,
3092  U32 context
3093  );
3094 
3095  private:
3096 
3097  // ----------------------------------------------------------------------
3098  // Invocation functions for special output ports
3099  // ----------------------------------------------------------------------
3100 
3102  void cmdRegOut_out(
3103  FwIndexType portNum,
3104  FwOpcodeType opCode
3105  ) const;
3106 
3108  void cmdResponseOut_out(
3109  FwIndexType portNum,
3110  FwOpcodeType opCode,
3111  U32 cmdSeq,
3112  const Fw::CmdResponse& response
3113  ) const;
3114 
3116  void logOut_out(
3117  FwIndexType portNum,
3118  FwEventIdType id,
3119  Fw::Time& timeTag,
3120  const Fw::LogSeverity& severity,
3121  Fw::LogBuffer& args
3122  ) const;
3123 
3124 #if FW_ENABLE_TEXT_LOGGING
3125 
3127  void logTextOut_out(
3128  FwIndexType portNum,
3129  FwEventIdType id,
3130  Fw::Time& timeTag,
3131  const Fw::LogSeverity& severity,
3132  Fw::TextLogString& text
3133  ) const;
3134 
3135 #endif
3136 
3138  Fw::ParamValid prmGet_out(
3139  FwIndexType portNum,
3140  FwPrmIdType id,
3141  Fw::ParamBuffer& val
3142  ) const;
3144 
3146  void prmSet_out(
3147  FwIndexType portNum,
3148  FwPrmIdType id,
3149  Fw::ParamBuffer& val
3150  ) const;
3151 
3153  void timeCaller_out(
3154  FwIndexType portNum,
3155  Fw::Time& time
3156  ) const;
3157 
3159  void tlmOut_out(
3160  FwIndexType portNum,
3161  FwChanIdType id,
3162  Fw::Time& timeTag,
3163  Fw::TlmBuffer& val
3164  ) const;
3165 
3166  private:
3167 
3168  // ----------------------------------------------------------------------
3169  // Send signal helper functions
3170  // ----------------------------------------------------------------------
3171 
3173  void sendSignalStart(
3174  SmId smId,
3175  FwEnumStoreType signal,
3176  Fw::SerialBufferBase& buffer
3177  );
3178 
3180  void sequencer_sendSignalFinish(
3181  Fw::LinearBufferBase& buffer
3182  );
3183 
3184  private:
3185 
3186  // ----------------------------------------------------------------------
3187  // Helper functions for state machine dispatch
3188  // ----------------------------------------------------------------------
3189 
3191  void smDispatch(
3192  Fw::SerialBufferBase& buffer
3193  );
3194 
3196  static void deserializeSmIdAndSignal(
3197  Fw::SerialBufferBase& buffer,
3198  FwEnumStoreType& smId,
3199  FwEnumStoreType& signal
3200  );
3201 
3203  void Svc_FpySequencer_SequencerStateMachine_smDispatch(
3204  Fw::SerialBufferBase& buffer,
3205  Svc_FpySequencer_SequencerStateMachine& sm,
3207  );
3208 
3209  private:
3210 
3211  // ----------------------------------------------------------------------
3212  // Parameter set functions
3213  // ----------------------------------------------------------------------
3214 
3218  Fw::CmdResponse paramSet_STATEMENT_TIMEOUT_SECS(
3219  Fw::SerialBufferBase& val
3220  );
3221 
3225  Fw::CmdResponse paramSet_SEQ_BASE_DIR(
3226  Fw::SerialBufferBase& val
3227  );
3228 
3229  private:
3230 
3231  // ----------------------------------------------------------------------
3232  // Parameter save functions
3233  // ----------------------------------------------------------------------
3234 
3238  Fw::CmdResponse paramSave_STATEMENT_TIMEOUT_SECS();
3239 
3243  Fw::CmdResponse paramSave_SEQ_BASE_DIR();
3244 
3245 #if !FW_DIRECT_PORT_CALLS
3246 
3247  private:
3248 
3249  // ----------------------------------------------------------------------
3250  // Special input ports
3251  // ----------------------------------------------------------------------
3252 
3254  Fw::InputCmdPort m_cmdIn_InputPort[NUM_CMDIN_INPUT_PORTS];
3255 
3256 #endif
3257 
3258 #if !FW_DIRECT_PORT_CALLS
3259 
3260  private:
3261 
3262  // ----------------------------------------------------------------------
3263  // Typed input ports
3264  // ----------------------------------------------------------------------
3265 
3267  Svc::InputSchedPort m_checkTimers_InputPort[NUM_CHECKTIMERS_INPUT_PORTS];
3268 
3270  Fw::InputCmdResponsePort m_cmdResponseIn_InputPort[NUM_CMDRESPONSEIN_INPUT_PORTS];
3271 
3273  Svc::InputPingPort m_pingIn_InputPort[NUM_PINGIN_INPUT_PORTS];
3274 
3277 
3279  Svc::InputCmdSeqInPort m_seqRunIn_InputPort[NUM_SEQRUNIN_INPUT_PORTS];
3280 
3282  Svc::InputSchedPort m_tlmWrite_InputPort[NUM_TLMWRITE_INPUT_PORTS];
3283 
3284 #endif
3285 
3286 #if !FW_DIRECT_PORT_CALLS
3287 
3288  private:
3289 
3290  // ----------------------------------------------------------------------
3291  // Special output ports
3292  // ----------------------------------------------------------------------
3293 
3295  Fw::OutputCmdRegPort m_cmdRegOut_OutputPort[NUM_CMDREGOUT_OUTPUT_PORTS];
3296 
3298  Fw::OutputCmdResponsePort m_cmdResponseOut_OutputPort[NUM_CMDRESPONSEOUT_OUTPUT_PORTS];
3299 
3301  Fw::OutputLogPort m_logOut_OutputPort[NUM_LOGOUT_OUTPUT_PORTS];
3302 
3303 #if FW_ENABLE_TEXT_LOGGING == 1
3304 
3306  Fw::OutputLogTextPort m_logTextOut_OutputPort[NUM_LOGTEXTOUT_OUTPUT_PORTS];
3307 
3308 #endif
3309 
3311  Fw::OutputPrmGetPort m_prmGet_OutputPort[NUM_PRMGET_OUTPUT_PORTS];
3312 
3314  Fw::OutputPrmSetPort m_prmSet_OutputPort[NUM_PRMSET_OUTPUT_PORTS];
3315 
3317  Fw::OutputTimePort m_timeCaller_OutputPort[NUM_TIMECALLER_OUTPUT_PORTS];
3318 
3320  Fw::OutputTlmPort m_tlmOut_OutputPort[NUM_TLMOUT_OUTPUT_PORTS];
3321 
3322 #endif
3323 
3324 #if !FW_DIRECT_PORT_CALLS
3325 
3326  private:
3327 
3328  // ----------------------------------------------------------------------
3329  // Typed output ports
3330  // ----------------------------------------------------------------------
3331 
3333  Fw::OutputComPort m_cmdOut_OutputPort[NUM_CMDOUT_OUTPUT_PORTS];
3334 
3336  Fw::OutputPrmGetPort m_getParam_OutputPort[NUM_GETPARAM_OUTPUT_PORTS];
3337 
3339  Fw::OutputTlmGetPort m_getTlmChan_OutputPort[NUM_GETTLMCHAN_OUTPUT_PORTS];
3340 
3342  Svc::OutputPingPort m_pingOut_OutputPort[NUM_PINGOUT_OUTPUT_PORTS];
3343 
3345  Fw::OutputCmdResponsePort m_seqDoneOut_OutputPort[NUM_SEQDONEOUT_OUTPUT_PORTS];
3346 
3348  Svc::OutputCmdSeqInPort m_seqStartOut_OutputPort[NUM_SEQSTARTOUT_OUTPUT_PORTS];
3349 
3350 #endif
3351 
3352 #if !FW_DIRECT_PORT_CALLS
3353 
3354  private:
3355 
3356  // ----------------------------------------------------------------------
3357  // Serial output ports
3358  // ----------------------------------------------------------------------
3359 
3361  Fw::OutputSerializePort m_serialOut_OutputPort[NUM_SERIALOUT_OUTPUT_PORTS];
3362 
3363 #endif
3364 
3365  private:
3366 
3367  // ----------------------------------------------------------------------
3368  // First update flags for telemetry channels
3369  // ----------------------------------------------------------------------
3370 
3372  bool m_first_update_State = true;
3373 
3375  bool m_first_update_SequencesSucceeded = true;
3376 
3378  bool m_first_update_SequencesFailed = true;
3379 
3381  bool m_first_update_SequencesCancelled = true;
3382 
3384  bool m_first_update_StatementsDispatched = true;
3385 
3387  bool m_first_update_StatementsFailed = true;
3388 
3390  bool m_first_update_LastDirectiveError = true;
3391 
3393  bool m_first_update_DirectiveErrorIndex = true;
3394 
3396  bool m_first_update_DirectiveErrorId = true;
3397 
3399  bool m_first_update_SeqPath = true;
3400 
3402  bool m_first_update_Debug_ReachedEndOfFile = true;
3403 
3405  bool m_first_update_Debug_NextStatementReadSuccess = true;
3406 
3408  bool m_first_update_Debug_NextStatementOpcode = true;
3409 
3411  bool m_first_update_Debug_NextStatementIndex = true;
3412 
3414  bool m_first_update_Debug_NextCmdOpcode = true;
3415 
3417  bool m_first_update_Debug_StackSize = true;
3418 
3420  bool m_first_update_BreakpointInUse = true;
3421 
3423  bool m_first_update_BreakpointIndex = true;
3424 
3426  bool m_first_update_BreakOnlyOnceOnBreakpoint = true;
3427 
3429  bool m_first_update_BreakBeforeNextLine = true;
3430 
3432  bool m_first_update_PRM_STATEMENT_TIMEOUT_SECS = true;
3433 
3435  bool m_first_update_PRM_SEQ_BASE_DIR = true;
3436 
3437  private:
3438 
3439  // ----------------------------------------------------------------------
3440  // Last value storage for telemetry channels
3441  // ----------------------------------------------------------------------
3442 
3444  FwEnumStoreType m_last_State = {};
3445 
3447  U64 m_last_SequencesSucceeded = {};
3448 
3450  U64 m_last_SequencesFailed = {};
3451 
3453  U64 m_last_SequencesCancelled = {};
3454 
3456  U64 m_last_StatementsDispatched = {};
3457 
3459  U64 m_last_StatementsFailed = {};
3460 
3462  Svc::Fpy::DirectiveErrorCode m_last_LastDirectiveError = {};
3463 
3465  U64 m_last_DirectiveErrorIndex = {};
3466 
3468  Svc::Fpy::DirectiveId m_last_DirectiveErrorId = {};
3469 
3471  Fw::TlmString m_last_SeqPath = {};
3472 
3474  bool m_last_Debug_ReachedEndOfFile = {};
3475 
3477  bool m_last_Debug_NextStatementReadSuccess = {};
3478 
3480  U8 m_last_Debug_NextStatementOpcode = {};
3481 
3483  U32 m_last_Debug_NextStatementIndex = {};
3484 
3486  FwOpcodeType m_last_Debug_NextCmdOpcode = {};
3487 
3489  Svc::Fpy::StackSizeType m_last_Debug_StackSize = {};
3490 
3492  bool m_last_BreakpointInUse = {};
3493 
3495  U32 m_last_BreakpointIndex = {};
3496 
3498  bool m_last_BreakOnlyOnceOnBreakpoint = {};
3499 
3501  bool m_last_BreakBeforeNextLine = {};
3502 
3504  F32 m_last_PRM_STATEMENT_TIMEOUT_SECS = {};
3505 
3507  Fw::TlmString m_last_PRM_SEQ_BASE_DIR = {};
3508 
3509  private:
3510 
3511  // ----------------------------------------------------------------------
3512  // Parameter validity flags
3513  // ----------------------------------------------------------------------
3514 
3516  Fw::ParamValid m_param_STATEMENT_TIMEOUT_SECS_valid = Fw::ParamValid::UNINIT;
3517 
3519  Fw::ParamValid m_param_SEQ_BASE_DIR_valid = Fw::ParamValid::UNINIT;
3520 
3521  private:
3522 
3523  // ----------------------------------------------------------------------
3524  // Parameter variables
3525  // ----------------------------------------------------------------------
3526 
3533  F32 m_STATEMENT_TIMEOUT_SECS;
3534 
3541  Fw::ParamString m_SEQ_BASE_DIR;
3542 
3543  private:
3544 
3545  // ----------------------------------------------------------------------
3546  // State machine instances
3547  // ----------------------------------------------------------------------
3548 
3550  Svc_FpySequencer_SequencerStateMachine m_stateMachine_sequencer;
3551 
3552  private:
3553 
3554  // ----------------------------------------------------------------------
3555  // Mutexes
3556  // ----------------------------------------------------------------------
3557 
3559  Os::Mutex m_paramLock;
3560 
3561  };
3562 
3563 }
3564 
3565 #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 checkTimersInternal_internalInterfaceHandler()=0
Internal interface handler for checkTimersInternal.
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.
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
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].
Loads, validates and runs a sequence.
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 checkTimersInternal_internalInterfaceInvoke()
Internal interface base-class function for checkTimersInternal.
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.
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.
virtual void tlmWriteInternal_internalInterfaceHandler()=0
Internal interface handler for tlmWriteInternal.
void tlmWriteInternal_internalInterfaceInvoke()
Internal interface base-class function for tlmWriteInternal.
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.
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.
Loads and validates a sequence with arguments.
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
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_HI_FileOutsideSandbox(const Fw::StringBase &filePath, const Fw::StringBase &sandboxDir) const
Log event FileOutsideSandbox.
Must be called after VALIDATE. Runs the sequence that was validated.
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.
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
Writes the contents of the stack to a file. This command is only valid in the RUNNING.PAUSED state.
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())
virtual void tlmWriteInternal_overflowHook()=0
Overflow hook for async input port tlmWriteInternal.
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())