F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
CmdSequencerComponentAc.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title CmdSequencerComponentAc.cpp
3 // \author Generated by fpp-to-cpp
4 // \brief cpp file for CmdSequencer component base class
5 // ======================================================================
6 
8 #include "Fw/Types/Assert.hpp"
10 #if FW_ENABLE_TEXT_LOGGING
11 #include "Fw/Types/String.hpp"
12 #endif
13 
14 namespace Svc {
15 
16  namespace {
17  enum MsgTypeEnum {
18  CMDSEQUENCER_COMPONENT_EXIT = Fw::ActiveComponentBase::ACTIVE_COMPONENT_EXIT,
19  CMDRESPONSEIN_CMDRESPONSE,
20  PINGIN_PING,
21  SCHEDIN_SCHED,
22  SEQCANCELIN_CMDSEQCANCEL,
23  SEQRUNIN_CMDSEQIN,
24  CMD_CS_RUN,
25  CMD_CS_VALIDATE,
26  CMD_CS_CANCEL,
27  CMD_CS_START,
28  CMD_CS_STEP,
29  CMD_CS_AUTO,
30  CMD_CS_MANUAL,
31  CMD_CS_JOIN_WAIT,
32  };
33 
34  // Get the max size by constructing a union of the async input, command, and
35  // internal port serialization sizes
36  union BuffUnion {
37  BYTE cmdResponseInPortSize[Fw::InputCmdResponsePort::SERIALIZED_SIZE];
42  };
43 
44  // Define a message buffer class large enough to handle all the
45  // asynchronous inputs to the component
46  class ComponentIpcSerializableBuffer :
48  {
49 
50  public:
51 
52  enum {
53  // Max. message size = size of data + message id + port
54  SERIALIZATION_SIZE =
55  sizeof(BuffUnion) +
56  sizeof(FwEnumStoreType) +
57  sizeof(FwIndexType)
58  };
59 
60  Fw::Serializable::SizeType getBuffCapacity() const {
61  return sizeof(m_buff);
62  }
63 
64  U8* getBuffAddr() {
65  return m_buff;
66  }
67 
68  const U8* getBuffAddr() const {
69  return m_buff;
70  }
71 
72  private:
73  // Should be the max of all the input ports serialized sizes...
74  U8 m_buff[SERIALIZATION_SIZE];
75 
76  };
77  }
78 
79  // ----------------------------------------------------------------------
80  // Component initialization
81  // ----------------------------------------------------------------------
82 
84  init(
85  FwSizeType queueDepth,
86  FwEnumStoreType instance
87  )
88  {
89  // Initialize base class
91 
92  // Connect input port cmdIn
93  for (
94  FwIndexType port = 0;
95  port < static_cast<FwIndexType>(this->getNum_cmdIn_InputPorts());
96  port++
97  ) {
98  this->m_cmdIn_InputPort[port].init();
99  this->m_cmdIn_InputPort[port].addCallComp(
100  this,
101  m_p_cmdIn_in
102  );
103  this->m_cmdIn_InputPort[port].setPortNum(port);
104 
105 #if FW_OBJECT_NAMES == 1
106  Fw::ObjectName portName;
107  portName.format(
108  "%s_cmdIn_InputPort[%" PRI_PlatformIntType "]",
109  this->m_objName.toChar(),
110  port
111  );
112  this->m_cmdIn_InputPort[port].setObjName(portName.toChar());
113 #endif
114  }
115 
116  // Connect input port cmdResponseIn
117  for (
118  FwIndexType port = 0;
119  port < static_cast<FwIndexType>(this->getNum_cmdResponseIn_InputPorts());
120  port++
121  ) {
122  this->m_cmdResponseIn_InputPort[port].init();
123  this->m_cmdResponseIn_InputPort[port].addCallComp(
124  this,
125  m_p_cmdResponseIn_in
126  );
127  this->m_cmdResponseIn_InputPort[port].setPortNum(port);
128 
129 #if FW_OBJECT_NAMES == 1
130  Fw::ObjectName portName;
131  portName.format(
132  "%s_cmdResponseIn_InputPort[%" PRI_PlatformIntType "]",
133  this->m_objName.toChar(),
134  port
135  );
136  this->m_cmdResponseIn_InputPort[port].setObjName(portName.toChar());
137 #endif
138  }
139 
140  // Connect input port pingIn
141  for (
142  FwIndexType port = 0;
143  port < static_cast<FwIndexType>(this->getNum_pingIn_InputPorts());
144  port++
145  ) {
146  this->m_pingIn_InputPort[port].init();
147  this->m_pingIn_InputPort[port].addCallComp(
148  this,
149  m_p_pingIn_in
150  );
151  this->m_pingIn_InputPort[port].setPortNum(port);
152 
153 #if FW_OBJECT_NAMES == 1
154  Fw::ObjectName portName;
155  portName.format(
156  "%s_pingIn_InputPort[%" PRI_PlatformIntType "]",
157  this->m_objName.toChar(),
158  port
159  );
160  this->m_pingIn_InputPort[port].setObjName(portName.toChar());
161 #endif
162  }
163 
164  // Connect input port schedIn
165  for (
166  FwIndexType port = 0;
167  port < static_cast<FwIndexType>(this->getNum_schedIn_InputPorts());
168  port++
169  ) {
170  this->m_schedIn_InputPort[port].init();
171  this->m_schedIn_InputPort[port].addCallComp(
172  this,
173  m_p_schedIn_in
174  );
175  this->m_schedIn_InputPort[port].setPortNum(port);
176 
177 #if FW_OBJECT_NAMES == 1
178  Fw::ObjectName portName;
179  portName.format(
180  "%s_schedIn_InputPort[%" PRI_PlatformIntType "]",
181  this->m_objName.toChar(),
182  port
183  );
184  this->m_schedIn_InputPort[port].setObjName(portName.toChar());
185 #endif
186  }
187 
188  // Connect input port seqCancelIn
189  for (
190  FwIndexType port = 0;
191  port < static_cast<FwIndexType>(this->getNum_seqCancelIn_InputPorts());
192  port++
193  ) {
194  this->m_seqCancelIn_InputPort[port].init();
195  this->m_seqCancelIn_InputPort[port].addCallComp(
196  this,
197  m_p_seqCancelIn_in
198  );
199  this->m_seqCancelIn_InputPort[port].setPortNum(port);
200 
201 #if FW_OBJECT_NAMES == 1
202  Fw::ObjectName portName;
203  portName.format(
204  "%s_seqCancelIn_InputPort[%" PRI_PlatformIntType "]",
205  this->m_objName.toChar(),
206  port
207  );
208  this->m_seqCancelIn_InputPort[port].setObjName(portName.toChar());
209 #endif
210  }
211 
212  // Connect input port seqRunIn
213  for (
214  FwIndexType port = 0;
215  port < static_cast<FwIndexType>(this->getNum_seqRunIn_InputPorts());
216  port++
217  ) {
218  this->m_seqRunIn_InputPort[port].init();
219  this->m_seqRunIn_InputPort[port].addCallComp(
220  this,
221  m_p_seqRunIn_in
222  );
223  this->m_seqRunIn_InputPort[port].setPortNum(port);
224 
225 #if FW_OBJECT_NAMES == 1
226  Fw::ObjectName portName;
227  portName.format(
228  "%s_seqRunIn_InputPort[%" PRI_PlatformIntType "]",
229  this->m_objName.toChar(),
230  port
231  );
232  this->m_seqRunIn_InputPort[port].setObjName(portName.toChar());
233 #endif
234  }
235 
236 #if FW_ENABLE_TEXT_LOGGING == 1
237  // Connect output port LogText
238  for (
239  FwIndexType port = 0;
240  port < static_cast<FwIndexType>(this->getNum_LogText_OutputPorts());
241  port++
242  ) {
243  this->m_LogText_OutputPort[port].init();
244 
245 #if FW_OBJECT_NAMES == 1
246  Fw::ObjectName portName;
247  portName.format(
248  "%s_LogText_OutputPort[%" PRI_PlatformIntType "]",
249  this->m_objName.toChar(),
250  port
251  );
252  this->m_LogText_OutputPort[port].setObjName(portName.toChar());
253 #endif
254  }
255 #endif
256 
257  // Connect output port cmdRegOut
258  for (
259  FwIndexType port = 0;
260  port < static_cast<FwIndexType>(this->getNum_cmdRegOut_OutputPorts());
261  port++
262  ) {
263  this->m_cmdRegOut_OutputPort[port].init();
264 
265 #if FW_OBJECT_NAMES == 1
266  Fw::ObjectName portName;
267  portName.format(
268  "%s_cmdRegOut_OutputPort[%" PRI_PlatformIntType "]",
269  this->m_objName.toChar(),
270  port
271  );
272  this->m_cmdRegOut_OutputPort[port].setObjName(portName.toChar());
273 #endif
274  }
275 
276  // Connect output port cmdResponseOut
277  for (
278  FwIndexType port = 0;
279  port < static_cast<FwIndexType>(this->getNum_cmdResponseOut_OutputPorts());
280  port++
281  ) {
282  this->m_cmdResponseOut_OutputPort[port].init();
283 
284 #if FW_OBJECT_NAMES == 1
285  Fw::ObjectName portName;
286  portName.format(
287  "%s_cmdResponseOut_OutputPort[%" PRI_PlatformIntType "]",
288  this->m_objName.toChar(),
289  port
290  );
291  this->m_cmdResponseOut_OutputPort[port].setObjName(portName.toChar());
292 #endif
293  }
294 
295  // Connect output port logOut
296  for (
297  FwIndexType port = 0;
298  port < static_cast<FwIndexType>(this->getNum_logOut_OutputPorts());
299  port++
300  ) {
301  this->m_logOut_OutputPort[port].init();
302 
303 #if FW_OBJECT_NAMES == 1
304  Fw::ObjectName portName;
305  portName.format(
306  "%s_logOut_OutputPort[%" PRI_PlatformIntType "]",
307  this->m_objName.toChar(),
308  port
309  );
310  this->m_logOut_OutputPort[port].setObjName(portName.toChar());
311 #endif
312  }
313 
314  // Connect output port timeCaller
315  for (
316  FwIndexType port = 0;
317  port < static_cast<FwIndexType>(this->getNum_timeCaller_OutputPorts());
318  port++
319  ) {
320  this->m_timeCaller_OutputPort[port].init();
321 
322 #if FW_OBJECT_NAMES == 1
323  Fw::ObjectName portName;
324  portName.format(
325  "%s_timeCaller_OutputPort[%" PRI_PlatformIntType "]",
326  this->m_objName.toChar(),
327  port
328  );
329  this->m_timeCaller_OutputPort[port].setObjName(portName.toChar());
330 #endif
331  }
332 
333  // Connect output port tlmOut
334  for (
335  FwIndexType port = 0;
336  port < static_cast<FwIndexType>(this->getNum_tlmOut_OutputPorts());
337  port++
338  ) {
339  this->m_tlmOut_OutputPort[port].init();
340 
341 #if FW_OBJECT_NAMES == 1
342  Fw::ObjectName portName;
343  portName.format(
344  "%s_tlmOut_OutputPort[%" PRI_PlatformIntType "]",
345  this->m_objName.toChar(),
346  port
347  );
348  this->m_tlmOut_OutputPort[port].setObjName(portName.toChar());
349 #endif
350  }
351 
352  // Connect output port comCmdOut
353  for (
354  FwIndexType port = 0;
355  port < static_cast<FwIndexType>(this->getNum_comCmdOut_OutputPorts());
356  port++
357  ) {
358  this->m_comCmdOut_OutputPort[port].init();
359 
360 #if FW_OBJECT_NAMES == 1
361  Fw::ObjectName portName;
362  portName.format(
363  "%s_comCmdOut_OutputPort[%" PRI_PlatformIntType "]",
364  this->m_objName.toChar(),
365  port
366  );
367  this->m_comCmdOut_OutputPort[port].setObjName(portName.toChar());
368 #endif
369  }
370 
371  // Connect output port pingOut
372  for (
373  FwIndexType port = 0;
374  port < static_cast<FwIndexType>(this->getNum_pingOut_OutputPorts());
375  port++
376  ) {
377  this->m_pingOut_OutputPort[port].init();
378 
379 #if FW_OBJECT_NAMES == 1
380  Fw::ObjectName portName;
381  portName.format(
382  "%s_pingOut_OutputPort[%" PRI_PlatformIntType "]",
383  this->m_objName.toChar(),
384  port
385  );
386  this->m_pingOut_OutputPort[port].setObjName(portName.toChar());
387 #endif
388  }
389 
390  // Connect output port seqDone
391  for (
392  FwIndexType port = 0;
393  port < static_cast<FwIndexType>(this->getNum_seqDone_OutputPorts());
394  port++
395  ) {
396  this->m_seqDone_OutputPort[port].init();
397 
398 #if FW_OBJECT_NAMES == 1
399  Fw::ObjectName portName;
400  portName.format(
401  "%s_seqDone_OutputPort[%" PRI_PlatformIntType "]",
402  this->m_objName.toChar(),
403  port
404  );
405  this->m_seqDone_OutputPort[port].setObjName(portName.toChar());
406 #endif
407  }
408 
409  // Connect output port seqStartOut
410  for (
411  FwIndexType port = 0;
412  port < static_cast<FwIndexType>(this->getNum_seqStartOut_OutputPorts());
413  port++
414  ) {
415  this->m_seqStartOut_OutputPort[port].init();
416 
417 #if FW_OBJECT_NAMES == 1
418  Fw::ObjectName portName;
419  portName.format(
420  "%s_seqStartOut_OutputPort[%" PRI_PlatformIntType "]",
421  this->m_objName.toChar(),
422  port
423  );
424  this->m_seqStartOut_OutputPort[port].setObjName(portName.toChar());
425 #endif
426  }
427 
428  Os::Queue::Status qStat = this->createQueue(
429  queueDepth,
430  static_cast<FwSizeType>(ComponentIpcSerializableBuffer::SERIALIZATION_SIZE)
431  );
432  FW_ASSERT(
433  Os::Queue::Status::OP_OK == qStat,
434  static_cast<FwAssertArgType>(qStat)
435  );
436  }
437 
438  // ----------------------------------------------------------------------
439  // Getters for special input ports
440  // ----------------------------------------------------------------------
441 
444  {
445  FW_ASSERT(
446  portNum < this->getNum_cmdIn_InputPorts(),
447  static_cast<FwAssertArgType>(portNum)
448  );
449 
450  return &this->m_cmdIn_InputPort[portNum];
451  }
452 
453  // ----------------------------------------------------------------------
454  // Getters for typed input ports
455  // ----------------------------------------------------------------------
456 
459  {
460  FW_ASSERT(
461  portNum < this->getNum_cmdResponseIn_InputPorts(),
462  static_cast<FwAssertArgType>(portNum)
463  );
464 
465  return &this->m_cmdResponseIn_InputPort[portNum];
466  }
467 
470  {
471  FW_ASSERT(
472  portNum < this->getNum_pingIn_InputPorts(),
473  static_cast<FwAssertArgType>(portNum)
474  );
475 
476  return &this->m_pingIn_InputPort[portNum];
477  }
478 
481  {
482  FW_ASSERT(
483  portNum < this->getNum_schedIn_InputPorts(),
484  static_cast<FwAssertArgType>(portNum)
485  );
486 
487  return &this->m_schedIn_InputPort[portNum];
488  }
489 
492  {
493  FW_ASSERT(
494  portNum < this->getNum_seqCancelIn_InputPorts(),
495  static_cast<FwAssertArgType>(portNum)
496  );
497 
498  return &this->m_seqCancelIn_InputPort[portNum];
499  }
500 
503  {
504  FW_ASSERT(
505  portNum < this->getNum_seqRunIn_InputPorts(),
506  static_cast<FwAssertArgType>(portNum)
507  );
508 
509  return &this->m_seqRunIn_InputPort[portNum];
510  }
511 
512  // ----------------------------------------------------------------------
513  // Connect input ports to special output ports
514  // ----------------------------------------------------------------------
515 
516 #if FW_ENABLE_TEXT_LOGGING == 1
517 
518  void CmdSequencerComponentBase ::
519  set_LogText_OutputPort(
520  FwIndexType portNum,
522  )
523  {
524  FW_ASSERT(
525  portNum < this->getNum_LogText_OutputPorts(),
526  static_cast<FwAssertArgType>(portNum)
527  );
528 
529  this->m_LogText_OutputPort[portNum].addCallPort(port);
530  }
531 
532 #endif
533 
536  FwIndexType portNum,
537  Fw::InputCmdRegPort* port
538  )
539  {
540  FW_ASSERT(
541  portNum < this->getNum_cmdRegOut_OutputPorts(),
542  static_cast<FwAssertArgType>(portNum)
543  );
544 
545  this->m_cmdRegOut_OutputPort[portNum].addCallPort(port);
546  }
547 
550  FwIndexType portNum,
552  )
553  {
554  FW_ASSERT(
555  portNum < this->getNum_cmdResponseOut_OutputPorts(),
556  static_cast<FwAssertArgType>(portNum)
557  );
558 
559  this->m_cmdResponseOut_OutputPort[portNum].addCallPort(port);
560  }
561 
564  FwIndexType portNum,
565  Fw::InputLogPort* port
566  )
567  {
568  FW_ASSERT(
569  portNum < this->getNum_logOut_OutputPorts(),
570  static_cast<FwAssertArgType>(portNum)
571  );
572 
573  this->m_logOut_OutputPort[portNum].addCallPort(port);
574  }
575 
578  FwIndexType portNum,
579  Fw::InputTimePort* port
580  )
581  {
582  FW_ASSERT(
583  portNum < this->getNum_timeCaller_OutputPorts(),
584  static_cast<FwAssertArgType>(portNum)
585  );
586 
587  this->m_timeCaller_OutputPort[portNum].addCallPort(port);
588  }
589 
592  FwIndexType portNum,
593  Fw::InputTlmPort* port
594  )
595  {
596  FW_ASSERT(
597  portNum < this->getNum_tlmOut_OutputPorts(),
598  static_cast<FwAssertArgType>(portNum)
599  );
600 
601  this->m_tlmOut_OutputPort[portNum].addCallPort(port);
602  }
603 
604  // ----------------------------------------------------------------------
605  // Connect typed input ports to typed output ports
606  // ----------------------------------------------------------------------
607 
610  FwIndexType portNum,
611  Fw::InputComPort* port
612  )
613  {
614  FW_ASSERT(
615  portNum < this->getNum_comCmdOut_OutputPorts(),
616  static_cast<FwAssertArgType>(portNum)
617  );
618 
619  this->m_comCmdOut_OutputPort[portNum].addCallPort(port);
620  }
621 
624  FwIndexType portNum,
625  Svc::InputPingPort* port
626  )
627  {
628  FW_ASSERT(
629  portNum < this->getNum_pingOut_OutputPorts(),
630  static_cast<FwAssertArgType>(portNum)
631  );
632 
633  this->m_pingOut_OutputPort[portNum].addCallPort(port);
634  }
635 
638  FwIndexType portNum,
640  )
641  {
642  FW_ASSERT(
643  portNum < this->getNum_seqDone_OutputPorts(),
644  static_cast<FwAssertArgType>(portNum)
645  );
646 
647  this->m_seqDone_OutputPort[portNum].addCallPort(port);
648  }
649 
652  FwIndexType portNum,
654  )
655  {
656  FW_ASSERT(
657  portNum < this->getNum_seqStartOut_OutputPorts(),
658  static_cast<FwAssertArgType>(portNum)
659  );
660 
661  this->m_seqStartOut_OutputPort[portNum].addCallPort(port);
662  }
663 
664 #if FW_PORT_SERIALIZATION
665 
666  // ----------------------------------------------------------------------
667  // Connect serial input ports to special output ports
668  // ----------------------------------------------------------------------
669 
670 #if FW_ENABLE_TEXT_LOGGING == 1
671 
672  void CmdSequencerComponentBase ::
673  set_LogText_OutputPort(
674  FwIndexType portNum,
675  Fw::InputSerializePort* port
676  )
677  {
678  FW_ASSERT(
679  portNum < this->getNum_LogText_OutputPorts(),
680  static_cast<FwAssertArgType>(portNum)
681  );
682 
683  this->m_LogText_OutputPort[portNum].registerSerialPort(port);
684  }
685 
686 #endif
687 
690  FwIndexType portNum,
691  Fw::InputSerializePort* port
692  )
693  {
694  FW_ASSERT(
695  portNum < this->getNum_cmdRegOut_OutputPorts(),
696  static_cast<FwAssertArgType>(portNum)
697  );
698 
699  this->m_cmdRegOut_OutputPort[portNum].registerSerialPort(port);
700  }
701 
704  FwIndexType portNum,
705  Fw::InputSerializePort* port
706  )
707  {
708  FW_ASSERT(
709  portNum < this->getNum_cmdResponseOut_OutputPorts(),
710  static_cast<FwAssertArgType>(portNum)
711  );
712 
713  this->m_cmdResponseOut_OutputPort[portNum].registerSerialPort(port);
714  }
715 
718  FwIndexType portNum,
719  Fw::InputSerializePort* port
720  )
721  {
722  FW_ASSERT(
723  portNum < this->getNum_logOut_OutputPorts(),
724  static_cast<FwAssertArgType>(portNum)
725  );
726 
727  this->m_logOut_OutputPort[portNum].registerSerialPort(port);
728  }
729 
732  FwIndexType portNum,
733  Fw::InputSerializePort* port
734  )
735  {
736  FW_ASSERT(
737  portNum < this->getNum_timeCaller_OutputPorts(),
738  static_cast<FwAssertArgType>(portNum)
739  );
740 
741  this->m_timeCaller_OutputPort[portNum].registerSerialPort(port);
742  }
743 
746  FwIndexType portNum,
747  Fw::InputSerializePort* port
748  )
749  {
750  FW_ASSERT(
751  portNum < this->getNum_tlmOut_OutputPorts(),
752  static_cast<FwAssertArgType>(portNum)
753  );
754 
755  this->m_tlmOut_OutputPort[portNum].registerSerialPort(port);
756  }
757 
758 #endif
759 
760 #if FW_PORT_SERIALIZATION
761 
762  // ----------------------------------------------------------------------
763  // Connect serial input ports to typed output ports
764  // ----------------------------------------------------------------------
765 
768  FwIndexType portNum,
769  Fw::InputSerializePort* port
770  )
771  {
772  FW_ASSERT(
773  portNum < this->getNum_comCmdOut_OutputPorts(),
774  static_cast<FwAssertArgType>(portNum)
775  );
776 
777  this->m_comCmdOut_OutputPort[portNum].registerSerialPort(port);
778  }
779 
782  FwIndexType portNum,
783  Fw::InputSerializePort* port
784  )
785  {
786  FW_ASSERT(
787  portNum < this->getNum_pingOut_OutputPorts(),
788  static_cast<FwAssertArgType>(portNum)
789  );
790 
791  this->m_pingOut_OutputPort[portNum].registerSerialPort(port);
792  }
793 
796  FwIndexType portNum,
797  Fw::InputSerializePort* port
798  )
799  {
800  FW_ASSERT(
801  portNum < this->getNum_seqDone_OutputPorts(),
802  static_cast<FwAssertArgType>(portNum)
803  );
804 
805  this->m_seqDone_OutputPort[portNum].registerSerialPort(port);
806  }
807 
810  FwIndexType portNum,
811  Fw::InputSerializePort* port
812  )
813  {
814  FW_ASSERT(
815  portNum < this->getNum_seqStartOut_OutputPorts(),
816  static_cast<FwAssertArgType>(portNum)
817  );
818 
819  this->m_seqStartOut_OutputPort[portNum].registerSerialPort(port);
820  }
821 
822 #endif
823 
824  // ----------------------------------------------------------------------
825  // Command registration
826  // ----------------------------------------------------------------------
827 
829  regCommands()
830  {
831  FW_ASSERT(this->m_cmdRegOut_OutputPort[0].isConnected());
832 
833  this->m_cmdRegOut_OutputPort[0].invoke(
834  this->getIdBase() + OPCODE_CS_RUN
835  );
836 
837  this->m_cmdRegOut_OutputPort[0].invoke(
838  this->getIdBase() + OPCODE_CS_VALIDATE
839  );
840 
841  this->m_cmdRegOut_OutputPort[0].invoke(
842  this->getIdBase() + OPCODE_CS_CANCEL
843  );
844 
845  this->m_cmdRegOut_OutputPort[0].invoke(
846  this->getIdBase() + OPCODE_CS_START
847  );
848 
849  this->m_cmdRegOut_OutputPort[0].invoke(
850  this->getIdBase() + OPCODE_CS_STEP
851  );
852 
853  this->m_cmdRegOut_OutputPort[0].invoke(
854  this->getIdBase() + OPCODE_CS_AUTO
855  );
856 
857  this->m_cmdRegOut_OutputPort[0].invoke(
858  this->getIdBase() + OPCODE_CS_MANUAL
859  );
860 
861  this->m_cmdRegOut_OutputPort[0].invoke(
863  );
864  }
865 
866  // ----------------------------------------------------------------------
867  // Component construction and destruction
868  // ----------------------------------------------------------------------
869 
871  CmdSequencerComponentBase(const char* compName) :
872  Fw::ActiveComponentBase(compName)
873  {
874 
875  }
876 
879  {
880 
881  }
882 
883  // ----------------------------------------------------------------------
884  // Getters for numbers of special input ports
885  // ----------------------------------------------------------------------
886 
889  {
890  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_cmdIn_InputPort));
891  }
892 
893  // ----------------------------------------------------------------------
894  // Getters for numbers of typed input ports
895  // ----------------------------------------------------------------------
896 
899  {
900  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_cmdResponseIn_InputPort));
901  }
902 
905  {
906  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_pingIn_InputPort));
907  }
908 
911  {
912  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_schedIn_InputPort));
913  }
914 
917  {
918  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_seqCancelIn_InputPort));
919  }
920 
923  {
924  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_seqRunIn_InputPort));
925  }
926 
927  // ----------------------------------------------------------------------
928  // Getters for numbers of special output ports
929  // ----------------------------------------------------------------------
930 
931 #if FW_ENABLE_TEXT_LOGGING == 1
932 
933  FwIndexType CmdSequencerComponentBase ::
934  getNum_LogText_OutputPorts() const
935  {
936  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_LogText_OutputPort));
937  }
938 
939 #endif
940 
943  {
944  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_cmdRegOut_OutputPort));
945  }
946 
949  {
950  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_cmdResponseOut_OutputPort));
951  }
952 
955  {
956  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_logOut_OutputPort));
957  }
958 
961  {
962  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_timeCaller_OutputPort));
963  }
964 
967  {
968  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_tlmOut_OutputPort));
969  }
970 
971  // ----------------------------------------------------------------------
972  // Getters for numbers of typed output ports
973  // ----------------------------------------------------------------------
974 
977  {
978  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_comCmdOut_OutputPort));
979  }
980 
983  {
984  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_pingOut_OutputPort));
985  }
986 
989  {
990  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_seqDone_OutputPort));
991  }
992 
995  {
996  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_seqStartOut_OutputPort));
997  }
998 
999  // ----------------------------------------------------------------------
1000  // Connection status queries for special output ports
1001  // ----------------------------------------------------------------------
1002 
1003 #if FW_ENABLE_TEXT_LOGGING == 1
1004 
1005  bool CmdSequencerComponentBase ::
1006  isConnected_LogText_OutputPort(FwIndexType portNum)
1007  {
1008  FW_ASSERT(
1009  portNum < this->getNum_LogText_OutputPorts(),
1010  static_cast<FwAssertArgType>(portNum)
1011  );
1012 
1013  return this->m_LogText_OutputPort[portNum].isConnected();
1014  }
1015 
1016 #endif
1017 
1020  {
1021  FW_ASSERT(
1022  portNum < this->getNum_cmdRegOut_OutputPorts(),
1023  static_cast<FwAssertArgType>(portNum)
1024  );
1025 
1026  return this->m_cmdRegOut_OutputPort[portNum].isConnected();
1027  }
1028 
1031  {
1032  FW_ASSERT(
1033  portNum < this->getNum_cmdResponseOut_OutputPorts(),
1034  static_cast<FwAssertArgType>(portNum)
1035  );
1036 
1037  return this->m_cmdResponseOut_OutputPort[portNum].isConnected();
1038  }
1039 
1042  {
1043  FW_ASSERT(
1044  portNum < this->getNum_logOut_OutputPorts(),
1045  static_cast<FwAssertArgType>(portNum)
1046  );
1047 
1048  return this->m_logOut_OutputPort[portNum].isConnected();
1049  }
1050 
1053  {
1054  FW_ASSERT(
1055  portNum < this->getNum_timeCaller_OutputPorts(),
1056  static_cast<FwAssertArgType>(portNum)
1057  );
1058 
1059  return this->m_timeCaller_OutputPort[portNum].isConnected();
1060  }
1061 
1064  {
1065  FW_ASSERT(
1066  portNum < this->getNum_tlmOut_OutputPorts(),
1067  static_cast<FwAssertArgType>(portNum)
1068  );
1069 
1070  return this->m_tlmOut_OutputPort[portNum].isConnected();
1071  }
1072 
1073  // ----------------------------------------------------------------------
1074  // Connection status queries for typed output ports
1075  // ----------------------------------------------------------------------
1076 
1079  {
1080  FW_ASSERT(
1081  portNum < this->getNum_comCmdOut_OutputPorts(),
1082  static_cast<FwAssertArgType>(portNum)
1083  );
1084 
1085  return this->m_comCmdOut_OutputPort[portNum].isConnected();
1086  }
1087 
1090  {
1091  FW_ASSERT(
1092  portNum < this->getNum_pingOut_OutputPorts(),
1093  static_cast<FwAssertArgType>(portNum)
1094  );
1095 
1096  return this->m_pingOut_OutputPort[portNum].isConnected();
1097  }
1098 
1101  {
1102  FW_ASSERT(
1103  portNum < this->getNum_seqDone_OutputPorts(),
1104  static_cast<FwAssertArgType>(portNum)
1105  );
1106 
1107  return this->m_seqDone_OutputPort[portNum].isConnected();
1108  }
1109 
1112  {
1113  FW_ASSERT(
1114  portNum < this->getNum_seqStartOut_OutputPorts(),
1115  static_cast<FwAssertArgType>(portNum)
1116  );
1117 
1118  return this->m_seqStartOut_OutputPort[portNum].isConnected();
1119  }
1120 
1121  // ----------------------------------------------------------------------
1122  // Port handler base-class functions for typed input ports
1123  //
1124  // Call these functions directly to bypass the corresponding ports
1125  // ----------------------------------------------------------------------
1126 
1129  FwIndexType portNum,
1130  FwOpcodeType opCode,
1131  U32 cmdSeq,
1132  const Fw::CmdResponse& response
1133  )
1134  {
1135  // Make sure port number is valid
1136  FW_ASSERT(
1137  portNum < this->getNum_cmdResponseIn_InputPorts(),
1138  static_cast<FwAssertArgType>(portNum)
1139  );
1140 
1141  // Call pre-message hook
1143  portNum,
1144  opCode,
1145  cmdSeq,
1146  response
1147  );
1148  ComponentIpcSerializableBuffer msg;
1150 
1151  // Serialize message ID
1152  _status = msg.serialize(
1153  static_cast<FwEnumStoreType>(CMDRESPONSEIN_CMDRESPONSE)
1154  );
1155  FW_ASSERT(
1156  _status == Fw::FW_SERIALIZE_OK,
1157  static_cast<FwAssertArgType>(_status)
1158  );
1159 
1160  // Serialize port number
1161  _status = msg.serialize(portNum);
1162  FW_ASSERT(
1163  _status == Fw::FW_SERIALIZE_OK,
1164  static_cast<FwAssertArgType>(_status)
1165  );
1166 
1167  // Serialize argument opCode
1168  _status = msg.serialize(opCode);
1169  FW_ASSERT(
1170  _status == Fw::FW_SERIALIZE_OK,
1171  static_cast<FwAssertArgType>(_status)
1172  );
1173 
1174  // Serialize argument cmdSeq
1175  _status = msg.serialize(cmdSeq);
1176  FW_ASSERT(
1177  _status == Fw::FW_SERIALIZE_OK,
1178  static_cast<FwAssertArgType>(_status)
1179  );
1180 
1181  // Serialize argument response
1182  _status = msg.serialize(response);
1183  FW_ASSERT(
1184  _status == Fw::FW_SERIALIZE_OK,
1185  static_cast<FwAssertArgType>(_status)
1186  );
1187 
1188  // Send message
1190  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1191 
1192  FW_ASSERT(
1193  qStatus == Os::Queue::OP_OK,
1194  static_cast<FwAssertArgType>(qStatus)
1195  );
1196  }
1197 
1200  FwIndexType portNum,
1201  U32 key
1202  )
1203  {
1204  // Make sure port number is valid
1205  FW_ASSERT(
1206  portNum < this->getNum_pingIn_InputPorts(),
1207  static_cast<FwAssertArgType>(portNum)
1208  );
1209 
1210  // Call pre-message hook
1212  portNum,
1213  key
1214  );
1215  ComponentIpcSerializableBuffer msg;
1217 
1218  // Serialize message ID
1219  _status = msg.serialize(
1220  static_cast<FwEnumStoreType>(PINGIN_PING)
1221  );
1222  FW_ASSERT(
1223  _status == Fw::FW_SERIALIZE_OK,
1224  static_cast<FwAssertArgType>(_status)
1225  );
1226 
1227  // Serialize port number
1228  _status = msg.serialize(portNum);
1229  FW_ASSERT(
1230  _status == Fw::FW_SERIALIZE_OK,
1231  static_cast<FwAssertArgType>(_status)
1232  );
1233 
1234  // Serialize argument key
1235  _status = msg.serialize(key);
1236  FW_ASSERT(
1237  _status == Fw::FW_SERIALIZE_OK,
1238  static_cast<FwAssertArgType>(_status)
1239  );
1240 
1241  // Send message
1243  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1244 
1245  FW_ASSERT(
1246  qStatus == Os::Queue::OP_OK,
1247  static_cast<FwAssertArgType>(qStatus)
1248  );
1249  }
1250 
1253  FwIndexType portNum,
1254  U32 context
1255  )
1256  {
1257  // Make sure port number is valid
1258  FW_ASSERT(
1259  portNum < this->getNum_schedIn_InputPorts(),
1260  static_cast<FwAssertArgType>(portNum)
1261  );
1262 
1263  // Call pre-message hook
1265  portNum,
1266  context
1267  );
1268  ComponentIpcSerializableBuffer msg;
1270 
1271  // Serialize message ID
1272  _status = msg.serialize(
1273  static_cast<FwEnumStoreType>(SCHEDIN_SCHED)
1274  );
1275  FW_ASSERT(
1276  _status == Fw::FW_SERIALIZE_OK,
1277  static_cast<FwAssertArgType>(_status)
1278  );
1279 
1280  // Serialize port number
1281  _status = msg.serialize(portNum);
1282  FW_ASSERT(
1283  _status == Fw::FW_SERIALIZE_OK,
1284  static_cast<FwAssertArgType>(_status)
1285  );
1286 
1287  // Serialize argument context
1288  _status = msg.serialize(context);
1289  FW_ASSERT(
1290  _status == Fw::FW_SERIALIZE_OK,
1291  static_cast<FwAssertArgType>(_status)
1292  );
1293 
1294  // Send message
1296  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1297 
1298  FW_ASSERT(
1299  qStatus == Os::Queue::OP_OK,
1300  static_cast<FwAssertArgType>(qStatus)
1301  );
1302  }
1303 
1306  {
1307  // Make sure port number is valid
1308  FW_ASSERT(
1309  portNum < this->getNum_seqCancelIn_InputPorts(),
1310  static_cast<FwAssertArgType>(portNum)
1311  );
1312 
1313  // Call pre-message hook
1314  seqCancelIn_preMsgHook(portNum);
1315  ComponentIpcSerializableBuffer msg;
1317 
1318  // Serialize message ID
1319  _status = msg.serialize(
1320  static_cast<FwEnumStoreType>(SEQCANCELIN_CMDSEQCANCEL)
1321  );
1322  FW_ASSERT(
1323  _status == Fw::FW_SERIALIZE_OK,
1324  static_cast<FwAssertArgType>(_status)
1325  );
1326 
1327  // Serialize port number
1328  _status = msg.serialize(portNum);
1329  FW_ASSERT(
1330  _status == Fw::FW_SERIALIZE_OK,
1331  static_cast<FwAssertArgType>(_status)
1332  );
1333 
1334  // Send message
1336  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1337 
1338  FW_ASSERT(
1339  qStatus == Os::Queue::OP_OK,
1340  static_cast<FwAssertArgType>(qStatus)
1341  );
1342  }
1343 
1346  FwIndexType portNum,
1347  const Fw::StringBase& filename
1348  )
1349  {
1350  // Make sure port number is valid
1351  FW_ASSERT(
1352  portNum < this->getNum_seqRunIn_InputPorts(),
1353  static_cast<FwAssertArgType>(portNum)
1354  );
1355 
1356  // Call pre-message hook
1358  portNum,
1359  filename
1360  );
1361  ComponentIpcSerializableBuffer msg;
1363 
1364  // Serialize message ID
1365  _status = msg.serialize(
1366  static_cast<FwEnumStoreType>(SEQRUNIN_CMDSEQIN)
1367  );
1368  FW_ASSERT(
1369  _status == Fw::FW_SERIALIZE_OK,
1370  static_cast<FwAssertArgType>(_status)
1371  );
1372 
1373  // Serialize port number
1374  _status = msg.serialize(portNum);
1375  FW_ASSERT(
1376  _status == Fw::FW_SERIALIZE_OK,
1377  static_cast<FwAssertArgType>(_status)
1378  );
1379 
1380  // Serialize argument filename
1381  _status = filename.serialize(msg, 240);
1382  FW_ASSERT(
1383  _status == Fw::FW_SERIALIZE_OK,
1384  static_cast<FwAssertArgType>(_status)
1385  );
1386 
1387  // Send message
1389  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1390 
1391  FW_ASSERT(
1392  qStatus == Os::Queue::OP_OK,
1393  static_cast<FwAssertArgType>(qStatus)
1394  );
1395  }
1396 
1397  // ----------------------------------------------------------------------
1398  // Pre-message hooks for typed async input ports
1399  //
1400  // Each of these functions is invoked just before processing a message
1401  // on the corresponding port. By default, they do nothing. You can
1402  // override them to provide specific pre-message behavior.
1403  // ----------------------------------------------------------------------
1404 
1407  FwIndexType portNum,
1408  FwOpcodeType opCode,
1409  U32 cmdSeq,
1410  const Fw::CmdResponse& response
1411  )
1412  {
1413  // Default: no-op
1414  }
1415 
1418  FwIndexType portNum,
1419  U32 key
1420  )
1421  {
1422  // Default: no-op
1423  }
1424 
1427  FwIndexType portNum,
1428  U32 context
1429  )
1430  {
1431  // Default: no-op
1432  }
1433 
1436  {
1437  // Default: no-op
1438  }
1439 
1442  FwIndexType portNum,
1443  const Fw::StringBase& filename
1444  )
1445  {
1446  // Default: no-op
1447  }
1448 
1449  // ----------------------------------------------------------------------
1450  // Invocation functions for typed output ports
1451  // ----------------------------------------------------------------------
1452 
1455  FwIndexType portNum,
1456  Fw::ComBuffer& data,
1457  U32 context
1458  )
1459  {
1460  FW_ASSERT(
1461  portNum < this->getNum_comCmdOut_OutputPorts(),
1462  static_cast<FwAssertArgType>(portNum)
1463  );
1464  this->m_comCmdOut_OutputPort[portNum].invoke(
1465  data,
1466  context
1467  );
1468  }
1469 
1471  pingOut_out(
1472  FwIndexType portNum,
1473  U32 key
1474  )
1475  {
1476  FW_ASSERT(
1477  portNum < this->getNum_pingOut_OutputPorts(),
1478  static_cast<FwAssertArgType>(portNum)
1479  );
1480  this->m_pingOut_OutputPort[portNum].invoke(
1481  key
1482  );
1483  }
1484 
1486  seqDone_out(
1487  FwIndexType portNum,
1488  FwOpcodeType opCode,
1489  U32 cmdSeq,
1490  const Fw::CmdResponse& response
1491  )
1492  {
1493  FW_ASSERT(
1494  portNum < this->getNum_seqDone_OutputPorts(),
1495  static_cast<FwAssertArgType>(portNum)
1496  );
1497  this->m_seqDone_OutputPort[portNum].invoke(
1498  opCode,
1499  cmdSeq,
1500  response
1501  );
1502  }
1503 
1506  FwIndexType portNum,
1507  const Fw::StringBase& filename
1508  )
1509  {
1510  FW_ASSERT(
1511  portNum < this->getNum_seqStartOut_OutputPorts(),
1512  static_cast<FwAssertArgType>(portNum)
1513  );
1514  this->m_seqStartOut_OutputPort[portNum].invoke(
1515  filename
1516  );
1517  }
1518 
1519  // ----------------------------------------------------------------------
1520  // Command response
1521  // ----------------------------------------------------------------------
1522 
1525  FwOpcodeType opCode,
1526  U32 cmdSeq,
1527  Fw::CmdResponse response
1528  )
1529  {
1530  FW_ASSERT(this->m_cmdResponseOut_OutputPort[0].isConnected());
1531  this->m_cmdResponseOut_OutputPort[0].invoke(opCode, cmdSeq, response);
1532  }
1533 
1534  // ----------------------------------------------------------------------
1535  // Command handler base-class functions
1536  //
1537  // Call these functions directly to bypass the command input port
1538  // ----------------------------------------------------------------------
1539 
1542  FwOpcodeType opCode,
1543  U32 cmdSeq,
1544  Fw::CmdArgBuffer& args
1545  )
1546  {
1547  // Call pre-message hook
1548  this->CS_RUN_preMsgHook(opCode,cmdSeq);
1549 
1550  // Defer deserializing arguments to the message dispatcher
1551  // to avoid deserializing and reserializing just for IPC
1552  ComponentIpcSerializableBuffer msg;
1554 
1555  // Serialize for IPC
1556  _status = msg.serialize(static_cast<FwEnumStoreType>(CMD_CS_RUN));
1557  FW_ASSERT (
1558  _status == Fw::FW_SERIALIZE_OK,
1559  static_cast<FwAssertArgType>(_status)
1560  );
1561 
1562  // Fake port number to make message dequeue work
1563  FwIndexType port = 0;
1564 
1565  _status = msg.serialize(port);
1566  FW_ASSERT (
1567  _status == Fw::FW_SERIALIZE_OK,
1568  static_cast<FwAssertArgType>(_status)
1569  );
1570 
1571  _status = msg.serialize(opCode);
1572  FW_ASSERT (
1573  _status == Fw::FW_SERIALIZE_OK,
1574  static_cast<FwAssertArgType>(_status)
1575  );
1576 
1577  _status = msg.serialize(cmdSeq);
1578  FW_ASSERT (
1579  _status == Fw::FW_SERIALIZE_OK,
1580  static_cast<FwAssertArgType>(_status)
1581  );
1582 
1583  _status = msg.serialize(args);
1584  FW_ASSERT (
1585  _status == Fw::FW_SERIALIZE_OK,
1586  static_cast<FwAssertArgType>(_status)
1587  );
1588 
1589  // Send message
1591  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1592 
1593  FW_ASSERT(
1594  qStatus == Os::Queue::OP_OK,
1595  static_cast<FwAssertArgType>(qStatus)
1596  );
1597  }
1598 
1601  FwOpcodeType opCode,
1602  U32 cmdSeq,
1603  Fw::CmdArgBuffer& args
1604  )
1605  {
1606  // Call pre-message hook
1607  this->CS_VALIDATE_preMsgHook(opCode,cmdSeq);
1608 
1609  // Defer deserializing arguments to the message dispatcher
1610  // to avoid deserializing and reserializing just for IPC
1611  ComponentIpcSerializableBuffer msg;
1613 
1614  // Serialize for IPC
1615  _status = msg.serialize(static_cast<FwEnumStoreType>(CMD_CS_VALIDATE));
1616  FW_ASSERT (
1617  _status == Fw::FW_SERIALIZE_OK,
1618  static_cast<FwAssertArgType>(_status)
1619  );
1620 
1621  // Fake port number to make message dequeue work
1622  FwIndexType port = 0;
1623 
1624  _status = msg.serialize(port);
1625  FW_ASSERT (
1626  _status == Fw::FW_SERIALIZE_OK,
1627  static_cast<FwAssertArgType>(_status)
1628  );
1629 
1630  _status = msg.serialize(opCode);
1631  FW_ASSERT (
1632  _status == Fw::FW_SERIALIZE_OK,
1633  static_cast<FwAssertArgType>(_status)
1634  );
1635 
1636  _status = msg.serialize(cmdSeq);
1637  FW_ASSERT (
1638  _status == Fw::FW_SERIALIZE_OK,
1639  static_cast<FwAssertArgType>(_status)
1640  );
1641 
1642  _status = msg.serialize(args);
1643  FW_ASSERT (
1644  _status == Fw::FW_SERIALIZE_OK,
1645  static_cast<FwAssertArgType>(_status)
1646  );
1647 
1648  // Send message
1650  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1651 
1652  FW_ASSERT(
1653  qStatus == Os::Queue::OP_OK,
1654  static_cast<FwAssertArgType>(qStatus)
1655  );
1656  }
1657 
1660  FwOpcodeType opCode,
1661  U32 cmdSeq,
1662  Fw::CmdArgBuffer& args
1663  )
1664  {
1665  // Call pre-message hook
1666  this->CS_CANCEL_preMsgHook(opCode,cmdSeq);
1667 
1668  // Defer deserializing arguments to the message dispatcher
1669  // to avoid deserializing and reserializing just for IPC
1670  ComponentIpcSerializableBuffer msg;
1672 
1673  // Serialize for IPC
1674  _status = msg.serialize(static_cast<FwEnumStoreType>(CMD_CS_CANCEL));
1675  FW_ASSERT (
1676  _status == Fw::FW_SERIALIZE_OK,
1677  static_cast<FwAssertArgType>(_status)
1678  );
1679 
1680  // Fake port number to make message dequeue work
1681  FwIndexType port = 0;
1682 
1683  _status = msg.serialize(port);
1684  FW_ASSERT (
1685  _status == Fw::FW_SERIALIZE_OK,
1686  static_cast<FwAssertArgType>(_status)
1687  );
1688 
1689  _status = msg.serialize(opCode);
1690  FW_ASSERT (
1691  _status == Fw::FW_SERIALIZE_OK,
1692  static_cast<FwAssertArgType>(_status)
1693  );
1694 
1695  _status = msg.serialize(cmdSeq);
1696  FW_ASSERT (
1697  _status == Fw::FW_SERIALIZE_OK,
1698  static_cast<FwAssertArgType>(_status)
1699  );
1700 
1701  _status = msg.serialize(args);
1702  FW_ASSERT (
1703  _status == Fw::FW_SERIALIZE_OK,
1704  static_cast<FwAssertArgType>(_status)
1705  );
1706 
1707  // Send message
1709  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1710 
1711  FW_ASSERT(
1712  qStatus == Os::Queue::OP_OK,
1713  static_cast<FwAssertArgType>(qStatus)
1714  );
1715  }
1716 
1719  FwOpcodeType opCode,
1720  U32 cmdSeq,
1721  Fw::CmdArgBuffer& args
1722  )
1723  {
1724  // Call pre-message hook
1725  this->CS_START_preMsgHook(opCode,cmdSeq);
1726 
1727  // Defer deserializing arguments to the message dispatcher
1728  // to avoid deserializing and reserializing just for IPC
1729  ComponentIpcSerializableBuffer msg;
1731 
1732  // Serialize for IPC
1733  _status = msg.serialize(static_cast<FwEnumStoreType>(CMD_CS_START));
1734  FW_ASSERT (
1735  _status == Fw::FW_SERIALIZE_OK,
1736  static_cast<FwAssertArgType>(_status)
1737  );
1738 
1739  // Fake port number to make message dequeue work
1740  FwIndexType port = 0;
1741 
1742  _status = msg.serialize(port);
1743  FW_ASSERT (
1744  _status == Fw::FW_SERIALIZE_OK,
1745  static_cast<FwAssertArgType>(_status)
1746  );
1747 
1748  _status = msg.serialize(opCode);
1749  FW_ASSERT (
1750  _status == Fw::FW_SERIALIZE_OK,
1751  static_cast<FwAssertArgType>(_status)
1752  );
1753 
1754  _status = msg.serialize(cmdSeq);
1755  FW_ASSERT (
1756  _status == Fw::FW_SERIALIZE_OK,
1757  static_cast<FwAssertArgType>(_status)
1758  );
1759 
1760  _status = msg.serialize(args);
1761  FW_ASSERT (
1762  _status == Fw::FW_SERIALIZE_OK,
1763  static_cast<FwAssertArgType>(_status)
1764  );
1765 
1766  // Send message
1768  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1769 
1770  FW_ASSERT(
1771  qStatus == Os::Queue::OP_OK,
1772  static_cast<FwAssertArgType>(qStatus)
1773  );
1774  }
1775 
1778  FwOpcodeType opCode,
1779  U32 cmdSeq,
1780  Fw::CmdArgBuffer& args
1781  )
1782  {
1783  // Call pre-message hook
1784  this->CS_STEP_preMsgHook(opCode,cmdSeq);
1785 
1786  // Defer deserializing arguments to the message dispatcher
1787  // to avoid deserializing and reserializing just for IPC
1788  ComponentIpcSerializableBuffer msg;
1790 
1791  // Serialize for IPC
1792  _status = msg.serialize(static_cast<FwEnumStoreType>(CMD_CS_STEP));
1793  FW_ASSERT (
1794  _status == Fw::FW_SERIALIZE_OK,
1795  static_cast<FwAssertArgType>(_status)
1796  );
1797 
1798  // Fake port number to make message dequeue work
1799  FwIndexType port = 0;
1800 
1801  _status = msg.serialize(port);
1802  FW_ASSERT (
1803  _status == Fw::FW_SERIALIZE_OK,
1804  static_cast<FwAssertArgType>(_status)
1805  );
1806 
1807  _status = msg.serialize(opCode);
1808  FW_ASSERT (
1809  _status == Fw::FW_SERIALIZE_OK,
1810  static_cast<FwAssertArgType>(_status)
1811  );
1812 
1813  _status = msg.serialize(cmdSeq);
1814  FW_ASSERT (
1815  _status == Fw::FW_SERIALIZE_OK,
1816  static_cast<FwAssertArgType>(_status)
1817  );
1818 
1819  _status = msg.serialize(args);
1820  FW_ASSERT (
1821  _status == Fw::FW_SERIALIZE_OK,
1822  static_cast<FwAssertArgType>(_status)
1823  );
1824 
1825  // Send message
1827  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1828 
1829  FW_ASSERT(
1830  qStatus == Os::Queue::OP_OK,
1831  static_cast<FwAssertArgType>(qStatus)
1832  );
1833  }
1834 
1837  FwOpcodeType opCode,
1838  U32 cmdSeq,
1839  Fw::CmdArgBuffer& args
1840  )
1841  {
1842  // Call pre-message hook
1843  this->CS_AUTO_preMsgHook(opCode,cmdSeq);
1844 
1845  // Defer deserializing arguments to the message dispatcher
1846  // to avoid deserializing and reserializing just for IPC
1847  ComponentIpcSerializableBuffer msg;
1849 
1850  // Serialize for IPC
1851  _status = msg.serialize(static_cast<FwEnumStoreType>(CMD_CS_AUTO));
1852  FW_ASSERT (
1853  _status == Fw::FW_SERIALIZE_OK,
1854  static_cast<FwAssertArgType>(_status)
1855  );
1856 
1857  // Fake port number to make message dequeue work
1858  FwIndexType port = 0;
1859 
1860  _status = msg.serialize(port);
1861  FW_ASSERT (
1862  _status == Fw::FW_SERIALIZE_OK,
1863  static_cast<FwAssertArgType>(_status)
1864  );
1865 
1866  _status = msg.serialize(opCode);
1867  FW_ASSERT (
1868  _status == Fw::FW_SERIALIZE_OK,
1869  static_cast<FwAssertArgType>(_status)
1870  );
1871 
1872  _status = msg.serialize(cmdSeq);
1873  FW_ASSERT (
1874  _status == Fw::FW_SERIALIZE_OK,
1875  static_cast<FwAssertArgType>(_status)
1876  );
1877 
1878  _status = msg.serialize(args);
1879  FW_ASSERT (
1880  _status == Fw::FW_SERIALIZE_OK,
1881  static_cast<FwAssertArgType>(_status)
1882  );
1883 
1884  // Send message
1886  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1887 
1888  FW_ASSERT(
1889  qStatus == Os::Queue::OP_OK,
1890  static_cast<FwAssertArgType>(qStatus)
1891  );
1892  }
1893 
1896  FwOpcodeType opCode,
1897  U32 cmdSeq,
1898  Fw::CmdArgBuffer& args
1899  )
1900  {
1901  // Call pre-message hook
1902  this->CS_MANUAL_preMsgHook(opCode,cmdSeq);
1903 
1904  // Defer deserializing arguments to the message dispatcher
1905  // to avoid deserializing and reserializing just for IPC
1906  ComponentIpcSerializableBuffer msg;
1908 
1909  // Serialize for IPC
1910  _status = msg.serialize(static_cast<FwEnumStoreType>(CMD_CS_MANUAL));
1911  FW_ASSERT (
1912  _status == Fw::FW_SERIALIZE_OK,
1913  static_cast<FwAssertArgType>(_status)
1914  );
1915 
1916  // Fake port number to make message dequeue work
1917  FwIndexType port = 0;
1918 
1919  _status = msg.serialize(port);
1920  FW_ASSERT (
1921  _status == Fw::FW_SERIALIZE_OK,
1922  static_cast<FwAssertArgType>(_status)
1923  );
1924 
1925  _status = msg.serialize(opCode);
1926  FW_ASSERT (
1927  _status == Fw::FW_SERIALIZE_OK,
1928  static_cast<FwAssertArgType>(_status)
1929  );
1930 
1931  _status = msg.serialize(cmdSeq);
1932  FW_ASSERT (
1933  _status == Fw::FW_SERIALIZE_OK,
1934  static_cast<FwAssertArgType>(_status)
1935  );
1936 
1937  _status = msg.serialize(args);
1938  FW_ASSERT (
1939  _status == Fw::FW_SERIALIZE_OK,
1940  static_cast<FwAssertArgType>(_status)
1941  );
1942 
1943  // Send message
1945  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
1946 
1947  FW_ASSERT(
1948  qStatus == Os::Queue::OP_OK,
1949  static_cast<FwAssertArgType>(qStatus)
1950  );
1951  }
1952 
1955  FwOpcodeType opCode,
1956  U32 cmdSeq,
1957  Fw::CmdArgBuffer& args
1958  )
1959  {
1960  // Call pre-message hook
1961  this->CS_JOIN_WAIT_preMsgHook(opCode,cmdSeq);
1962 
1963  // Defer deserializing arguments to the message dispatcher
1964  // to avoid deserializing and reserializing just for IPC
1965  ComponentIpcSerializableBuffer msg;
1967 
1968  // Serialize for IPC
1969  _status = msg.serialize(static_cast<FwEnumStoreType>(CMD_CS_JOIN_WAIT));
1970  FW_ASSERT (
1971  _status == Fw::FW_SERIALIZE_OK,
1972  static_cast<FwAssertArgType>(_status)
1973  );
1974 
1975  // Fake port number to make message dequeue work
1976  FwIndexType port = 0;
1977 
1978  _status = msg.serialize(port);
1979  FW_ASSERT (
1980  _status == Fw::FW_SERIALIZE_OK,
1981  static_cast<FwAssertArgType>(_status)
1982  );
1983 
1984  _status = msg.serialize(opCode);
1985  FW_ASSERT (
1986  _status == Fw::FW_SERIALIZE_OK,
1987  static_cast<FwAssertArgType>(_status)
1988  );
1989 
1990  _status = msg.serialize(cmdSeq);
1991  FW_ASSERT (
1992  _status == Fw::FW_SERIALIZE_OK,
1993  static_cast<FwAssertArgType>(_status)
1994  );
1995 
1996  _status = msg.serialize(args);
1997  FW_ASSERT (
1998  _status == Fw::FW_SERIALIZE_OK,
1999  static_cast<FwAssertArgType>(_status)
2000  );
2001 
2002  // Send message
2004  Os::Queue::Status qStatus = this->m_queue.send(msg, 0, _block);
2005 
2006  FW_ASSERT(
2007  qStatus == Os::Queue::OP_OK,
2008  static_cast<FwAssertArgType>(qStatus)
2009  );
2010  }
2011 
2012  // ----------------------------------------------------------------------
2013  // Pre-message hooks for async commands
2014  //
2015  // Each of these functions is invoked just before processing the
2016  // corresponding command. By default they do nothing. You can
2017  // override them to provide specific pre-command behavior.
2018  // ----------------------------------------------------------------------
2019 
2022  FwOpcodeType opCode,
2023  U32 cmdSeq
2024  )
2025  {
2026  // Defaults to no-op; can be overridden
2027  (void) opCode;
2028  (void) cmdSeq;
2029  }
2030 
2033  FwOpcodeType opCode,
2034  U32 cmdSeq
2035  )
2036  {
2037  // Defaults to no-op; can be overridden
2038  (void) opCode;
2039  (void) cmdSeq;
2040  }
2041 
2044  FwOpcodeType opCode,
2045  U32 cmdSeq
2046  )
2047  {
2048  // Defaults to no-op; can be overridden
2049  (void) opCode;
2050  (void) cmdSeq;
2051  }
2052 
2055  FwOpcodeType opCode,
2056  U32 cmdSeq
2057  )
2058  {
2059  // Defaults to no-op; can be overridden
2060  (void) opCode;
2061  (void) cmdSeq;
2062  }
2063 
2066  FwOpcodeType opCode,
2067  U32 cmdSeq
2068  )
2069  {
2070  // Defaults to no-op; can be overridden
2071  (void) opCode;
2072  (void) cmdSeq;
2073  }
2074 
2077  FwOpcodeType opCode,
2078  U32 cmdSeq
2079  )
2080  {
2081  // Defaults to no-op; can be overridden
2082  (void) opCode;
2083  (void) cmdSeq;
2084  }
2085 
2088  FwOpcodeType opCode,
2089  U32 cmdSeq
2090  )
2091  {
2092  // Defaults to no-op; can be overridden
2093  (void) opCode;
2094  (void) cmdSeq;
2095  }
2096 
2099  FwOpcodeType opCode,
2100  U32 cmdSeq
2101  )
2102  {
2103  // Defaults to no-op; can be overridden
2104  (void) opCode;
2105  (void) cmdSeq;
2106  }
2107 
2108  // ----------------------------------------------------------------------
2109  // Event logging functions
2110  // ----------------------------------------------------------------------
2111 
2114  {
2115  // Get the time
2116  Fw::Time _logTime;
2117  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2118  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2119  }
2120 
2121  FwEventIdType _id = static_cast<FwEventIdType>(0);
2122 
2123  _id = this->getIdBase() + EVENTID_CS_SEQUENCELOADED;
2124 
2125  // Emit the event on the log port
2126  if (this->m_logOut_OutputPort[0].isConnected()) {
2127  Fw::LogBuffer _logBuff;
2129 
2130 #if FW_AMPCS_COMPATIBLE
2131  // Serialize the number of arguments
2132  _status = _logBuff.serialize(static_cast<U8>(1));
2133  FW_ASSERT(
2134  _status == Fw::FW_SERIALIZE_OK,
2135  static_cast<FwAssertArgType>(_status)
2136  );
2137 #endif
2138 
2139  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2140  FW_ASSERT(
2141  _status == Fw::FW_SERIALIZE_OK,
2142  static_cast<FwAssertArgType>(_status)
2143  );
2144 
2145  this->m_logOut_OutputPort[0].invoke(
2146  _id,
2147  _logTime,
2149  _logBuff
2150  );
2151  }
2152 
2153  // Emit the event on the text log port
2154 #if FW_ENABLE_TEXT_LOGGING
2155  if (this->m_LogText_OutputPort[0].isConnected()) {
2156 #if FW_OBJECT_NAMES == 1
2157  const char* _formatString =
2158  "(%s) %s: Loaded sequence %s";
2159 #else
2160  const char* _formatString =
2161  "%s: Loaded sequence %s";
2162 #endif
2163 
2164  Fw::TextLogString _logString;
2165  _logString.format(
2166  _formatString,
2167 #if FW_OBJECT_NAMES == 1
2168  this->m_objName.toChar(),
2169 #endif
2170  "CS_SequenceLoaded ",
2171  fileName.toChar()
2172  );
2173 
2174  this->m_LogText_OutputPort[0].invoke(
2175  _id,
2176  _logTime,
2178  _logString
2179  );
2180  }
2181 #endif
2182  }
2183 
2186  {
2187  // Get the time
2188  Fw::Time _logTime;
2189  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2190  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2191  }
2192 
2193  FwEventIdType _id = static_cast<FwEventIdType>(0);
2194 
2195  _id = this->getIdBase() + EVENTID_CS_SEQUENCECANCELED;
2196 
2197  // Emit the event on the log port
2198  if (this->m_logOut_OutputPort[0].isConnected()) {
2199  Fw::LogBuffer _logBuff;
2201 
2202 #if FW_AMPCS_COMPATIBLE
2203  // Serialize the number of arguments
2204  _status = _logBuff.serialize(static_cast<U8>(1));
2205  FW_ASSERT(
2206  _status == Fw::FW_SERIALIZE_OK,
2207  static_cast<FwAssertArgType>(_status)
2208  );
2209 #endif
2210 
2211  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2212  FW_ASSERT(
2213  _status == Fw::FW_SERIALIZE_OK,
2214  static_cast<FwAssertArgType>(_status)
2215  );
2216 
2217  this->m_logOut_OutputPort[0].invoke(
2218  _id,
2219  _logTime,
2221  _logBuff
2222  );
2223  }
2224 
2225  // Emit the event on the text log port
2226 #if FW_ENABLE_TEXT_LOGGING
2227  if (this->m_LogText_OutputPort[0].isConnected()) {
2228 #if FW_OBJECT_NAMES == 1
2229  const char* _formatString =
2230  "(%s) %s: Sequence file %s canceled";
2231 #else
2232  const char* _formatString =
2233  "%s: Sequence file %s canceled";
2234 #endif
2235 
2236  Fw::TextLogString _logString;
2237  _logString.format(
2238  _formatString,
2239 #if FW_OBJECT_NAMES == 1
2240  this->m_objName.toChar(),
2241 #endif
2242  "CS_SequenceCanceled ",
2243  fileName.toChar()
2244  );
2245 
2246  this->m_LogText_OutputPort[0].invoke(
2247  _id,
2248  _logTime,
2250  _logString
2251  );
2252  }
2253 #endif
2254  }
2255 
2258  {
2259  // Get the time
2260  Fw::Time _logTime;
2261  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2262  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2263  }
2264 
2265  FwEventIdType _id = static_cast<FwEventIdType>(0);
2266 
2267  _id = this->getIdBase() + EVENTID_CS_FILEREADERROR;
2268 
2269  // Emit the event on the log port
2270  if (this->m_logOut_OutputPort[0].isConnected()) {
2271  Fw::LogBuffer _logBuff;
2273 
2274 #if FW_AMPCS_COMPATIBLE
2275  // Serialize the number of arguments
2276  _status = _logBuff.serialize(static_cast<U8>(1));
2277  FW_ASSERT(
2278  _status == Fw::FW_SERIALIZE_OK,
2279  static_cast<FwAssertArgType>(_status)
2280  );
2281 #endif
2282 
2283  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2284  FW_ASSERT(
2285  _status == Fw::FW_SERIALIZE_OK,
2286  static_cast<FwAssertArgType>(_status)
2287  );
2288 
2289  this->m_logOut_OutputPort[0].invoke(
2290  _id,
2291  _logTime,
2293  _logBuff
2294  );
2295  }
2296 
2297  // Emit the event on the text log port
2298 #if FW_ENABLE_TEXT_LOGGING
2299  if (this->m_LogText_OutputPort[0].isConnected()) {
2300 #if FW_OBJECT_NAMES == 1
2301  const char* _formatString =
2302  "(%s) %s: Error reading sequence file %s";
2303 #else
2304  const char* _formatString =
2305  "%s: Error reading sequence file %s";
2306 #endif
2307 
2308  Fw::TextLogString _logString;
2309  _logString.format(
2310  _formatString,
2311 #if FW_OBJECT_NAMES == 1
2312  this->m_objName.toChar(),
2313 #endif
2314  "CS_FileReadError ",
2315  fileName.toChar()
2316  );
2317 
2318  this->m_LogText_OutputPort[0].invoke(
2319  _id,
2320  _logTime,
2322  _logString
2323  );
2324  }
2325 #endif
2326  }
2327 
2330  const Fw::StringBase& fileName,
2332  I32 error
2333  )
2334  {
2335  // Get the time
2336  Fw::Time _logTime;
2337  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2338  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2339  }
2340 
2341  FwEventIdType _id = static_cast<FwEventIdType>(0);
2342 
2343  _id = this->getIdBase() + EVENTID_CS_FILEINVALID;
2344 
2345  // Emit the event on the log port
2346  if (this->m_logOut_OutputPort[0].isConnected()) {
2347  Fw::LogBuffer _logBuff;
2349 
2350 #if FW_AMPCS_COMPATIBLE
2351  // Serialize the number of arguments
2352  _status = _logBuff.serialize(static_cast<U8>(3));
2353  FW_ASSERT(
2354  _status == Fw::FW_SERIALIZE_OK,
2355  static_cast<FwAssertArgType>(_status)
2356  );
2357 #endif
2358 
2359  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2360  FW_ASSERT(
2361  _status == Fw::FW_SERIALIZE_OK,
2362  static_cast<FwAssertArgType>(_status)
2363  );
2364 
2365 #if FW_AMPCS_COMPATIBLE
2366  // Serialize the argument size
2367  _status = _logBuff.serialize(
2369  );
2370  FW_ASSERT(
2371  _status == Fw::FW_SERIALIZE_OK,
2372  static_cast<FwAssertArgType>(_status)
2373  );
2374 #endif
2375  _status = _logBuff.serialize(stage);
2376  FW_ASSERT(
2377  _status == Fw::FW_SERIALIZE_OK,
2378  static_cast<FwAssertArgType>(_status)
2379  );
2380 
2381 #if FW_AMPCS_COMPATIBLE
2382  // Serialize the argument size
2383  _status = _logBuff.serialize(
2384  static_cast<U8>(sizeof(I32))
2385  );
2386  FW_ASSERT(
2387  _status == Fw::FW_SERIALIZE_OK,
2388  static_cast<FwAssertArgType>(_status)
2389  );
2390 #endif
2391  _status = _logBuff.serialize(error);
2392  FW_ASSERT(
2393  _status == Fw::FW_SERIALIZE_OK,
2394  static_cast<FwAssertArgType>(_status)
2395  );
2396 
2397  this->m_logOut_OutputPort[0].invoke(
2398  _id,
2399  _logTime,
2401  _logBuff
2402  );
2403  }
2404 
2405  // Emit the event on the text log port
2406 #if FW_ENABLE_TEXT_LOGGING
2407  if (this->m_LogText_OutputPort[0].isConnected()) {
2408 #if FW_OBJECT_NAMES == 1
2409  const char* _formatString =
2410  "(%s) %s: Sequence file %s invalid. Stage: %s Error: %" PRIi32 "";
2411 #else
2412  const char* _formatString =
2413  "%s: Sequence file %s invalid. Stage: %s Error: %" PRIi32 "";
2414 #endif
2415 
2416  Fw::String stageStr;
2417  stage.toString(stageStr);
2418 
2419  Fw::TextLogString _logString;
2420  _logString.format(
2421  _formatString,
2422 #if FW_OBJECT_NAMES == 1
2423  this->m_objName.toChar(),
2424 #endif
2425  "CS_FileInvalid ",
2426  fileName.toChar(),
2427  stageStr.toChar(),
2428  error
2429  );
2430 
2431  this->m_LogText_OutputPort[0].invoke(
2432  _id,
2433  _logTime,
2435  _logString
2436  );
2437  }
2438 #endif
2439  }
2440 
2443  const Fw::StringBase& fileName,
2444  U32 recordNumber,
2445  I32 error
2446  )
2447  {
2448  // Get the time
2449  Fw::Time _logTime;
2450  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2451  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2452  }
2453 
2454  FwEventIdType _id = static_cast<FwEventIdType>(0);
2455 
2456  _id = this->getIdBase() + EVENTID_CS_RECORDINVALID;
2457 
2458  // Emit the event on the log port
2459  if (this->m_logOut_OutputPort[0].isConnected()) {
2460  Fw::LogBuffer _logBuff;
2462 
2463 #if FW_AMPCS_COMPATIBLE
2464  // Serialize the number of arguments
2465  _status = _logBuff.serialize(static_cast<U8>(3));
2466  FW_ASSERT(
2467  _status == Fw::FW_SERIALIZE_OK,
2468  static_cast<FwAssertArgType>(_status)
2469  );
2470 #endif
2471 
2472  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2473  FW_ASSERT(
2474  _status == Fw::FW_SERIALIZE_OK,
2475  static_cast<FwAssertArgType>(_status)
2476  );
2477 
2478 #if FW_AMPCS_COMPATIBLE
2479  // Serialize the argument size
2480  _status = _logBuff.serialize(
2481  static_cast<U8>(sizeof(U32))
2482  );
2483  FW_ASSERT(
2484  _status == Fw::FW_SERIALIZE_OK,
2485  static_cast<FwAssertArgType>(_status)
2486  );
2487 #endif
2488  _status = _logBuff.serialize(recordNumber);
2489  FW_ASSERT(
2490  _status == Fw::FW_SERIALIZE_OK,
2491  static_cast<FwAssertArgType>(_status)
2492  );
2493 
2494 #if FW_AMPCS_COMPATIBLE
2495  // Serialize the argument size
2496  _status = _logBuff.serialize(
2497  static_cast<U8>(sizeof(I32))
2498  );
2499  FW_ASSERT(
2500  _status == Fw::FW_SERIALIZE_OK,
2501  static_cast<FwAssertArgType>(_status)
2502  );
2503 #endif
2504  _status = _logBuff.serialize(error);
2505  FW_ASSERT(
2506  _status == Fw::FW_SERIALIZE_OK,
2507  static_cast<FwAssertArgType>(_status)
2508  );
2509 
2510  this->m_logOut_OutputPort[0].invoke(
2511  _id,
2512  _logTime,
2514  _logBuff
2515  );
2516  }
2517 
2518  // Emit the event on the text log port
2519 #if FW_ENABLE_TEXT_LOGGING
2520  if (this->m_LogText_OutputPort[0].isConnected()) {
2521 #if FW_OBJECT_NAMES == 1
2522  const char* _formatString =
2523  "(%s) %s: Sequence file %s: Record %" PRIu32 " invalid. Err: %" PRIi32 "";
2524 #else
2525  const char* _formatString =
2526  "%s: Sequence file %s: Record %" PRIu32 " invalid. Err: %" PRIi32 "";
2527 #endif
2528 
2529  Fw::TextLogString _logString;
2530  _logString.format(
2531  _formatString,
2532 #if FW_OBJECT_NAMES == 1
2533  this->m_objName.toChar(),
2534 #endif
2535  "CS_RecordInvalid ",
2536  fileName.toChar(),
2537  recordNumber,
2538  error
2539  );
2540 
2541  this->m_LogText_OutputPort[0].invoke(
2542  _id,
2543  _logTime,
2545  _logString
2546  );
2547  }
2548 #endif
2549  }
2550 
2553  const Fw::StringBase& fileName,
2554  U32 size
2555  )
2556  {
2557  // Get the time
2558  Fw::Time _logTime;
2559  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2560  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2561  }
2562 
2563  FwEventIdType _id = static_cast<FwEventIdType>(0);
2564 
2565  _id = this->getIdBase() + EVENTID_CS_FILESIZEERROR;
2566 
2567  // Emit the event on the log port
2568  if (this->m_logOut_OutputPort[0].isConnected()) {
2569  Fw::LogBuffer _logBuff;
2571 
2572 #if FW_AMPCS_COMPATIBLE
2573  // Serialize the number of arguments
2574  _status = _logBuff.serialize(static_cast<U8>(2));
2575  FW_ASSERT(
2576  _status == Fw::FW_SERIALIZE_OK,
2577  static_cast<FwAssertArgType>(_status)
2578  );
2579 #endif
2580 
2581  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2582  FW_ASSERT(
2583  _status == Fw::FW_SERIALIZE_OK,
2584  static_cast<FwAssertArgType>(_status)
2585  );
2586 
2587 #if FW_AMPCS_COMPATIBLE
2588  // Serialize the argument size
2589  _status = _logBuff.serialize(
2590  static_cast<U8>(sizeof(U32))
2591  );
2592  FW_ASSERT(
2593  _status == Fw::FW_SERIALIZE_OK,
2594  static_cast<FwAssertArgType>(_status)
2595  );
2596 #endif
2597  _status = _logBuff.serialize(size);
2598  FW_ASSERT(
2599  _status == Fw::FW_SERIALIZE_OK,
2600  static_cast<FwAssertArgType>(_status)
2601  );
2602 
2603  this->m_logOut_OutputPort[0].invoke(
2604  _id,
2605  _logTime,
2607  _logBuff
2608  );
2609  }
2610 
2611  // Emit the event on the text log port
2612 #if FW_ENABLE_TEXT_LOGGING
2613  if (this->m_LogText_OutputPort[0].isConnected()) {
2614 #if FW_OBJECT_NAMES == 1
2615  const char* _formatString =
2616  "(%s) %s: Sequence file %s too large. Size: %" PRIu32 "";
2617 #else
2618  const char* _formatString =
2619  "%s: Sequence file %s too large. Size: %" PRIu32 "";
2620 #endif
2621 
2622  Fw::TextLogString _logString;
2623  _logString.format(
2624  _formatString,
2625 #if FW_OBJECT_NAMES == 1
2626  this->m_objName.toChar(),
2627 #endif
2628  "CS_FileSizeError ",
2629  fileName.toChar(),
2630  size
2631  );
2632 
2633  this->m_LogText_OutputPort[0].invoke(
2634  _id,
2635  _logTime,
2637  _logString
2638  );
2639  }
2640 #endif
2641  }
2642 
2645  {
2646  // Get the time
2647  Fw::Time _logTime;
2648  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2649  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2650  }
2651 
2652  FwEventIdType _id = static_cast<FwEventIdType>(0);
2653 
2654  _id = this->getIdBase() + EVENTID_CS_FILENOTFOUND;
2655 
2656  // Emit the event on the log port
2657  if (this->m_logOut_OutputPort[0].isConnected()) {
2658  Fw::LogBuffer _logBuff;
2660 
2661 #if FW_AMPCS_COMPATIBLE
2662  // Serialize the number of arguments
2663  _status = _logBuff.serialize(static_cast<U8>(1));
2664  FW_ASSERT(
2665  _status == Fw::FW_SERIALIZE_OK,
2666  static_cast<FwAssertArgType>(_status)
2667  );
2668 #endif
2669 
2670  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2671  FW_ASSERT(
2672  _status == Fw::FW_SERIALIZE_OK,
2673  static_cast<FwAssertArgType>(_status)
2674  );
2675 
2676  this->m_logOut_OutputPort[0].invoke(
2677  _id,
2678  _logTime,
2680  _logBuff
2681  );
2682  }
2683 
2684  // Emit the event on the text log port
2685 #if FW_ENABLE_TEXT_LOGGING
2686  if (this->m_LogText_OutputPort[0].isConnected()) {
2687 #if FW_OBJECT_NAMES == 1
2688  const char* _formatString =
2689  "(%s) %s: Sequence file %s not found.";
2690 #else
2691  const char* _formatString =
2692  "%s: Sequence file %s not found.";
2693 #endif
2694 
2695  Fw::TextLogString _logString;
2696  _logString.format(
2697  _formatString,
2698 #if FW_OBJECT_NAMES == 1
2699  this->m_objName.toChar(),
2700 #endif
2701  "CS_FileNotFound ",
2702  fileName.toChar()
2703  );
2704 
2705  this->m_LogText_OutputPort[0].invoke(
2706  _id,
2707  _logTime,
2709  _logString
2710  );
2711  }
2712 #endif
2713  }
2714 
2717  const Fw::StringBase& fileName,
2718  U32 storedCRC,
2719  U32 computedCRC
2720  )
2721  {
2722  // Get the time
2723  Fw::Time _logTime;
2724  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2725  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2726  }
2727 
2728  FwEventIdType _id = static_cast<FwEventIdType>(0);
2729 
2730  _id = this->getIdBase() + EVENTID_CS_FILECRCFAILURE;
2731 
2732  // Emit the event on the log port
2733  if (this->m_logOut_OutputPort[0].isConnected()) {
2734  Fw::LogBuffer _logBuff;
2736 
2737 #if FW_AMPCS_COMPATIBLE
2738  // Serialize the number of arguments
2739  _status = _logBuff.serialize(static_cast<U8>(3));
2740  FW_ASSERT(
2741  _status == Fw::FW_SERIALIZE_OK,
2742  static_cast<FwAssertArgType>(_status)
2743  );
2744 #endif
2745 
2746  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2747  FW_ASSERT(
2748  _status == Fw::FW_SERIALIZE_OK,
2749  static_cast<FwAssertArgType>(_status)
2750  );
2751 
2752 #if FW_AMPCS_COMPATIBLE
2753  // Serialize the argument size
2754  _status = _logBuff.serialize(
2755  static_cast<U8>(sizeof(U32))
2756  );
2757  FW_ASSERT(
2758  _status == Fw::FW_SERIALIZE_OK,
2759  static_cast<FwAssertArgType>(_status)
2760  );
2761 #endif
2762  _status = _logBuff.serialize(storedCRC);
2763  FW_ASSERT(
2764  _status == Fw::FW_SERIALIZE_OK,
2765  static_cast<FwAssertArgType>(_status)
2766  );
2767 
2768 #if FW_AMPCS_COMPATIBLE
2769  // Serialize the argument size
2770  _status = _logBuff.serialize(
2771  static_cast<U8>(sizeof(U32))
2772  );
2773  FW_ASSERT(
2774  _status == Fw::FW_SERIALIZE_OK,
2775  static_cast<FwAssertArgType>(_status)
2776  );
2777 #endif
2778  _status = _logBuff.serialize(computedCRC);
2779  FW_ASSERT(
2780  _status == Fw::FW_SERIALIZE_OK,
2781  static_cast<FwAssertArgType>(_status)
2782  );
2783 
2784  this->m_logOut_OutputPort[0].invoke(
2785  _id,
2786  _logTime,
2788  _logBuff
2789  );
2790  }
2791 
2792  // Emit the event on the text log port
2793 #if FW_ENABLE_TEXT_LOGGING
2794  if (this->m_LogText_OutputPort[0].isConnected()) {
2795 #if FW_OBJECT_NAMES == 1
2796  const char* _formatString =
2797  "(%s) %s: Sequence file %s had invalid CRC. Stored 0x%" PRIx32 ", Computed 0x%" PRIx32 ".";
2798 #else
2799  const char* _formatString =
2800  "%s: Sequence file %s had invalid CRC. Stored 0x%" PRIx32 ", Computed 0x%" PRIx32 ".";
2801 #endif
2802 
2803  Fw::TextLogString _logString;
2804  _logString.format(
2805  _formatString,
2806 #if FW_OBJECT_NAMES == 1
2807  this->m_objName.toChar(),
2808 #endif
2809  "CS_FileCrcFailure ",
2810  fileName.toChar(),
2811  storedCRC,
2812  computedCRC
2813  );
2814 
2815  this->m_LogText_OutputPort[0].invoke(
2816  _id,
2817  _logTime,
2819  _logString
2820  );
2821  }
2822 #endif
2823  }
2824 
2827  const Fw::StringBase& fileName,
2828  U32 recordNumber,
2829  U32 opCode
2830  )
2831  {
2832  // Get the time
2833  Fw::Time _logTime;
2834  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2835  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2836  }
2837 
2838  FwEventIdType _id = static_cast<FwEventIdType>(0);
2839 
2840  _id = this->getIdBase() + EVENTID_CS_COMMANDCOMPLETE;
2841 
2842  // Emit the event on the log port
2843  if (this->m_logOut_OutputPort[0].isConnected()) {
2844  Fw::LogBuffer _logBuff;
2846 
2847 #if FW_AMPCS_COMPATIBLE
2848  // Serialize the number of arguments
2849  _status = _logBuff.serialize(static_cast<U8>(3));
2850  FW_ASSERT(
2851  _status == Fw::FW_SERIALIZE_OK,
2852  static_cast<FwAssertArgType>(_status)
2853  );
2854 #endif
2855 
2856  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2857  FW_ASSERT(
2858  _status == Fw::FW_SERIALIZE_OK,
2859  static_cast<FwAssertArgType>(_status)
2860  );
2861 
2862 #if FW_AMPCS_COMPATIBLE
2863  // Serialize the argument size
2864  _status = _logBuff.serialize(
2865  static_cast<U8>(sizeof(U32))
2866  );
2867  FW_ASSERT(
2868  _status == Fw::FW_SERIALIZE_OK,
2869  static_cast<FwAssertArgType>(_status)
2870  );
2871 #endif
2872  _status = _logBuff.serialize(recordNumber);
2873  FW_ASSERT(
2874  _status == Fw::FW_SERIALIZE_OK,
2875  static_cast<FwAssertArgType>(_status)
2876  );
2877 
2878 #if FW_AMPCS_COMPATIBLE
2879  // Serialize the argument size
2880  _status = _logBuff.serialize(
2881  static_cast<U8>(sizeof(U32))
2882  );
2883  FW_ASSERT(
2884  _status == Fw::FW_SERIALIZE_OK,
2885  static_cast<FwAssertArgType>(_status)
2886  );
2887 #endif
2888  _status = _logBuff.serialize(opCode);
2889  FW_ASSERT(
2890  _status == Fw::FW_SERIALIZE_OK,
2891  static_cast<FwAssertArgType>(_status)
2892  );
2893 
2894  this->m_logOut_OutputPort[0].invoke(
2895  _id,
2896  _logTime,
2898  _logBuff
2899  );
2900  }
2901 
2902  // Emit the event on the text log port
2903 #if FW_ENABLE_TEXT_LOGGING
2904  if (this->m_LogText_OutputPort[0].isConnected()) {
2905 #if FW_OBJECT_NAMES == 1
2906  const char* _formatString =
2907  "(%s) %s: Sequence file %s: Command %" PRIu32 " (opcode %" PRIu32 ") complete";
2908 #else
2909  const char* _formatString =
2910  "%s: Sequence file %s: Command %" PRIu32 " (opcode %" PRIu32 ") complete";
2911 #endif
2912 
2913  Fw::TextLogString _logString;
2914  _logString.format(
2915  _formatString,
2916 #if FW_OBJECT_NAMES == 1
2917  this->m_objName.toChar(),
2918 #endif
2919  "CS_CommandComplete ",
2920  fileName.toChar(),
2921  recordNumber,
2922  opCode
2923  );
2924 
2925  this->m_LogText_OutputPort[0].invoke(
2926  _id,
2927  _logTime,
2929  _logString
2930  );
2931  }
2932 #endif
2933  }
2934 
2937  {
2938  // Get the time
2939  Fw::Time _logTime;
2940  if (this->m_timeCaller_OutputPort[0].isConnected()) {
2941  this->m_timeCaller_OutputPort[0].invoke(_logTime);
2942  }
2943 
2944  FwEventIdType _id = static_cast<FwEventIdType>(0);
2945 
2946  _id = this->getIdBase() + EVENTID_CS_SEQUENCECOMPLETE;
2947 
2948  // Emit the event on the log port
2949  if (this->m_logOut_OutputPort[0].isConnected()) {
2950  Fw::LogBuffer _logBuff;
2952 
2953 #if FW_AMPCS_COMPATIBLE
2954  // Serialize the number of arguments
2955  _status = _logBuff.serialize(static_cast<U8>(1));
2956  FW_ASSERT(
2957  _status == Fw::FW_SERIALIZE_OK,
2958  static_cast<FwAssertArgType>(_status)
2959  );
2960 #endif
2961 
2962  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
2963  FW_ASSERT(
2964  _status == Fw::FW_SERIALIZE_OK,
2965  static_cast<FwAssertArgType>(_status)
2966  );
2967 
2968  this->m_logOut_OutputPort[0].invoke(
2969  _id,
2970  _logTime,
2972  _logBuff
2973  );
2974  }
2975 
2976  // Emit the event on the text log port
2977 #if FW_ENABLE_TEXT_LOGGING
2978  if (this->m_LogText_OutputPort[0].isConnected()) {
2979 #if FW_OBJECT_NAMES == 1
2980  const char* _formatString =
2981  "(%s) %s: Sequence file %s complete";
2982 #else
2983  const char* _formatString =
2984  "%s: Sequence file %s complete";
2985 #endif
2986 
2987  Fw::TextLogString _logString;
2988  _logString.format(
2989  _formatString,
2990 #if FW_OBJECT_NAMES == 1
2991  this->m_objName.toChar(),
2992 #endif
2993  "CS_SequenceComplete ",
2994  fileName.toChar()
2995  );
2996 
2997  this->m_LogText_OutputPort[0].invoke(
2998  _id,
2999  _logTime,
3001  _logString
3002  );
3003  }
3004 #endif
3005  }
3006 
3009  const Fw::StringBase& fileName,
3010  U32 recordNumber,
3011  U32 opCode,
3012  U32 errorStatus
3013  )
3014  {
3015  // Get the time
3016  Fw::Time _logTime;
3017  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3018  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3019  }
3020 
3021  FwEventIdType _id = static_cast<FwEventIdType>(0);
3022 
3023  _id = this->getIdBase() + EVENTID_CS_COMMANDERROR;
3024 
3025  // Emit the event on the log port
3026  if (this->m_logOut_OutputPort[0].isConnected()) {
3027  Fw::LogBuffer _logBuff;
3029 
3030 #if FW_AMPCS_COMPATIBLE
3031  // Serialize the number of arguments
3032  _status = _logBuff.serialize(static_cast<U8>(4));
3033  FW_ASSERT(
3034  _status == Fw::FW_SERIALIZE_OK,
3035  static_cast<FwAssertArgType>(_status)
3036  );
3037 #endif
3038 
3039  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
3040  FW_ASSERT(
3041  _status == Fw::FW_SERIALIZE_OK,
3042  static_cast<FwAssertArgType>(_status)
3043  );
3044 
3045 #if FW_AMPCS_COMPATIBLE
3046  // Serialize the argument size
3047  _status = _logBuff.serialize(
3048  static_cast<U8>(sizeof(U32))
3049  );
3050  FW_ASSERT(
3051  _status == Fw::FW_SERIALIZE_OK,
3052  static_cast<FwAssertArgType>(_status)
3053  );
3054 #endif
3055  _status = _logBuff.serialize(recordNumber);
3056  FW_ASSERT(
3057  _status == Fw::FW_SERIALIZE_OK,
3058  static_cast<FwAssertArgType>(_status)
3059  );
3060 
3061 #if FW_AMPCS_COMPATIBLE
3062  // Serialize the argument size
3063  _status = _logBuff.serialize(
3064  static_cast<U8>(sizeof(U32))
3065  );
3066  FW_ASSERT(
3067  _status == Fw::FW_SERIALIZE_OK,
3068  static_cast<FwAssertArgType>(_status)
3069  );
3070 #endif
3071  _status = _logBuff.serialize(opCode);
3072  FW_ASSERT(
3073  _status == Fw::FW_SERIALIZE_OK,
3074  static_cast<FwAssertArgType>(_status)
3075  );
3076 
3077 #if FW_AMPCS_COMPATIBLE
3078  // Serialize the argument size
3079  _status = _logBuff.serialize(
3080  static_cast<U8>(sizeof(U32))
3081  );
3082  FW_ASSERT(
3083  _status == Fw::FW_SERIALIZE_OK,
3084  static_cast<FwAssertArgType>(_status)
3085  );
3086 #endif
3087  _status = _logBuff.serialize(errorStatus);
3088  FW_ASSERT(
3089  _status == Fw::FW_SERIALIZE_OK,
3090  static_cast<FwAssertArgType>(_status)
3091  );
3092 
3093  this->m_logOut_OutputPort[0].invoke(
3094  _id,
3095  _logTime,
3097  _logBuff
3098  );
3099  }
3100 
3101  // Emit the event on the text log port
3102 #if FW_ENABLE_TEXT_LOGGING
3103  if (this->m_LogText_OutputPort[0].isConnected()) {
3104 #if FW_OBJECT_NAMES == 1
3105  const char* _formatString =
3106  "(%s) %s: Sequence file %s: Command %" PRIu32 " (opcode %" PRIu32 ") completed with error %" PRIu32 "";
3107 #else
3108  const char* _formatString =
3109  "%s: Sequence file %s: Command %" PRIu32 " (opcode %" PRIu32 ") completed with error %" PRIu32 "";
3110 #endif
3111 
3112  Fw::TextLogString _logString;
3113  _logString.format(
3114  _formatString,
3115 #if FW_OBJECT_NAMES == 1
3116  this->m_objName.toChar(),
3117 #endif
3118  "CS_CommandError ",
3119  fileName.toChar(),
3120  recordNumber,
3121  opCode,
3122  errorStatus
3123  );
3124 
3125  this->m_LogText_OutputPort[0].invoke(
3126  _id,
3127  _logTime,
3129  _logString
3130  );
3131  }
3132 #endif
3133  }
3134 
3137  {
3138  // Get the time
3139  Fw::Time _logTime;
3140  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3141  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3142  }
3143 
3144  FwEventIdType _id = static_cast<FwEventIdType>(0);
3145 
3146  _id = this->getIdBase() + EVENTID_CS_INVALIDMODE;
3147 
3148  // Emit the event on the log port
3149  if (this->m_logOut_OutputPort[0].isConnected()) {
3150  Fw::LogBuffer _logBuff;
3151 
3152 #if FW_AMPCS_COMPATIBLE
3154  // Serialize the number of arguments
3155  _status = _logBuff.serialize(static_cast<U8>(0));
3156  FW_ASSERT(
3157  _status == Fw::FW_SERIALIZE_OK,
3158  static_cast<FwAssertArgType>(_status)
3159  );
3160 #endif
3161 
3162  this->m_logOut_OutputPort[0].invoke(
3163  _id,
3164  _logTime,
3166  _logBuff
3167  );
3168  }
3169 
3170  // Emit the event on the text log port
3171 #if FW_ENABLE_TEXT_LOGGING
3172  if (this->m_LogText_OutputPort[0].isConnected()) {
3173 #if FW_OBJECT_NAMES == 1
3174  const char* _formatString =
3175  "(%s) %s: Invalid mode";
3176 #else
3177  const char* _formatString =
3178  "%s: Invalid mode";
3179 #endif
3180 
3181  Fw::TextLogString _logString;
3182  _logString.format(
3183  _formatString,
3184 #if FW_OBJECT_NAMES == 1
3185  this->m_objName.toChar(),
3186 #endif
3187  "CS_InvalidMode "
3188  );
3189 
3190  this->m_LogText_OutputPort[0].invoke(
3191  _id,
3192  _logTime,
3194  _logString
3195  );
3196  }
3197 #endif
3198  }
3199 
3202  const Fw::StringBase& fileName,
3203  U32 header_records,
3204  U32 extra_bytes
3205  )
3206  {
3207  // Get the time
3208  Fw::Time _logTime;
3209  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3210  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3211  }
3212 
3213  FwEventIdType _id = static_cast<FwEventIdType>(0);
3214 
3215  _id = this->getIdBase() + EVENTID_CS_RECORDMISMATCH;
3216 
3217  // Emit the event on the log port
3218  if (this->m_logOut_OutputPort[0].isConnected()) {
3219  Fw::LogBuffer _logBuff;
3221 
3222 #if FW_AMPCS_COMPATIBLE
3223  // Serialize the number of arguments
3224  _status = _logBuff.serialize(static_cast<U8>(3));
3225  FW_ASSERT(
3226  _status == Fw::FW_SERIALIZE_OK,
3227  static_cast<FwAssertArgType>(_status)
3228  );
3229 #endif
3230 
3231  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
3232  FW_ASSERT(
3233  _status == Fw::FW_SERIALIZE_OK,
3234  static_cast<FwAssertArgType>(_status)
3235  );
3236 
3237 #if FW_AMPCS_COMPATIBLE
3238  // Serialize the argument size
3239  _status = _logBuff.serialize(
3240  static_cast<U8>(sizeof(U32))
3241  );
3242  FW_ASSERT(
3243  _status == Fw::FW_SERIALIZE_OK,
3244  static_cast<FwAssertArgType>(_status)
3245  );
3246 #endif
3247  _status = _logBuff.serialize(header_records);
3248  FW_ASSERT(
3249  _status == Fw::FW_SERIALIZE_OK,
3250  static_cast<FwAssertArgType>(_status)
3251  );
3252 
3253 #if FW_AMPCS_COMPATIBLE
3254  // Serialize the argument size
3255  _status = _logBuff.serialize(
3256  static_cast<U8>(sizeof(U32))
3257  );
3258  FW_ASSERT(
3259  _status == Fw::FW_SERIALIZE_OK,
3260  static_cast<FwAssertArgType>(_status)
3261  );
3262 #endif
3263  _status = _logBuff.serialize(extra_bytes);
3264  FW_ASSERT(
3265  _status == Fw::FW_SERIALIZE_OK,
3266  static_cast<FwAssertArgType>(_status)
3267  );
3268 
3269  this->m_logOut_OutputPort[0].invoke(
3270  _id,
3271  _logTime,
3273  _logBuff
3274  );
3275  }
3276 
3277  // Emit the event on the text log port
3278 #if FW_ENABLE_TEXT_LOGGING
3279  if (this->m_LogText_OutputPort[0].isConnected()) {
3280 #if FW_OBJECT_NAMES == 1
3281  const char* _formatString =
3282  "(%s) %s: Sequence file %s header records mismatch: %" PRIu32 " in header, found %" PRIu32 " extra bytes.";
3283 #else
3284  const char* _formatString =
3285  "%s: Sequence file %s header records mismatch: %" PRIu32 " in header, found %" PRIu32 " extra bytes.";
3286 #endif
3287 
3288  Fw::TextLogString _logString;
3289  _logString.format(
3290  _formatString,
3291 #if FW_OBJECT_NAMES == 1
3292  this->m_objName.toChar(),
3293 #endif
3294  "CS_RecordMismatch ",
3295  fileName.toChar(),
3296  header_records,
3297  extra_bytes
3298  );
3299 
3300  this->m_LogText_OutputPort[0].invoke(
3301  _id,
3302  _logTime,
3304  _logString
3305  );
3306  }
3307 #endif
3308  }
3309 
3312  const Fw::StringBase& fileName,
3313  U16 time_base,
3314  U16 seq_time_base
3315  )
3316  {
3317  // Get the time
3318  Fw::Time _logTime;
3319  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3320  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3321  }
3322 
3323  FwEventIdType _id = static_cast<FwEventIdType>(0);
3324 
3325  _id = this->getIdBase() + EVENTID_CS_TIMEBASEMISMATCH;
3326 
3327  // Emit the event on the log port
3328  if (this->m_logOut_OutputPort[0].isConnected()) {
3329  Fw::LogBuffer _logBuff;
3331 
3332 #if FW_AMPCS_COMPATIBLE
3333  // Serialize the number of arguments
3334  _status = _logBuff.serialize(static_cast<U8>(3));
3335  FW_ASSERT(
3336  _status == Fw::FW_SERIALIZE_OK,
3337  static_cast<FwAssertArgType>(_status)
3338  );
3339 #endif
3340 
3341  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
3342  FW_ASSERT(
3343  _status == Fw::FW_SERIALIZE_OK,
3344  static_cast<FwAssertArgType>(_status)
3345  );
3346 
3347 #if FW_AMPCS_COMPATIBLE
3348  // Serialize the argument size
3349  _status = _logBuff.serialize(
3350  static_cast<U8>(sizeof(U16))
3351  );
3352  FW_ASSERT(
3353  _status == Fw::FW_SERIALIZE_OK,
3354  static_cast<FwAssertArgType>(_status)
3355  );
3356 #endif
3357  _status = _logBuff.serialize(time_base);
3358  FW_ASSERT(
3359  _status == Fw::FW_SERIALIZE_OK,
3360  static_cast<FwAssertArgType>(_status)
3361  );
3362 
3363 #if FW_AMPCS_COMPATIBLE
3364  // Serialize the argument size
3365  _status = _logBuff.serialize(
3366  static_cast<U8>(sizeof(U16))
3367  );
3368  FW_ASSERT(
3369  _status == Fw::FW_SERIALIZE_OK,
3370  static_cast<FwAssertArgType>(_status)
3371  );
3372 #endif
3373  _status = _logBuff.serialize(seq_time_base);
3374  FW_ASSERT(
3375  _status == Fw::FW_SERIALIZE_OK,
3376  static_cast<FwAssertArgType>(_status)
3377  );
3378 
3379  this->m_logOut_OutputPort[0].invoke(
3380  _id,
3381  _logTime,
3383  _logBuff
3384  );
3385  }
3386 
3387  // Emit the event on the text log port
3388 #if FW_ENABLE_TEXT_LOGGING
3389  if (this->m_LogText_OutputPort[0].isConnected()) {
3390 #if FW_OBJECT_NAMES == 1
3391  const char* _formatString =
3392  "(%s) %s: Sequence file %s: Current time base doesn't match sequence time: base: %" PRIu16 " seq: %" PRIu16 "";
3393 #else
3394  const char* _formatString =
3395  "%s: Sequence file %s: Current time base doesn't match sequence time: base: %" PRIu16 " seq: %" PRIu16 "";
3396 #endif
3397 
3398  Fw::TextLogString _logString;
3399  _logString.format(
3400  _formatString,
3401 #if FW_OBJECT_NAMES == 1
3402  this->m_objName.toChar(),
3403 #endif
3404  "CS_TimeBaseMismatch ",
3405  fileName.toChar(),
3406  time_base,
3407  seq_time_base
3408  );
3409 
3410  this->m_LogText_OutputPort[0].invoke(
3411  _id,
3412  _logTime,
3414  _logString
3415  );
3416  }
3417 #endif
3418  }
3419 
3422  const Fw::StringBase& fileName,
3423  U8 currTimeBase,
3424  U8 seqTimeBase
3425  )
3426  {
3427  // Get the time
3428  Fw::Time _logTime;
3429  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3430  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3431  }
3432 
3433  FwEventIdType _id = static_cast<FwEventIdType>(0);
3434 
3435  _id = this->getIdBase() + EVENTID_CS_TIMECONTEXTMISMATCH;
3436 
3437  // Emit the event on the log port
3438  if (this->m_logOut_OutputPort[0].isConnected()) {
3439  Fw::LogBuffer _logBuff;
3441 
3442 #if FW_AMPCS_COMPATIBLE
3443  // Serialize the number of arguments
3444  _status = _logBuff.serialize(static_cast<U8>(3));
3445  FW_ASSERT(
3446  _status == Fw::FW_SERIALIZE_OK,
3447  static_cast<FwAssertArgType>(_status)
3448  );
3449 #endif
3450 
3451  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
3452  FW_ASSERT(
3453  _status == Fw::FW_SERIALIZE_OK,
3454  static_cast<FwAssertArgType>(_status)
3455  );
3456 
3457 #if FW_AMPCS_COMPATIBLE
3458  // Serialize the argument size
3459  _status = _logBuff.serialize(
3460  static_cast<U8>(sizeof(U8))
3461  );
3462  FW_ASSERT(
3463  _status == Fw::FW_SERIALIZE_OK,
3464  static_cast<FwAssertArgType>(_status)
3465  );
3466 #endif
3467  _status = _logBuff.serialize(currTimeBase);
3468  FW_ASSERT(
3469  _status == Fw::FW_SERIALIZE_OK,
3470  static_cast<FwAssertArgType>(_status)
3471  );
3472 
3473 #if FW_AMPCS_COMPATIBLE
3474  // Serialize the argument size
3475  _status = _logBuff.serialize(
3476  static_cast<U8>(sizeof(U8))
3477  );
3478  FW_ASSERT(
3479  _status == Fw::FW_SERIALIZE_OK,
3480  static_cast<FwAssertArgType>(_status)
3481  );
3482 #endif
3483  _status = _logBuff.serialize(seqTimeBase);
3484  FW_ASSERT(
3485  _status == Fw::FW_SERIALIZE_OK,
3486  static_cast<FwAssertArgType>(_status)
3487  );
3488 
3489  this->m_logOut_OutputPort[0].invoke(
3490  _id,
3491  _logTime,
3493  _logBuff
3494  );
3495  }
3496 
3497  // Emit the event on the text log port
3498 #if FW_ENABLE_TEXT_LOGGING
3499  if (this->m_LogText_OutputPort[0].isConnected()) {
3500 #if FW_OBJECT_NAMES == 1
3501  const char* _formatString =
3502  "(%s) %s: Sequence file %s: Current time context doesn't match sequence context: base: %" PRIu8 " seq: %" PRIu8 "";
3503 #else
3504  const char* _formatString =
3505  "%s: Sequence file %s: Current time context doesn't match sequence context: base: %" PRIu8 " seq: %" PRIu8 "";
3506 #endif
3507 
3508  Fw::TextLogString _logString;
3509  _logString.format(
3510  _formatString,
3511 #if FW_OBJECT_NAMES == 1
3512  this->m_objName.toChar(),
3513 #endif
3514  "CS_TimeContextMismatch ",
3515  fileName.toChar(),
3516  currTimeBase,
3517  seqTimeBase
3518  );
3519 
3520  this->m_LogText_OutputPort[0].invoke(
3521  _id,
3522  _logTime,
3524  _logString
3525  );
3526  }
3527 #endif
3528  }
3529 
3532  {
3533  // Get the time
3534  Fw::Time _logTime;
3535  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3536  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3537  }
3538 
3539  FwEventIdType _id = static_cast<FwEventIdType>(0);
3540 
3541  _id = this->getIdBase() + EVENTID_CS_PORTSEQUENCESTARTED;
3542 
3543  // Emit the event on the log port
3544  if (this->m_logOut_OutputPort[0].isConnected()) {
3545  Fw::LogBuffer _logBuff;
3547 
3548 #if FW_AMPCS_COMPATIBLE
3549  // Serialize the number of arguments
3550  _status = _logBuff.serialize(static_cast<U8>(1));
3551  FW_ASSERT(
3552  _status == Fw::FW_SERIALIZE_OK,
3553  static_cast<FwAssertArgType>(_status)
3554  );
3555 #endif
3556 
3557  _status = filename.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
3558  FW_ASSERT(
3559  _status == Fw::FW_SERIALIZE_OK,
3560  static_cast<FwAssertArgType>(_status)
3561  );
3562 
3563  this->m_logOut_OutputPort[0].invoke(
3564  _id,
3565  _logTime,
3567  _logBuff
3568  );
3569  }
3570 
3571  // Emit the event on the text log port
3572 #if FW_ENABLE_TEXT_LOGGING
3573  if (this->m_LogText_OutputPort[0].isConnected()) {
3574 #if FW_OBJECT_NAMES == 1
3575  const char* _formatString =
3576  "(%s) %s: Local request for sequence %s started.";
3577 #else
3578  const char* _formatString =
3579  "%s: Local request for sequence %s started.";
3580 #endif
3581 
3582  Fw::TextLogString _logString;
3583  _logString.format(
3584  _formatString,
3585 #if FW_OBJECT_NAMES == 1
3586  this->m_objName.toChar(),
3587 #endif
3588  "CS_PortSequenceStarted ",
3589  filename.toChar()
3590  );
3591 
3592  this->m_LogText_OutputPort[0].invoke(
3593  _id,
3594  _logTime,
3596  _logString
3597  );
3598  }
3599 #endif
3600  }
3601 
3604  {
3605  // Get the time
3606  Fw::Time _logTime;
3607  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3608  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3609  }
3610 
3611  FwEventIdType _id = static_cast<FwEventIdType>(0);
3612 
3614 
3615  // Emit the event on the log port
3616  if (this->m_logOut_OutputPort[0].isConnected()) {
3617  Fw::LogBuffer _logBuff;
3619 
3620 #if FW_AMPCS_COMPATIBLE
3621  // Serialize the number of arguments
3622  _status = _logBuff.serialize(static_cast<U8>(1));
3623  FW_ASSERT(
3624  _status == Fw::FW_SERIALIZE_OK,
3625  static_cast<FwAssertArgType>(_status)
3626  );
3627 #endif
3628 
3629 #if FW_AMPCS_COMPATIBLE
3630  // Serialize the argument size
3631  _status = _logBuff.serialize(
3632  static_cast<U8>(sizeof(U32))
3633  );
3634  FW_ASSERT(
3635  _status == Fw::FW_SERIALIZE_OK,
3636  static_cast<FwAssertArgType>(_status)
3637  );
3638 #endif
3639  _status = _logBuff.serialize(opcode);
3640  FW_ASSERT(
3641  _status == Fw::FW_SERIALIZE_OK,
3642  static_cast<FwAssertArgType>(_status)
3643  );
3644 
3645  this->m_logOut_OutputPort[0].invoke(
3646  _id,
3647  _logTime,
3649  _logBuff
3650  );
3651  }
3652 
3653  // Emit the event on the text log port
3654 #if FW_ENABLE_TEXT_LOGGING
3655  if (this->m_LogText_OutputPort[0].isConnected()) {
3656 #if FW_OBJECT_NAMES == 1
3657  const char* _formatString =
3658  "(%s) %s: Command complete status received while no sequences active. Opcode: %" PRIu32 "";
3659 #else
3660  const char* _formatString =
3661  "%s: Command complete status received while no sequences active. Opcode: %" PRIu32 "";
3662 #endif
3663 
3664  Fw::TextLogString _logString;
3665  _logString.format(
3666  _formatString,
3667 #if FW_OBJECT_NAMES == 1
3668  this->m_objName.toChar(),
3669 #endif
3670  "CS_UnexpectedCompletion ",
3671  opcode
3672  );
3673 
3674  this->m_LogText_OutputPort[0].invoke(
3675  _id,
3676  _logTime,
3678  _logString
3679  );
3680  }
3681 #endif
3682  }
3683 
3686  {
3687  // Get the time
3688  Fw::Time _logTime;
3689  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3690  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3691  }
3692 
3693  FwEventIdType _id = static_cast<FwEventIdType>(0);
3694 
3695  _id = this->getIdBase() + EVENTID_CS_MODESWITCHED;
3696 
3697  // Emit the event on the log port
3698  if (this->m_logOut_OutputPort[0].isConnected()) {
3699  Fw::LogBuffer _logBuff;
3701 
3702 #if FW_AMPCS_COMPATIBLE
3703  // Serialize the number of arguments
3704  _status = _logBuff.serialize(static_cast<U8>(1));
3705  FW_ASSERT(
3706  _status == Fw::FW_SERIALIZE_OK,
3707  static_cast<FwAssertArgType>(_status)
3708  );
3709 #endif
3710 
3711 #if FW_AMPCS_COMPATIBLE
3712  // Serialize the argument size
3713  _status = _logBuff.serialize(
3715  );
3716  FW_ASSERT(
3717  _status == Fw::FW_SERIALIZE_OK,
3718  static_cast<FwAssertArgType>(_status)
3719  );
3720 #endif
3721  _status = _logBuff.serialize(mode);
3722  FW_ASSERT(
3723  _status == Fw::FW_SERIALIZE_OK,
3724  static_cast<FwAssertArgType>(_status)
3725  );
3726 
3727  this->m_logOut_OutputPort[0].invoke(
3728  _id,
3729  _logTime,
3731  _logBuff
3732  );
3733  }
3734 
3735  // Emit the event on the text log port
3736 #if FW_ENABLE_TEXT_LOGGING
3737  if (this->m_LogText_OutputPort[0].isConnected()) {
3738 #if FW_OBJECT_NAMES == 1
3739  const char* _formatString =
3740  "(%s) %s: Sequencer switched to %s step mode";
3741 #else
3742  const char* _formatString =
3743  "%s: Sequencer switched to %s step mode";
3744 #endif
3745 
3746  Fw::String modeStr;
3747  mode.toString(modeStr);
3748 
3749  Fw::TextLogString _logString;
3750  _logString.format(
3751  _formatString,
3752 #if FW_OBJECT_NAMES == 1
3753  this->m_objName.toChar(),
3754 #endif
3755  "CS_ModeSwitched ",
3756  modeStr.toChar()
3757  );
3758 
3759  this->m_LogText_OutputPort[0].invoke(
3760  _id,
3761  _logTime,
3763  _logString
3764  );
3765  }
3766 #endif
3767  }
3768 
3771  {
3772  // Get the time
3773  Fw::Time _logTime;
3774  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3775  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3776  }
3777 
3778  FwEventIdType _id = static_cast<FwEventIdType>(0);
3779 
3780  _id = this->getIdBase() + EVENTID_CS_NOSEQUENCEACTIVE;
3781 
3782  // Emit the event on the log port
3783  if (this->m_logOut_OutputPort[0].isConnected()) {
3784  Fw::LogBuffer _logBuff;
3785 
3786 #if FW_AMPCS_COMPATIBLE
3788  // Serialize the number of arguments
3789  _status = _logBuff.serialize(static_cast<U8>(0));
3790  FW_ASSERT(
3791  _status == Fw::FW_SERIALIZE_OK,
3792  static_cast<FwAssertArgType>(_status)
3793  );
3794 #endif
3795 
3796  this->m_logOut_OutputPort[0].invoke(
3797  _id,
3798  _logTime,
3800  _logBuff
3801  );
3802  }
3803 
3804  // Emit the event on the text log port
3805 #if FW_ENABLE_TEXT_LOGGING
3806  if (this->m_LogText_OutputPort[0].isConnected()) {
3807 #if FW_OBJECT_NAMES == 1
3808  const char* _formatString =
3809  "(%s) %s: No sequence active.";
3810 #else
3811  const char* _formatString =
3812  "%s: No sequence active.";
3813 #endif
3814 
3815  Fw::TextLogString _logString;
3816  _logString.format(
3817  _formatString,
3818 #if FW_OBJECT_NAMES == 1
3819  this->m_objName.toChar(),
3820 #endif
3821  "CS_NoSequenceActive "
3822  );
3823 
3824  this->m_LogText_OutputPort[0].invoke(
3825  _id,
3826  _logTime,
3828  _logString
3829  );
3830  }
3831 #endif
3832  }
3833 
3836  {
3837  // Get the time
3838  Fw::Time _logTime;
3839  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3840  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3841  }
3842 
3843  FwEventIdType _id = static_cast<FwEventIdType>(0);
3844 
3845  _id = this->getIdBase() + EVENTID_CS_SEQUENCEVALID;
3846 
3847  // Emit the event on the log port
3848  if (this->m_logOut_OutputPort[0].isConnected()) {
3849  Fw::LogBuffer _logBuff;
3851 
3852 #if FW_AMPCS_COMPATIBLE
3853  // Serialize the number of arguments
3854  _status = _logBuff.serialize(static_cast<U8>(1));
3855  FW_ASSERT(
3856  _status == Fw::FW_SERIALIZE_OK,
3857  static_cast<FwAssertArgType>(_status)
3858  );
3859 #endif
3860 
3861  _status = filename.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
3862  FW_ASSERT(
3863  _status == Fw::FW_SERIALIZE_OK,
3864  static_cast<FwAssertArgType>(_status)
3865  );
3866 
3867  this->m_logOut_OutputPort[0].invoke(
3868  _id,
3869  _logTime,
3871  _logBuff
3872  );
3873  }
3874 
3875  // Emit the event on the text log port
3876 #if FW_ENABLE_TEXT_LOGGING
3877  if (this->m_LogText_OutputPort[0].isConnected()) {
3878 #if FW_OBJECT_NAMES == 1
3879  const char* _formatString =
3880  "(%s) %s: Sequence %s is valid.";
3881 #else
3882  const char* _formatString =
3883  "%s: Sequence %s is valid.";
3884 #endif
3885 
3886  Fw::TextLogString _logString;
3887  _logString.format(
3888  _formatString,
3889 #if FW_OBJECT_NAMES == 1
3890  this->m_objName.toChar(),
3891 #endif
3892  "CS_SequenceValid ",
3893  filename.toChar()
3894  );
3895 
3896  this->m_LogText_OutputPort[0].invoke(
3897  _id,
3898  _logTime,
3900  _logString
3901  );
3902  }
3903 #endif
3904  }
3905 
3908  const Fw::StringBase& filename,
3909  U32 command
3910  )
3911  {
3912  // Get the time
3913  Fw::Time _logTime;
3914  if (this->m_timeCaller_OutputPort[0].isConnected()) {
3915  this->m_timeCaller_OutputPort[0].invoke(_logTime);
3916  }
3917 
3918  FwEventIdType _id = static_cast<FwEventIdType>(0);
3919 
3920  _id = this->getIdBase() + EVENTID_CS_SEQUENCETIMEOUT;
3921 
3922  // Emit the event on the log port
3923  if (this->m_logOut_OutputPort[0].isConnected()) {
3924  Fw::LogBuffer _logBuff;
3926 
3927 #if FW_AMPCS_COMPATIBLE
3928  // Serialize the number of arguments
3929  _status = _logBuff.serialize(static_cast<U8>(2));
3930  FW_ASSERT(
3931  _status == Fw::FW_SERIALIZE_OK,
3932  static_cast<FwAssertArgType>(_status)
3933  );
3934 #endif
3935 
3936  _status = filename.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
3937  FW_ASSERT(
3938  _status == Fw::FW_SERIALIZE_OK,
3939  static_cast<FwAssertArgType>(_status)
3940  );
3941 
3942 #if FW_AMPCS_COMPATIBLE
3943  // Serialize the argument size
3944  _status = _logBuff.serialize(
3945  static_cast<U8>(sizeof(U32))
3946  );
3947  FW_ASSERT(
3948  _status == Fw::FW_SERIALIZE_OK,
3949  static_cast<FwAssertArgType>(_status)
3950  );
3951 #endif
3952  _status = _logBuff.serialize(command);
3953  FW_ASSERT(
3954  _status == Fw::FW_SERIALIZE_OK,
3955  static_cast<FwAssertArgType>(_status)
3956  );
3957 
3958  this->m_logOut_OutputPort[0].invoke(
3959  _id,
3960  _logTime,
3962  _logBuff
3963  );
3964  }
3965 
3966  // Emit the event on the text log port
3967 #if FW_ENABLE_TEXT_LOGGING
3968  if (this->m_LogText_OutputPort[0].isConnected()) {
3969 #if FW_OBJECT_NAMES == 1
3970  const char* _formatString =
3971  "(%s) %s: Sequence %s timed out on command %" PRIu32 "";
3972 #else
3973  const char* _formatString =
3974  "%s: Sequence %s timed out on command %" PRIu32 "";
3975 #endif
3976 
3977  Fw::TextLogString _logString;
3978  _logString.format(
3979  _formatString,
3980 #if FW_OBJECT_NAMES == 1
3981  this->m_objName.toChar(),
3982 #endif
3983  "CS_SequenceTimeout ",
3984  filename.toChar(),
3985  command
3986  );
3987 
3988  this->m_LogText_OutputPort[0].invoke(
3989  _id,
3990  _logTime,
3992  _logString
3993  );
3994  }
3995 #endif
3996  }
3997 
4000  const Fw::StringBase& filename,
4001  U32 command
4002  )
4003  {
4004  // Get the time
4005  Fw::Time _logTime;
4006  if (this->m_timeCaller_OutputPort[0].isConnected()) {
4007  this->m_timeCaller_OutputPort[0].invoke(_logTime);
4008  }
4009 
4010  FwEventIdType _id = static_cast<FwEventIdType>(0);
4011 
4012  _id = this->getIdBase() + EVENTID_CS_CMDSTEPPED;
4013 
4014  // Emit the event on the log port
4015  if (this->m_logOut_OutputPort[0].isConnected()) {
4016  Fw::LogBuffer _logBuff;
4018 
4019 #if FW_AMPCS_COMPATIBLE
4020  // Serialize the number of arguments
4021  _status = _logBuff.serialize(static_cast<U8>(2));
4022  FW_ASSERT(
4023  _status == Fw::FW_SERIALIZE_OK,
4024  static_cast<FwAssertArgType>(_status)
4025  );
4026 #endif
4027 
4028  _status = filename.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
4029  FW_ASSERT(
4030  _status == Fw::FW_SERIALIZE_OK,
4031  static_cast<FwAssertArgType>(_status)
4032  );
4033 
4034 #if FW_AMPCS_COMPATIBLE
4035  // Serialize the argument size
4036  _status = _logBuff.serialize(
4037  static_cast<U8>(sizeof(U32))
4038  );
4039  FW_ASSERT(
4040  _status == Fw::FW_SERIALIZE_OK,
4041  static_cast<FwAssertArgType>(_status)
4042  );
4043 #endif
4044  _status = _logBuff.serialize(command);
4045  FW_ASSERT(
4046  _status == Fw::FW_SERIALIZE_OK,
4047  static_cast<FwAssertArgType>(_status)
4048  );
4049 
4050  this->m_logOut_OutputPort[0].invoke(
4051  _id,
4052  _logTime,
4054  _logBuff
4055  );
4056  }
4057 
4058  // Emit the event on the text log port
4059 #if FW_ENABLE_TEXT_LOGGING
4060  if (this->m_LogText_OutputPort[0].isConnected()) {
4061 #if FW_OBJECT_NAMES == 1
4062  const char* _formatString =
4063  "(%s) %s: Sequence %s command %" PRIu32 " stepped";
4064 #else
4065  const char* _formatString =
4066  "%s: Sequence %s command %" PRIu32 " stepped";
4067 #endif
4068 
4069  Fw::TextLogString _logString;
4070  _logString.format(
4071  _formatString,
4072 #if FW_OBJECT_NAMES == 1
4073  this->m_objName.toChar(),
4074 #endif
4075  "CS_CmdStepped ",
4076  filename.toChar(),
4077  command
4078  );
4079 
4080  this->m_LogText_OutputPort[0].invoke(
4081  _id,
4082  _logTime,
4084  _logString
4085  );
4086  }
4087 #endif
4088  }
4089 
4092  {
4093  // Get the time
4094  Fw::Time _logTime;
4095  if (this->m_timeCaller_OutputPort[0].isConnected()) {
4096  this->m_timeCaller_OutputPort[0].invoke(_logTime);
4097  }
4098 
4099  FwEventIdType _id = static_cast<FwEventIdType>(0);
4100 
4101  _id = this->getIdBase() + EVENTID_CS_CMDSTARTED;
4102 
4103  // Emit the event on the log port
4104  if (this->m_logOut_OutputPort[0].isConnected()) {
4105  Fw::LogBuffer _logBuff;
4107 
4108 #if FW_AMPCS_COMPATIBLE
4109  // Serialize the number of arguments
4110  _status = _logBuff.serialize(static_cast<U8>(1));
4111  FW_ASSERT(
4112  _status == Fw::FW_SERIALIZE_OK,
4113  static_cast<FwAssertArgType>(_status)
4114  );
4115 #endif
4116 
4117  _status = filename.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
4118  FW_ASSERT(
4119  _status == Fw::FW_SERIALIZE_OK,
4120  static_cast<FwAssertArgType>(_status)
4121  );
4122 
4123  this->m_logOut_OutputPort[0].invoke(
4124  _id,
4125  _logTime,
4127  _logBuff
4128  );
4129  }
4130 
4131  // Emit the event on the text log port
4132 #if FW_ENABLE_TEXT_LOGGING
4133  if (this->m_LogText_OutputPort[0].isConnected()) {
4134 #if FW_OBJECT_NAMES == 1
4135  const char* _formatString =
4136  "(%s) %s: Sequence %s started";
4137 #else
4138  const char* _formatString =
4139  "%s: Sequence %s started";
4140 #endif
4141 
4142  Fw::TextLogString _logString;
4143  _logString.format(
4144  _formatString,
4145 #if FW_OBJECT_NAMES == 1
4146  this->m_objName.toChar(),
4147 #endif
4148  "CS_CmdStarted ",
4149  filename.toChar()
4150  );
4151 
4152  this->m_LogText_OutputPort[0].invoke(
4153  _id,
4154  _logTime,
4156  _logString
4157  );
4158  }
4159 #endif
4160  }
4161 
4164  const Fw::StringBase& filename,
4165  U32 recordNumber,
4166  U32 opCode
4167  )
4168  {
4169  // Get the time
4170  Fw::Time _logTime;
4171  if (this->m_timeCaller_OutputPort[0].isConnected()) {
4172  this->m_timeCaller_OutputPort[0].invoke(_logTime);
4173  }
4174 
4175  FwEventIdType _id = static_cast<FwEventIdType>(0);
4176 
4177  _id = this->getIdBase() + EVENTID_CS_JOINWAITING;
4178 
4179  // Emit the event on the log port
4180  if (this->m_logOut_OutputPort[0].isConnected()) {
4181  Fw::LogBuffer _logBuff;
4183 
4184 #if FW_AMPCS_COMPATIBLE
4185  // Serialize the number of arguments
4186  _status = _logBuff.serialize(static_cast<U8>(3));
4187  FW_ASSERT(
4188  _status == Fw::FW_SERIALIZE_OK,
4189  static_cast<FwAssertArgType>(_status)
4190  );
4191 #endif
4192 
4193  _status = filename.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
4194  FW_ASSERT(
4195  _status == Fw::FW_SERIALIZE_OK,
4196  static_cast<FwAssertArgType>(_status)
4197  );
4198 
4199 #if FW_AMPCS_COMPATIBLE
4200  // Serialize the argument size
4201  _status = _logBuff.serialize(
4202  static_cast<U8>(sizeof(U32))
4203  );
4204  FW_ASSERT(
4205  _status == Fw::FW_SERIALIZE_OK,
4206  static_cast<FwAssertArgType>(_status)
4207  );
4208 #endif
4209  _status = _logBuff.serialize(recordNumber);
4210  FW_ASSERT(
4211  _status == Fw::FW_SERIALIZE_OK,
4212  static_cast<FwAssertArgType>(_status)
4213  );
4214 
4215 #if FW_AMPCS_COMPATIBLE
4216  // Serialize the argument size
4217  _status = _logBuff.serialize(
4218  static_cast<U8>(sizeof(U32))
4219  );
4220  FW_ASSERT(
4221  _status == Fw::FW_SERIALIZE_OK,
4222  static_cast<FwAssertArgType>(_status)
4223  );
4224 #endif
4225  _status = _logBuff.serialize(opCode);
4226  FW_ASSERT(
4227  _status == Fw::FW_SERIALIZE_OK,
4228  static_cast<FwAssertArgType>(_status)
4229  );
4230 
4231  this->m_logOut_OutputPort[0].invoke(
4232  _id,
4233  _logTime,
4235  _logBuff
4236  );
4237  }
4238 
4239  // Emit the event on the text log port
4240 #if FW_ENABLE_TEXT_LOGGING
4241  if (this->m_LogText_OutputPort[0].isConnected()) {
4242 #if FW_OBJECT_NAMES == 1
4243  const char* _formatString =
4244  "(%s) %s: Start waiting for sequence file %s: Command %" PRIu32 " (opcode %" PRIu32 ") to complete";
4245 #else
4246  const char* _formatString =
4247  "%s: Start waiting for sequence file %s: Command %" PRIu32 " (opcode %" PRIu32 ") to complete";
4248 #endif
4249 
4250  Fw::TextLogString _logString;
4251  _logString.format(
4252  _formatString,
4253 #if FW_OBJECT_NAMES == 1
4254  this->m_objName.toChar(),
4255 #endif
4256  "CS_JoinWaiting ",
4257  filename.toChar(),
4258  recordNumber,
4259  opCode
4260  );
4261 
4262  this->m_LogText_OutputPort[0].invoke(
4263  _id,
4264  _logTime,
4266  _logString
4267  );
4268  }
4269 #endif
4270  }
4271 
4274  {
4275  // Get the time
4276  Fw::Time _logTime;
4277  if (this->m_timeCaller_OutputPort[0].isConnected()) {
4278  this->m_timeCaller_OutputPort[0].invoke(_logTime);
4279  }
4280 
4281  FwEventIdType _id = static_cast<FwEventIdType>(0);
4282 
4284 
4285  // Emit the event on the log port
4286  if (this->m_logOut_OutputPort[0].isConnected()) {
4287  Fw::LogBuffer _logBuff;
4288 
4289 #if FW_AMPCS_COMPATIBLE
4291  // Serialize the number of arguments
4292  _status = _logBuff.serialize(static_cast<U8>(0));
4293  FW_ASSERT(
4294  _status == Fw::FW_SERIALIZE_OK,
4295  static_cast<FwAssertArgType>(_status)
4296  );
4297 #endif
4298 
4299  this->m_logOut_OutputPort[0].invoke(
4300  _id,
4301  _logTime,
4303  _logBuff
4304  );
4305  }
4306 
4307  // Emit the event on the text log port
4308 #if FW_ENABLE_TEXT_LOGGING
4309  if (this->m_LogText_OutputPort[0].isConnected()) {
4310 #if FW_OBJECT_NAMES == 1
4311  const char* _formatString =
4312  "(%s) %s: Still waiting for sequence file to complete";
4313 #else
4314  const char* _formatString =
4315  "%s: Still waiting for sequence file to complete";
4316 #endif
4317 
4318  Fw::TextLogString _logString;
4319  _logString.format(
4320  _formatString,
4321 #if FW_OBJECT_NAMES == 1
4322  this->m_objName.toChar(),
4323 #endif
4324  "CS_JoinWaitingNotComplete "
4325  );
4326 
4327  this->m_LogText_OutputPort[0].invoke(
4328  _id,
4329  _logTime,
4331  _logString
4332  );
4333  }
4334 #endif
4335  }
4336 
4339  {
4340  // Get the time
4341  Fw::Time _logTime;
4342  if (this->m_timeCaller_OutputPort[0].isConnected()) {
4343  this->m_timeCaller_OutputPort[0].invoke(_logTime);
4344  }
4345 
4346  FwEventIdType _id = static_cast<FwEventIdType>(0);
4347 
4348  _id = this->getIdBase() + EVENTID_CS_NORECORDS;
4349 
4350  // Emit the event on the log port
4351  if (this->m_logOut_OutputPort[0].isConnected()) {
4352  Fw::LogBuffer _logBuff;
4354 
4355 #if FW_AMPCS_COMPATIBLE
4356  // Serialize the number of arguments
4357  _status = _logBuff.serialize(static_cast<U8>(1));
4358  FW_ASSERT(
4359  _status == Fw::FW_SERIALIZE_OK,
4360  static_cast<FwAssertArgType>(_status)
4361  );
4362 #endif
4363 
4364  _status = fileName.serialize(_logBuff, FW_MIN(FW_LOG_STRING_MAX_SIZE, 60));
4365  FW_ASSERT(
4366  _status == Fw::FW_SERIALIZE_OK,
4367  static_cast<FwAssertArgType>(_status)
4368  );
4369 
4370  this->m_logOut_OutputPort[0].invoke(
4371  _id,
4372  _logTime,
4374  _logBuff
4375  );
4376  }
4377 
4378  // Emit the event on the text log port
4379 #if FW_ENABLE_TEXT_LOGGING
4380  if (this->m_LogText_OutputPort[0].isConnected()) {
4381 #if FW_OBJECT_NAMES == 1
4382  const char* _formatString =
4383  "(%s) %s: Sequence file %s has no records. Ignoring.";
4384 #else
4385  const char* _formatString =
4386  "%s: Sequence file %s has no records. Ignoring.";
4387 #endif
4388 
4389  Fw::TextLogString _logString;
4390  _logString.format(
4391  _formatString,
4392 #if FW_OBJECT_NAMES == 1
4393  this->m_objName.toChar(),
4394 #endif
4395  "CS_NoRecords ",
4396  fileName.toChar()
4397  );
4398 
4399  this->m_LogText_OutputPort[0].invoke(
4400  _id,
4401  _logTime,
4403  _logString
4404  );
4405  }
4406 #endif
4407  }
4408 
4409  // ----------------------------------------------------------------------
4410  // Telemetry write functions
4411  // ----------------------------------------------------------------------
4412 
4415  U32 arg,
4416  Fw::Time _tlmTime
4417  )
4418  {
4419  if (this->m_tlmOut_OutputPort[0].isConnected()) {
4420  if (
4421  this->m_timeCaller_OutputPort[0].isConnected() &&
4422  (_tlmTime == Fw::ZERO_TIME)
4423  ) {
4424  this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
4425  }
4426 
4427  Fw::TlmBuffer _tlmBuff;
4428  Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
4429  FW_ASSERT(
4430  _stat == Fw::FW_SERIALIZE_OK,
4431  static_cast<FwAssertArgType>(_stat)
4432  );
4433 
4434  FwChanIdType _id;
4435 
4436  _id = this->getIdBase() + CHANNELID_CS_LOADCOMMANDS;
4437 
4438  this->m_tlmOut_OutputPort[0].invoke(
4439  _id,
4440  _tlmTime,
4441  _tlmBuff
4442  );
4443  }
4444  }
4445 
4448  U32 arg,
4449  Fw::Time _tlmTime
4450  )
4451  {
4452  if (this->m_tlmOut_OutputPort[0].isConnected()) {
4453  if (
4454  this->m_timeCaller_OutputPort[0].isConnected() &&
4455  (_tlmTime == Fw::ZERO_TIME)
4456  ) {
4457  this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
4458  }
4459 
4460  Fw::TlmBuffer _tlmBuff;
4461  Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
4462  FW_ASSERT(
4463  _stat == Fw::FW_SERIALIZE_OK,
4464  static_cast<FwAssertArgType>(_stat)
4465  );
4466 
4467  FwChanIdType _id;
4468 
4469  _id = this->getIdBase() + CHANNELID_CS_CANCELCOMMANDS;
4470 
4471  this->m_tlmOut_OutputPort[0].invoke(
4472  _id,
4473  _tlmTime,
4474  _tlmBuff
4475  );
4476  }
4477  }
4478 
4481  U32 arg,
4482  Fw::Time _tlmTime
4483  )
4484  {
4485  if (this->m_tlmOut_OutputPort[0].isConnected()) {
4486  if (
4487  this->m_timeCaller_OutputPort[0].isConnected() &&
4488  (_tlmTime == Fw::ZERO_TIME)
4489  ) {
4490  this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
4491  }
4492 
4493  Fw::TlmBuffer _tlmBuff;
4494  Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
4495  FW_ASSERT(
4496  _stat == Fw::FW_SERIALIZE_OK,
4497  static_cast<FwAssertArgType>(_stat)
4498  );
4499 
4500  FwChanIdType _id;
4501 
4502  _id = this->getIdBase() + CHANNELID_CS_ERRORS;
4503 
4504  this->m_tlmOut_OutputPort[0].invoke(
4505  _id,
4506  _tlmTime,
4507  _tlmBuff
4508  );
4509  }
4510  }
4511 
4514  U32 arg,
4515  Fw::Time _tlmTime
4516  )
4517  {
4518  if (this->m_tlmOut_OutputPort[0].isConnected()) {
4519  if (
4520  this->m_timeCaller_OutputPort[0].isConnected() &&
4521  (_tlmTime == Fw::ZERO_TIME)
4522  ) {
4523  this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
4524  }
4525 
4526  Fw::TlmBuffer _tlmBuff;
4527  Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
4528  FW_ASSERT(
4529  _stat == Fw::FW_SERIALIZE_OK,
4530  static_cast<FwAssertArgType>(_stat)
4531  );
4532 
4533  FwChanIdType _id;
4534 
4535  _id = this->getIdBase() + CHANNELID_CS_COMMANDSEXECUTED;
4536 
4537  this->m_tlmOut_OutputPort[0].invoke(
4538  _id,
4539  _tlmTime,
4540  _tlmBuff
4541  );
4542  }
4543  }
4544 
4547  U32 arg,
4548  Fw::Time _tlmTime
4549  )
4550  {
4551  if (this->m_tlmOut_OutputPort[0].isConnected()) {
4552  if (
4553  this->m_timeCaller_OutputPort[0].isConnected() &&
4554  (_tlmTime == Fw::ZERO_TIME)
4555  ) {
4556  this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
4557  }
4558 
4559  Fw::TlmBuffer _tlmBuff;
4560  Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
4561  FW_ASSERT(
4562  _stat == Fw::FW_SERIALIZE_OK,
4563  static_cast<FwAssertArgType>(_stat)
4564  );
4565 
4566  FwChanIdType _id;
4567 
4569 
4570  this->m_tlmOut_OutputPort[0].invoke(
4571  _id,
4572  _tlmTime,
4573  _tlmBuff
4574  );
4575  }
4576  }
4577 
4578  // ----------------------------------------------------------------------
4579  // Time
4580  // ----------------------------------------------------------------------
4581 
4583  getTime()
4584  {
4585  if (this->m_timeCaller_OutputPort[0].isConnected()) {
4586  Fw::Time _time;
4587  this->m_timeCaller_OutputPort[0].invoke(_time);
4588  return _time;
4589  }
4590  else {
4591  return Fw::Time(TB_NONE, 0, 0);
4592  }
4593  }
4594 
4595  // ----------------------------------------------------------------------
4596  // Message dispatch functions
4597  // ----------------------------------------------------------------------
4598 
4599  Fw::QueuedComponentBase::MsgDispatchStatus CmdSequencerComponentBase ::
4600  doDispatch()
4601  {
4602  ComponentIpcSerializableBuffer msg;
4603  FwQueuePriorityType priority = 0;
4604 
4605  Os::Queue::Status msgStatus = this->m_queue.receive(
4606  msg,
4608  priority
4609  );
4610  FW_ASSERT(
4611  msgStatus == Os::Queue::OP_OK,
4612  static_cast<FwAssertArgType>(msgStatus)
4613  );
4614 
4615  // Reset to beginning of buffer
4616  msg.resetDeser();
4617 
4618  FwEnumStoreType desMsg = 0;
4619  Fw::SerializeStatus deserStatus = msg.deserialize(desMsg);
4620  FW_ASSERT(
4621  deserStatus == Fw::FW_SERIALIZE_OK,
4622  static_cast<FwAssertArgType>(deserStatus)
4623  );
4624 
4625  MsgTypeEnum msgType = static_cast<MsgTypeEnum>(desMsg);
4626 
4627  if (msgType == CMDSEQUENCER_COMPONENT_EXIT) {
4628  return MSG_DISPATCH_EXIT;
4629  }
4630 
4631  FwIndexType portNum = 0;
4632  deserStatus = msg.deserialize(portNum);
4633  FW_ASSERT(
4634  deserStatus == Fw::FW_SERIALIZE_OK,
4635  static_cast<FwAssertArgType>(deserStatus)
4636  );
4637 
4638  switch (msgType) {
4639  // Handle async input port cmdResponseIn
4640  case CMDRESPONSEIN_CMDRESPONSE: {
4641  // Deserialize argument opCode
4642  FwOpcodeType opCode;
4643  deserStatus = msg.deserialize(opCode);
4644  FW_ASSERT(
4645  deserStatus == Fw::FW_SERIALIZE_OK,
4646  static_cast<FwAssertArgType>(deserStatus)
4647  );
4648 
4649  // Deserialize argument cmdSeq
4650  U32 cmdSeq;
4651  deserStatus = msg.deserialize(cmdSeq);
4652  FW_ASSERT(
4653  deserStatus == Fw::FW_SERIALIZE_OK,
4654  static_cast<FwAssertArgType>(deserStatus)
4655  );
4656 
4657  // Deserialize argument response
4658  Fw::CmdResponse response;
4659  deserStatus = msg.deserialize(response);
4660  FW_ASSERT(
4661  deserStatus == Fw::FW_SERIALIZE_OK,
4662  static_cast<FwAssertArgType>(deserStatus)
4663  );
4664  // Call handler function
4665  this->cmdResponseIn_handler(
4666  portNum,
4667  opCode,
4668  cmdSeq,
4669  response
4670  );
4671 
4672  break;
4673  }
4674 
4675  // Handle async input port pingIn
4676  case PINGIN_PING: {
4677  // Deserialize argument key
4678  U32 key;
4679  deserStatus = msg.deserialize(key);
4680  FW_ASSERT(
4681  deserStatus == Fw::FW_SERIALIZE_OK,
4682  static_cast<FwAssertArgType>(deserStatus)
4683  );
4684  // Call handler function
4685  this->pingIn_handler(
4686  portNum,
4687  key
4688  );
4689 
4690  break;
4691  }
4692 
4693  // Handle async input port schedIn
4694  case SCHEDIN_SCHED: {
4695  // Deserialize argument context
4696  U32 context;
4697  deserStatus = msg.deserialize(context);
4698  FW_ASSERT(
4699  deserStatus == Fw::FW_SERIALIZE_OK,
4700  static_cast<FwAssertArgType>(deserStatus)
4701  );
4702  // Call handler function
4703  this->schedIn_handler(
4704  portNum,
4705  context
4706  );
4707 
4708  break;
4709  }
4710 
4711  // Handle async input port seqCancelIn
4712  case SEQCANCELIN_CMDSEQCANCEL: {
4713  // Call handler function
4714  this->seqCancelIn_handler(portNum);
4715 
4716  break;
4717  }
4718 
4719  // Handle async input port seqRunIn
4720  case SEQRUNIN_CMDSEQIN: {
4721  // Deserialize argument filename
4722  char __fprime_ac_filename_buffer[Fw::StringBase::BUFFER_SIZE(240)];
4723  Fw::ExternalString filename(__fprime_ac_filename_buffer, sizeof __fprime_ac_filename_buffer);
4724  deserStatus = msg.deserialize(filename);
4725  FW_ASSERT(
4726  deserStatus == Fw::FW_SERIALIZE_OK,
4727  static_cast<FwAssertArgType>(deserStatus)
4728  );
4729  // Call handler function
4730  this->seqRunIn_handler(
4731  portNum,
4732  filename
4733  );
4734 
4735  break;
4736  }
4737 
4738  // Handle command CS_RUN
4739  case CMD_CS_RUN: {
4740  // Deserialize opcode
4741  FwOpcodeType opCode = 0;
4742  deserStatus = msg.deserialize(opCode);
4743  FW_ASSERT (
4744  deserStatus == Fw::FW_SERIALIZE_OK,
4745  static_cast<FwAssertArgType>(deserStatus)
4746  );
4747 
4748  // Deserialize command sequence
4749  U32 cmdSeq = 0;
4750  deserStatus = msg.deserialize(cmdSeq);
4751  FW_ASSERT (
4752  deserStatus == Fw::FW_SERIALIZE_OK,
4753  static_cast<FwAssertArgType>(deserStatus)
4754  );
4755 
4756  // Deserialize command argument buffer
4757  Fw::CmdArgBuffer args;
4758  deserStatus = msg.deserialize(args);
4759  FW_ASSERT (
4760  deserStatus == Fw::FW_SERIALIZE_OK,
4761  static_cast<FwAssertArgType>(deserStatus)
4762  );
4763 
4764  // Reset buffer
4765  args.resetDeser();
4766 
4767  // Deserialize argument fileName
4768  Fw::CmdStringArg fileName;
4769  deserStatus = args.deserialize(fileName);
4770  if (deserStatus != Fw::FW_SERIALIZE_OK) {
4771  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
4772  this->cmdResponse_out(
4773  opCode,
4774  cmdSeq,
4776  );
4777  }
4778  // Don't crash the task if bad arguments were passed from the ground
4779  break;
4780  }
4781 
4782  // Deserialize argument block
4784  deserStatus = args.deserialize(block);
4785  if (deserStatus != Fw::FW_SERIALIZE_OK) {
4786  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
4787  this->cmdResponse_out(
4788  opCode,
4789  cmdSeq,
4791  );
4792  }
4793  // Don't crash the task if bad arguments were passed from the ground
4794  break;
4795  }
4796 
4797  // Make sure there was no data left over.
4798  // That means the argument buffer size was incorrect.
4799 #if FW_CMD_CHECK_RESIDUAL
4800  if (args.getBuffLeft() != 0) {
4801  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
4802  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::FORMAT_ERROR);
4803  }
4804  // Don't crash the task if bad arguments were passed from the ground
4805  break;
4806  }
4807 #endif
4808 
4809  // Call handler function
4810  this->CS_RUN_cmdHandler(
4811  opCode, cmdSeq,
4812  fileName,
4813  block
4814  );
4815 
4816  break;
4817  }
4818 
4819  // Handle command CS_VALIDATE
4820  case CMD_CS_VALIDATE: {
4821  // Deserialize opcode
4822  FwOpcodeType opCode = 0;
4823  deserStatus = msg.deserialize(opCode);
4824  FW_ASSERT (
4825  deserStatus == Fw::FW_SERIALIZE_OK,
4826  static_cast<FwAssertArgType>(deserStatus)
4827  );
4828 
4829  // Deserialize command sequence
4830  U32 cmdSeq = 0;
4831  deserStatus = msg.deserialize(cmdSeq);
4832  FW_ASSERT (
4833  deserStatus == Fw::FW_SERIALIZE_OK,
4834  static_cast<FwAssertArgType>(deserStatus)
4835  );
4836 
4837  // Deserialize command argument buffer
4838  Fw::CmdArgBuffer args;
4839  deserStatus = msg.deserialize(args);
4840  FW_ASSERT (
4841  deserStatus == Fw::FW_SERIALIZE_OK,
4842  static_cast<FwAssertArgType>(deserStatus)
4843  );
4844 
4845  // Reset buffer
4846  args.resetDeser();
4847 
4848  // Deserialize argument fileName
4849  Fw::CmdStringArg fileName;
4850  deserStatus = args.deserialize(fileName);
4851  if (deserStatus != Fw::FW_SERIALIZE_OK) {
4852  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
4853  this->cmdResponse_out(
4854  opCode,
4855  cmdSeq,
4857  );
4858  }
4859  // Don't crash the task if bad arguments were passed from the ground
4860  break;
4861  }
4862 
4863  // Make sure there was no data left over.
4864  // That means the argument buffer size was incorrect.
4865 #if FW_CMD_CHECK_RESIDUAL
4866  if (args.getBuffLeft() != 0) {
4867  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
4868  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::FORMAT_ERROR);
4869  }
4870  // Don't crash the task if bad arguments were passed from the ground
4871  break;
4872  }
4873 #endif
4874 
4875  // Call handler function
4876  this->CS_VALIDATE_cmdHandler(
4877  opCode, cmdSeq,
4878  fileName
4879  );
4880 
4881  break;
4882  }
4883 
4884  // Handle command CS_CANCEL
4885  case CMD_CS_CANCEL: {
4886  // Deserialize opcode
4887  FwOpcodeType opCode = 0;
4888  deserStatus = msg.deserialize(opCode);
4889  FW_ASSERT (
4890  deserStatus == Fw::FW_SERIALIZE_OK,
4891  static_cast<FwAssertArgType>(deserStatus)
4892  );
4893 
4894  // Deserialize command sequence
4895  U32 cmdSeq = 0;
4896  deserStatus = msg.deserialize(cmdSeq);
4897  FW_ASSERT (
4898  deserStatus == Fw::FW_SERIALIZE_OK,
4899  static_cast<FwAssertArgType>(deserStatus)
4900  );
4901 
4902  // Deserialize command argument buffer
4903  Fw::CmdArgBuffer args;
4904  deserStatus = msg.deserialize(args);
4905  FW_ASSERT (
4906  deserStatus == Fw::FW_SERIALIZE_OK,
4907  static_cast<FwAssertArgType>(deserStatus)
4908  );
4909 
4910  // Reset buffer
4911  args.resetDeser();
4912 
4913  // Make sure there was no data left over.
4914  // That means the argument buffer size was incorrect.
4915 #if FW_CMD_CHECK_RESIDUAL
4916  if (args.getBuffLeft() != 0) {
4917  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
4918  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::FORMAT_ERROR);
4919  }
4920  // Don't crash the task if bad arguments were passed from the ground
4921  break;
4922  }
4923 #endif
4924 
4925  // Call handler function
4926  this->CS_CANCEL_cmdHandler(opCode, cmdSeq);
4927 
4928  break;
4929  }
4930 
4931  // Handle command CS_START
4932  case CMD_CS_START: {
4933  // Deserialize opcode
4934  FwOpcodeType opCode = 0;
4935  deserStatus = msg.deserialize(opCode);
4936  FW_ASSERT (
4937  deserStatus == Fw::FW_SERIALIZE_OK,
4938  static_cast<FwAssertArgType>(deserStatus)
4939  );
4940 
4941  // Deserialize command sequence
4942  U32 cmdSeq = 0;
4943  deserStatus = msg.deserialize(cmdSeq);
4944  FW_ASSERT (
4945  deserStatus == Fw::FW_SERIALIZE_OK,
4946  static_cast<FwAssertArgType>(deserStatus)
4947  );
4948 
4949  // Deserialize command argument buffer
4950  Fw::CmdArgBuffer args;
4951  deserStatus = msg.deserialize(args);
4952  FW_ASSERT (
4953  deserStatus == Fw::FW_SERIALIZE_OK,
4954  static_cast<FwAssertArgType>(deserStatus)
4955  );
4956 
4957  // Reset buffer
4958  args.resetDeser();
4959 
4960  // Make sure there was no data left over.
4961  // That means the argument buffer size was incorrect.
4962 #if FW_CMD_CHECK_RESIDUAL
4963  if (args.getBuffLeft() != 0) {
4964  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
4965  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::FORMAT_ERROR);
4966  }
4967  // Don't crash the task if bad arguments were passed from the ground
4968  break;
4969  }
4970 #endif
4971 
4972  // Call handler function
4973  this->CS_START_cmdHandler(opCode, cmdSeq);
4974 
4975  break;
4976  }
4977 
4978  // Handle command CS_STEP
4979  case CMD_CS_STEP: {
4980  // Deserialize opcode
4981  FwOpcodeType opCode = 0;
4982  deserStatus = msg.deserialize(opCode);
4983  FW_ASSERT (
4984  deserStatus == Fw::FW_SERIALIZE_OK,
4985  static_cast<FwAssertArgType>(deserStatus)
4986  );
4987 
4988  // Deserialize command sequence
4989  U32 cmdSeq = 0;
4990  deserStatus = msg.deserialize(cmdSeq);
4991  FW_ASSERT (
4992  deserStatus == Fw::FW_SERIALIZE_OK,
4993  static_cast<FwAssertArgType>(deserStatus)
4994  );
4995 
4996  // Deserialize command argument buffer
4997  Fw::CmdArgBuffer args;
4998  deserStatus = msg.deserialize(args);
4999  FW_ASSERT (
5000  deserStatus == Fw::FW_SERIALIZE_OK,
5001  static_cast<FwAssertArgType>(deserStatus)
5002  );
5003 
5004  // Reset buffer
5005  args.resetDeser();
5006 
5007  // Make sure there was no data left over.
5008  // That means the argument buffer size was incorrect.
5009 #if FW_CMD_CHECK_RESIDUAL
5010  if (args.getBuffLeft() != 0) {
5011  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
5012  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::FORMAT_ERROR);
5013  }
5014  // Don't crash the task if bad arguments were passed from the ground
5015  break;
5016  }
5017 #endif
5018 
5019  // Call handler function
5020  this->CS_STEP_cmdHandler(opCode, cmdSeq);
5021 
5022  break;
5023  }
5024 
5025  // Handle command CS_AUTO
5026  case CMD_CS_AUTO: {
5027  // Deserialize opcode
5028  FwOpcodeType opCode = 0;
5029  deserStatus = msg.deserialize(opCode);
5030  FW_ASSERT (
5031  deserStatus == Fw::FW_SERIALIZE_OK,
5032  static_cast<FwAssertArgType>(deserStatus)
5033  );
5034 
5035  // Deserialize command sequence
5036  U32 cmdSeq = 0;
5037  deserStatus = msg.deserialize(cmdSeq);
5038  FW_ASSERT (
5039  deserStatus == Fw::FW_SERIALIZE_OK,
5040  static_cast<FwAssertArgType>(deserStatus)
5041  );
5042 
5043  // Deserialize command argument buffer
5044  Fw::CmdArgBuffer args;
5045  deserStatus = msg.deserialize(args);
5046  FW_ASSERT (
5047  deserStatus == Fw::FW_SERIALIZE_OK,
5048  static_cast<FwAssertArgType>(deserStatus)
5049  );
5050 
5051  // Reset buffer
5052  args.resetDeser();
5053 
5054  // Make sure there was no data left over.
5055  // That means the argument buffer size was incorrect.
5056 #if FW_CMD_CHECK_RESIDUAL
5057  if (args.getBuffLeft() != 0) {
5058  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
5059  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::FORMAT_ERROR);
5060  }
5061  // Don't crash the task if bad arguments were passed from the ground
5062  break;
5063  }
5064 #endif
5065 
5066  // Call handler function
5067  this->CS_AUTO_cmdHandler(opCode, cmdSeq);
5068 
5069  break;
5070  }
5071 
5072  // Handle command CS_MANUAL
5073  case CMD_CS_MANUAL: {
5074  // Deserialize opcode
5075  FwOpcodeType opCode = 0;
5076  deserStatus = msg.deserialize(opCode);
5077  FW_ASSERT (
5078  deserStatus == Fw::FW_SERIALIZE_OK,
5079  static_cast<FwAssertArgType>(deserStatus)
5080  );
5081 
5082  // Deserialize command sequence
5083  U32 cmdSeq = 0;
5084  deserStatus = msg.deserialize(cmdSeq);
5085  FW_ASSERT (
5086  deserStatus == Fw::FW_SERIALIZE_OK,
5087  static_cast<FwAssertArgType>(deserStatus)
5088  );
5089 
5090  // Deserialize command argument buffer
5091  Fw::CmdArgBuffer args;
5092  deserStatus = msg.deserialize(args);
5093  FW_ASSERT (
5094  deserStatus == Fw::FW_SERIALIZE_OK,
5095  static_cast<FwAssertArgType>(deserStatus)
5096  );
5097 
5098  // Reset buffer
5099  args.resetDeser();
5100 
5101  // Make sure there was no data left over.
5102  // That means the argument buffer size was incorrect.
5103 #if FW_CMD_CHECK_RESIDUAL
5104  if (args.getBuffLeft() != 0) {
5105  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
5106  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::FORMAT_ERROR);
5107  }
5108  // Don't crash the task if bad arguments were passed from the ground
5109  break;
5110  }
5111 #endif
5112 
5113  // Call handler function
5114  this->CS_MANUAL_cmdHandler(opCode, cmdSeq);
5115 
5116  break;
5117  }
5118 
5119  // Handle command CS_JOIN_WAIT
5120  case CMD_CS_JOIN_WAIT: {
5121  // Deserialize opcode
5122  FwOpcodeType opCode = 0;
5123  deserStatus = msg.deserialize(opCode);
5124  FW_ASSERT (
5125  deserStatus == Fw::FW_SERIALIZE_OK,
5126  static_cast<FwAssertArgType>(deserStatus)
5127  );
5128 
5129  // Deserialize command sequence
5130  U32 cmdSeq = 0;
5131  deserStatus = msg.deserialize(cmdSeq);
5132  FW_ASSERT (
5133  deserStatus == Fw::FW_SERIALIZE_OK,
5134  static_cast<FwAssertArgType>(deserStatus)
5135  );
5136 
5137  // Deserialize command argument buffer
5138  Fw::CmdArgBuffer args;
5139  deserStatus = msg.deserialize(args);
5140  FW_ASSERT (
5141  deserStatus == Fw::FW_SERIALIZE_OK,
5142  static_cast<FwAssertArgType>(deserStatus)
5143  );
5144 
5145  // Reset buffer
5146  args.resetDeser();
5147 
5148  // Make sure there was no data left over.
5149  // That means the argument buffer size was incorrect.
5150 #if FW_CMD_CHECK_RESIDUAL
5151  if (args.getBuffLeft() != 0) {
5152  if (this->m_cmdResponseOut_OutputPort[0].isConnected()) {
5153  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::FORMAT_ERROR);
5154  }
5155  // Don't crash the task if bad arguments were passed from the ground
5156  break;
5157  }
5158 #endif
5159 
5160  // Call handler function
5161  this->CS_JOIN_WAIT_cmdHandler(opCode, cmdSeq);
5162 
5163  break;
5164  }
5165 
5166  default:
5167  return MSG_DISPATCH_ERROR;
5168  }
5169 
5170  return MSG_DISPATCH_OK;
5171  }
5172 
5173  // ----------------------------------------------------------------------
5174  // Calls for messages received on special input ports
5175  // ----------------------------------------------------------------------
5176 
5177  void CmdSequencerComponentBase ::
5178  m_p_cmdIn_in(
5179  Fw::PassiveComponentBase* callComp,
5180  FwIndexType portNum,
5181  FwOpcodeType opCode,
5182  U32 cmdSeq,
5183  Fw::CmdArgBuffer& args
5184  )
5185  {
5186  FW_ASSERT(callComp);
5187  CmdSequencerComponentBase* compPtr = static_cast<CmdSequencerComponentBase*>(callComp);
5188 
5189  const U32 idBase = callComp->getIdBase();
5190  FW_ASSERT(opCode >= idBase, static_cast<FwAssertArgType>(opCode), static_cast<FwAssertArgType>(idBase));
5191 
5192  // Select base class function based on opcode
5193  switch (opCode - idBase) {
5194  case OPCODE_CS_RUN: {
5195  compPtr->CS_RUN_cmdHandlerBase(
5196  opCode,
5197  cmdSeq,
5198  args
5199  );
5200  break;
5201  }
5202 
5203  case OPCODE_CS_VALIDATE: {
5204  compPtr->CS_VALIDATE_cmdHandlerBase(
5205  opCode,
5206  cmdSeq,
5207  args
5208  );
5209  break;
5210  }
5211 
5212  case OPCODE_CS_CANCEL: {
5213  compPtr->CS_CANCEL_cmdHandlerBase(
5214  opCode,
5215  cmdSeq,
5216  args
5217  );
5218  break;
5219  }
5220 
5221  case OPCODE_CS_START: {
5222  compPtr->CS_START_cmdHandlerBase(
5223  opCode,
5224  cmdSeq,
5225  args
5226  );
5227  break;
5228  }
5229 
5230  case OPCODE_CS_STEP: {
5231  compPtr->CS_STEP_cmdHandlerBase(
5232  opCode,
5233  cmdSeq,
5234  args
5235  );
5236  break;
5237  }
5238 
5239  case OPCODE_CS_AUTO: {
5240  compPtr->CS_AUTO_cmdHandlerBase(
5241  opCode,
5242  cmdSeq,
5243  args
5244  );
5245  break;
5246  }
5247 
5248  case OPCODE_CS_MANUAL: {
5249  compPtr->CS_MANUAL_cmdHandlerBase(
5250  opCode,
5251  cmdSeq,
5252  args
5253  );
5254  break;
5255  }
5256 
5257  case OPCODE_CS_JOIN_WAIT: {
5258  compPtr->CS_JOIN_WAIT_cmdHandlerBase(
5259  opCode,
5260  cmdSeq,
5261  args
5262  );
5263  break;
5264  }
5265  }
5266  }
5267 
5268  // ----------------------------------------------------------------------
5269  // Calls for messages received on typed input ports
5270  // ----------------------------------------------------------------------
5271 
5272  void CmdSequencerComponentBase ::
5273  m_p_cmdResponseIn_in(
5274  Fw::PassiveComponentBase* callComp,
5275  FwIndexType portNum,
5276  FwOpcodeType opCode,
5277  U32 cmdSeq,
5278  const Fw::CmdResponse& response
5279  )
5280  {
5281  FW_ASSERT(callComp);
5282  CmdSequencerComponentBase* compPtr = static_cast<CmdSequencerComponentBase*>(callComp);
5283  compPtr->cmdResponseIn_handlerBase(
5284  portNum,
5285  opCode,
5286  cmdSeq,
5287  response
5288  );
5289  }
5290 
5291  void CmdSequencerComponentBase ::
5292  m_p_pingIn_in(
5293  Fw::PassiveComponentBase* callComp,
5294  FwIndexType portNum,
5295  U32 key
5296  )
5297  {
5298  FW_ASSERT(callComp);
5299  CmdSequencerComponentBase* compPtr = static_cast<CmdSequencerComponentBase*>(callComp);
5300  compPtr->pingIn_handlerBase(
5301  portNum,
5302  key
5303  );
5304  }
5305 
5306  void CmdSequencerComponentBase ::
5307  m_p_schedIn_in(
5308  Fw::PassiveComponentBase* callComp,
5309  FwIndexType portNum,
5310  U32 context
5311  )
5312  {
5313  FW_ASSERT(callComp);
5314  CmdSequencerComponentBase* compPtr = static_cast<CmdSequencerComponentBase*>(callComp);
5315  compPtr->schedIn_handlerBase(
5316  portNum,
5317  context
5318  );
5319  }
5320 
5321  void CmdSequencerComponentBase ::
5322  m_p_seqCancelIn_in(
5323  Fw::PassiveComponentBase* callComp,
5324  FwIndexType portNum
5325  )
5326  {
5327  FW_ASSERT(callComp);
5328  CmdSequencerComponentBase* compPtr = static_cast<CmdSequencerComponentBase*>(callComp);
5329  compPtr->seqCancelIn_handlerBase(portNum);
5330  }
5331 
5332  void CmdSequencerComponentBase ::
5333  m_p_seqRunIn_in(
5334  Fw::PassiveComponentBase* callComp,
5335  FwIndexType portNum,
5336  const Fw::StringBase& filename
5337  )
5338  {
5339  FW_ASSERT(callComp);
5340  CmdSequencerComponentBase* compPtr = static_cast<CmdSequencerComponentBase*>(callComp);
5341  compPtr->seqRunIn_handlerBase(
5342  portNum,
5343  filename
5344  );
5345  }
5346 
5347 }
#define FW_ASSERT(...)
Definition: Assert.hpp:14
U8 BYTE
byte type
Definition: BasicTypes.h:31
#define FW_MIN(a, b)
MIN macro.
Definition: BasicTypes.h:72
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:30
#define FW_NUM_ARRAY_ELEMENTS(a)
number of elements in an array
Definition: BasicTypes.h:70
#define PRI_PlatformIntType
@ TB_NONE
No time base has been established.
Definition: FpConfig.h:70
I32 FwEnumStoreType
Definition: FpConfig.h:64
PlatformAssertArgType FwAssertArgType
Definition: FpConfig.h:39
U32 FwChanIdType
Definition: FpConfig.h:95
U32 FwEventIdType
Definition: FpConfig.h:103
U32 FwOpcodeType
Definition: FpConfig.h:91
PlatformSizeType FwSizeType
Definition: FpConfig.h:35
#define FW_LOG_STRING_MAX_SIZE
Max size of log string parameter type.
Definition: FpConfig.h:319
PlatformQueuePriorityType FwQueuePriorityType
Definition: FpConfig.h:55
PlatformIndexType FwIndexType
Definition: FpConfig.h:25
#define FW_OBJECT_NAMES
Indicates whether or not object names are stored (more memory, can be used for tracking objects)
Definition: FpConfig.h:148
@ ACTIVE_COMPONENT_EXIT
message to exit active component task
Enum representing a command response.
@ FORMAT_ERROR
Command failed to deserialize.
Fw::SerializeStatus deserialize(Fw::SerializeBufferBase &buffer)
Deserialize raw enum value from SerialType.
A string backed by an external buffer.
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
Register a component.
Definition: CmdPortAc.cpp:62
@ SERIALIZED_SIZE
The size of the serial representations of the port arguments.
Definition: CmdPortAc.hpp:37
void init()
Initialization function.
Definition: CmdPortAc.cpp:56
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
Register a component.
void init()
Initialization function.
@ SERIALIZED_SIZE
The size of the serial representations of the port arguments.
void setPortNum(NATIVE_INT_TYPE portNum)
@ WARNING_HI
A serious but recoverable event.
@ ACTIVITY_HI
Important informational events.
@ WARNING_LO
A less serious but recoverable event.
@ ACTIVITY_LO
Less important informational events.
void init()
Object initializer.
Definition: ObjBase.cpp:27
const char * toChar() const
Definition: ObjectName.hpp:50
void addCallPort(InputCmdRegPort *callPort)
Register an input port.
void invoke(FwOpcodeType opCode)
Invoke a port interface.
void init()
Initialization function.
void init()
Initialization function.
void addCallPort(InputCmdResponsePort *callPort)
Register an input port.
void invoke(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)
Invoke a port interface.
void addCallPort(InputComPort *callPort)
Register an input port.
Definition: ComPortAc.cpp:143
void init()
Initialization function.
Definition: ComPortAc.cpp:137
void invoke(Fw::ComBuffer &data, U32 context)
Invoke a port interface.
Definition: ComPortAc.cpp:156
void init()
Initialization function.
Definition: LogPortAc.cpp:151
void invoke(FwEventIdType id, Fw::Time &timeTag, const Fw::LogSeverity &severity, Fw::LogBuffer &args)
Invoke a port interface.
Definition: LogPortAc.cpp:170
void addCallPort(InputLogPort *callPort)
Register an input port.
Definition: LogPortAc.cpp:157
void addCallPort(InputTimePort *callPort)
Register an input port.
Definition: TimePortAc.cpp:134
void invoke(Fw::Time &time)
Invoke a port interface.
Definition: TimePortAc.cpp:147
void init()
Initialization function.
Definition: TimePortAc.cpp:128
void addCallPort(InputTlmPort *callPort)
Register an input port.
Definition: TlmPortAc.cpp:150
void init()
Initialization function.
Definition: TlmPortAc.cpp:144
void invoke(FwChanIdType id, Fw::Time &timeTag, Fw::TlmBuffer &val)
Invoke a port interface.
Definition: TlmPortAc.cpp:163
bool isConnected()
Definition: PortBase.cpp:41
Os::Queue::Status createQueue(FwSizeType depth, FwSizeType msgSize)
Os::Queue m_queue
queue object for active component
@ MSG_DISPATCH_OK
Dispatch was normal.
@ MSG_DISPATCH_EXIT
A message was sent requesting an exit of the loop.
@ MSG_DISPATCH_ERROR
Errors dispatching messages.
NATIVE_UINT_TYPE SizeType
void resetDeser()
reset deserialization to beginning
Serializable::SizeType getBuffLeft() const
returns how much deserialization buffer is left
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
virtual const CHAR * toChar() const =0
void format(const CHAR *formatString,...)
write formatted string to buffer
Definition: StringBase.cpp:56
virtual SerializeStatus serialize(SerializeBufferBase &buffer) const
serialization function
Definition: StringBase.cpp:146
static constexpr SizeType BUFFER_SIZE(SizeType maxLength)
Get the size of a null-terminated string buffer.
Definition: StringBase.hpp:41
const char * toChar() const
Definition: String.hpp:50
Definition: Time.hpp:9
Status send(const U8 *buffer, FwSizeType size, FwQueuePriorityType priority, BlockingType blockType) override
send a message into the queue through delegate
Status receive(U8 *destination, FwSizeType capacity, BlockingType blockType, FwSizeType &actualSize, FwQueuePriorityType &priority) override
receive a message from the queue through delegate
BlockingType
message type
Definition: Queue.hpp:44
@ BLOCKING
Message will block until space is available.
Definition: Queue.hpp:45
@ NONBLOCKING
Message will return with status when space is unavailable.
Definition: Queue.hpp:46
Status
status returned from the queue send function
Definition: Queue.hpp:30
@ OP_OK
message sent/received okay
Definition: Queue.hpp:31
The stage of the file read operation.
@ SERIALIZED_SIZE
The size of the serial representation.
@ SERIALIZED_SIZE
The size of the serial representation.
virtual void CS_MANUAL_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
void CS_MANUAL_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
@ CHANNELID_CS_LOADCOMMANDS
Channel ID for CS_LoadCommands.
@ CHANNELID_CS_ERRORS
Channel ID for CS_Errors.
@ CHANNELID_CS_CANCELCOMMANDS
Channel ID for CS_CancelCommands.
@ CHANNELID_CS_COMMANDSEXECUTED
Channel ID for CS_CommandsExecuted.
@ CHANNELID_CS_SEQUENCESCOMPLETED
Channel ID for CS_SequencesCompleted.
void seqCancelIn_handlerBase(FwIndexType portNum)
Handler base-class function for input port seqCancelIn.
void log_WARNING_HI_CS_FileNotFound(const Fw::StringBase &fileName)
void log_WARNING_LO_CS_NoRecords(const Fw::StringBase &fileName)
Log event CS_NoRecords.
bool isConnected_seqStartOut_OutputPort(FwIndexType portNum)
bool isConnected_cmdResponseOut_OutputPort(FwIndexType portNum)
virtual void CS_STEP_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CS_STEP.
void log_ACTIVITY_HI_CS_CmdStepped(const Fw::StringBase &filename, U32 command)
FwIndexType getNum_cmdResponseOut_OutputPorts() const
virtual void CS_START_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CS_START.
virtual void cmdResponseIn_handler(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)=0
Handler for input port cmdResponseIn.
void tlmWrite_CS_CancelCommands(U32 arg, Fw::Time _tlmTime=Fw::Time())
virtual void seqRunIn_preMsgHook(FwIndexType portNum, const Fw::StringBase &filename)
Pre-message hook for async input port seqRunIn.
void seqDone_out(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)
Invoke output port seqDone.
void CS_RUN_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
virtual void CS_CANCEL_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CS_CANCEL.
bool isConnected_timeCaller_OutputPort(FwIndexType portNum)
void tlmWrite_CS_CommandsExecuted(U32 arg, Fw::Time _tlmTime=Fw::Time())
virtual void seqCancelIn_preMsgHook(FwIndexType portNum)
Pre-message hook for async input port seqCancelIn.
void cmdResponseIn_handlerBase(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)
Handler base-class function for input port cmdResponseIn.
void CS_CANCEL_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void seqRunIn_handlerBase(FwIndexType portNum, const Fw::StringBase &filename)
Handler base-class function for input port seqRunIn.
void log_WARNING_HI_CS_FileReadError(const Fw::StringBase &fileName)
Fw::InputCmdPort * get_cmdIn_InputPort(FwIndexType portNum)
virtual void pingIn_preMsgHook(FwIndexType portNum, U32 key)
Pre-message hook for async input port pingIn.
virtual ~CmdSequencerComponentBase()
Destroy CmdSequencerComponentBase object.
virtual void CS_START_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
void set_tlmOut_OutputPort(FwIndexType portNum, Fw::InputTlmPort *port)
Connect port to tlmOut[portNum].
void CS_START_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void seqStartOut_out(FwIndexType portNum, const Fw::StringBase &filename)
Invoke output port seqStartOut.
bool isConnected_cmdRegOut_OutputPort(FwIndexType portNum)
bool isConnected_pingOut_OutputPort(FwIndexType portNum)
void log_ACTIVITY_LO_CS_CommandComplete(const Fw::StringBase &fileName, U32 recordNumber, U32 opCode)
void log_WARNING_HI_CS_RecordMismatch(const Fw::StringBase &fileName, U32 header_records, U32 extra_bytes)
void schedIn_handlerBase(FwIndexType portNum, U32 context)
Handler base-class function for input port schedIn.
void log_WARNING_HI_CS_TimeBaseMismatch(const Fw::StringBase &fileName, U16 time_base, U16 seq_time_base)
void set_cmdResponseOut_OutputPort(FwIndexType portNum, Fw::InputCmdResponsePort *port)
Connect port to cmdResponseOut[portNum].
virtual void CS_STEP_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
virtual void CS_JOIN_WAIT_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
bool isConnected_seqDone_OutputPort(FwIndexType portNum)
void log_WARNING_HI_CS_TimeContextMismatch(const Fw::StringBase &fileName, U8 currTimeBase, U8 seqTimeBase)
virtual void CS_RUN_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CS_RUN.
Svc::InputCmdSeqCancelPort * get_seqCancelIn_InputPort(FwIndexType portNum)
virtual void CS_AUTO_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
@ EVENTID_CS_TIMEBASEMISMATCH
The running time base doesn't match the time base in the sequence files.
@ EVENTID_CS_UNEXPECTEDCOMPLETION
A command status came back when no sequence was running.
@ EVENTID_CS_CMDSTARTED
A manual sequence was started.
@ EVENTID_CS_RECORDINVALID
The format of a command record was invalid.
@ EVENTID_CS_FILECRCFAILURE
The sequence file validation failed.
@ EVENTID_CS_JOINWAITINGNOTCOMPLETE
Cannot run new sequence when current sequence file is still running.
@ EVENTID_CS_PORTSEQUENCESTARTED
A local port request to run a sequence was started.
@ EVENTID_CS_SEQUENCEVALID
A sequence passed validation.
@ EVENTID_CS_SEQUENCECANCELED
A command sequence was successfully canceled.
@ EVENTID_CS_FILENOTFOUND
The sequence file was not found.
@ EVENTID_CS_FILESIZEERROR
The sequence file was too large.
@ EVENTID_CS_TIMECONTEXTMISMATCH
The running time base doesn't match the time base in the sequence files.
@ EVENTID_CS_SEQUENCECOMPLETE
A command sequence successfully completed.
@ EVENTID_CS_SEQUENCETIMEOUT
A sequence passed validation.
@ EVENTID_CS_INVALIDMODE
The Command Sequencer received a command that was invalid for its current mode.
@ EVENTID_CS_NOSEQUENCEACTIVE
A sequence related command came with no active sequence.
@ EVENTID_CS_JOINWAITING
Wait for the current running sequence file complete.
@ EVENTID_CS_CMDSTEPPED
A command in a sequence was stepped through.
@ EVENTID_CS_COMMANDERROR
The Command Sequencer issued a command and received an error status in return.
@ EVENTID_CS_FILEREADERROR
The Sequence File Loader could not read the sequence file.
@ EVENTID_CS_SEQUENCELOADED
Sequence file was successfully loaded.
@ EVENTID_CS_COMMANDCOMPLETE
The Command Sequencer issued a command and received a success status in return.
@ EVENTID_CS_RECORDMISMATCH
Number of records in header doesn't match number in file.
@ EVENTID_CS_FILEINVALID
The sequence file format was invalid.
bool isConnected_tlmOut_OutputPort(FwIndexType portNum)
void log_ACTIVITY_HI_CS_SequenceComplete(const Fw::StringBase &fileName)
void log_WARNING_HI_CS_SequenceTimeout(const Fw::StringBase &filename, U32 command)
virtual void pingIn_handler(FwIndexType portNum, U32 key)=0
Handler for input port pingIn.
void tlmWrite_CS_Errors(U32 arg, Fw::Time _tlmTime=Fw::Time())
Svc::InputSchedPort * get_schedIn_InputPort(FwIndexType portNum)
Svc::InputCmdSeqInPort * get_seqRunIn_InputPort(FwIndexType portNum)
void pingOut_out(FwIndexType portNum, U32 key)
Invoke output port pingOut.
void set_timeCaller_OutputPort(FwIndexType portNum, Fw::InputTimePort *port)
Connect port to timeCaller[portNum].
void CS_AUTO_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void log_ACTIVITY_HI_CS_ModeSwitched(Svc::CmdSequencer_SeqMode mode)
Fw::InputCmdResponsePort * get_cmdResponseIn_InputPort(FwIndexType portNum)
void set_comCmdOut_OutputPort(FwIndexType portNum, Fw::InputComPort *port)
Connect port to comCmdOut[portNum].
void regCommands()
Register commands with the Command Dispatcher.
void set_seqDone_OutputPort(FwIndexType portNum, Fw::InputCmdResponsePort *port)
Connect port to seqDone[portNum].
virtual void CS_VALIDATE_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CS_VALIDATE.
void log_ACTIVITY_HI_CS_SequenceCanceled(const Fw::StringBase &fileName)
void log_WARNING_HI_CS_FileInvalid(const Fw::StringBase &fileName, Svc::CmdSequencer_FileReadStage stage, I32 error)
void log_WARNING_HI_CS_FileCrcFailure(const Fw::StringBase &fileName, U32 storedCRC, U32 computedCRC)
virtual void CS_MANUAL_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CS_MANUAL.
bool isConnected_logOut_OutputPort(FwIndexType portNum)
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
void log_ACTIVITY_HI_CS_PortSequenceStarted(const Fw::StringBase &filename)
bool isConnected_comCmdOut_OutputPort(FwIndexType portNum)
FwIndexType getNum_cmdResponseIn_InputPorts() const
void pingIn_handlerBase(FwIndexType portNum, U32 key)
Handler base-class function for input port pingIn.
void set_logOut_OutputPort(FwIndexType portNum, Fw::InputLogPort *port)
Connect port to logOut[portNum].
virtual void schedIn_handler(FwIndexType portNum, U32 context)=0
Handler for input port schedIn.
virtual void seqRunIn_handler(FwIndexType portNum, const Fw::StringBase &filename)=0
Handler for input port seqRunIn.
virtual void cmdResponseIn_preMsgHook(FwIndexType portNum, FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdResponse &response)
Pre-message hook for async input port cmdResponseIn.
void log_ACTIVITY_HI_CS_SequenceValid(const Fw::StringBase &filename)
void set_pingOut_OutputPort(FwIndexType portNum, Svc::InputPingPort *port)
Connect port to pingOut[portNum].
Svc::InputPingPort * get_pingIn_InputPort(FwIndexType portNum)
virtual void CS_CANCEL_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
void comCmdOut_out(FwIndexType portNum, Fw::ComBuffer &data, U32 context)
Invoke output port comCmdOut.
void CS_VALIDATE_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
FwIndexType getNum_seqStartOut_OutputPorts() const
void log_WARNING_HI_CS_RecordInvalid(const Fw::StringBase &fileName, U32 recordNumber, I32 error)
void CS_STEP_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void log_ACTIVITY_LO_CS_SequenceLoaded(const Fw::StringBase &fileName)
void log_WARNING_HI_CS_FileSizeError(const Fw::StringBase &fileName, U32 size)
virtual void CS_JOIN_WAIT_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CS_JOIN_WAIT.
virtual void schedIn_preMsgHook(FwIndexType portNum, U32 context)
Pre-message hook for async input port schedIn.
CmdSequencerComponentBase(const char *compName="")
Construct CmdSequencerComponentBase object.
virtual void CS_AUTO_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CS_AUTO.
virtual void CS_RUN_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &fileName, Svc::CmdSequencer_BlockState block)=0
void log_ACTIVITY_HI_CS_JoinWaiting(const Fw::StringBase &filename, U32 recordNumber, U32 opCode)
void set_cmdRegOut_OutputPort(FwIndexType portNum, Fw::InputCmdRegPort *port)
Connect port to cmdRegOut[portNum].
void CS_JOIN_WAIT_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void set_seqStartOut_OutputPort(FwIndexType portNum, Svc::InputCmdSeqInPort *port)
Connect port to seqStartOut[portNum].
@ OPCODE_CS_CANCEL
Cancel a command sequence.
@ OPCODE_CS_STEP
Perform one step in a command sequence. Valid only if CmdSequencer is in MANUAL run mode.
@ OPCODE_CS_MANUAL
Set the run mode to MANUAL.
@ OPCODE_CS_VALIDATE
Validate a command sequence file.
@ OPCODE_CS_RUN
Run a command sequence file.
@ OPCODE_CS_START
Start running a command sequence.
@ OPCODE_CS_AUTO
Set the run mode to AUTO.
@ OPCODE_CS_JOIN_WAIT
Wait for sequences that are running to finish. Allow user to run multiple seq files in SEQ_NO_BLOCK m...
void log_WARNING_HI_CS_CommandError(const Fw::StringBase &fileName, U32 recordNumber, U32 opCode, U32 errorStatus)
void log_ACTIVITY_HI_CS_CmdStarted(const Fw::StringBase &filename)
virtual void seqCancelIn_handler(FwIndexType portNum)=0
Handler for input port seqCancelIn.
void tlmWrite_CS_LoadCommands(U32 arg, Fw::Time _tlmTime=Fw::Time())
void tlmWrite_CS_SequencesCompleted(U32 arg, Fw::Time _tlmTime=Fw::Time())
virtual void CS_VALIDATE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq, const Fw::CmdStringArg &fileName)=0
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
Register a component.
void init()
Initialization function.
@ SERIALIZED_SIZE
The size of the serial representations of the port arguments.
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
Register a component.
void init()
Initialization function.
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
Register a component.
Definition: PingPortAc.cpp:62
void init()
Initialization function.
Definition: PingPortAc.cpp:56
@ SERIALIZED_SIZE
The size of the serial representations of the port arguments.
Definition: PingPortAc.hpp:36
@ SERIALIZED_SIZE
The size of the serial representations of the port arguments.
Definition: SchedPortAc.hpp:36
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
Register a component.
Definition: SchedPortAc.cpp:62
void init()
Initialization function.
Definition: SchedPortAc.cpp:56
void invoke(const Fw::StringBase &filename)
Invoke a port interface.
void init()
Initialization function.
void addCallPort(InputCmdSeqInPort *callPort)
Register an input port.
void invoke(U32 key)
Invoke a port interface.
Definition: PingPortAc.cpp:147
void init()
Initialization function.
Definition: PingPortAc.cpp:128
void addCallPort(InputPingPort *callPort)
Register an input port.
Definition: PingPortAc.cpp:134
SerializeStatus
forward declaration for string
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
const Time ZERO_TIME
Definition: Time.cpp:5
@ OP_OK
Operation succeeded.
Definition: Os.hpp:26