F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
LinuxSpiDriverComponentAc.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title LinuxSpiDriverComponentAc.cpp
3 // \author Generated by fpp-to-cpp
4 // \brief cpp file for LinuxSpiDriver 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 Drv {
15 
16  // ----------------------------------------------------------------------
17  // Component initialization
18  // ----------------------------------------------------------------------
19 
21  init(FwEnumStoreType instance)
22  {
23  // Initialize base class
25 
26  // Connect input port SpiReadWrite
27  for (
28  FwIndexType port = 0;
29  port < static_cast<FwIndexType>(this->getNum_SpiReadWrite_InputPorts());
30  port++
31  ) {
32  this->m_SpiReadWrite_InputPort[port].init();
33  this->m_SpiReadWrite_InputPort[port].addCallComp(
34  this,
35  m_p_SpiReadWrite_in
36  );
37  this->m_SpiReadWrite_InputPort[port].setPortNum(port);
38 
39 #if FW_OBJECT_NAMES == 1
40  Fw::ObjectName portName;
41  portName.format(
42  "%s_SpiReadWrite_InputPort[%" PRI_PlatformIntType "]",
43  this->m_objName.toChar(),
44  port
45  );
46  this->m_SpiReadWrite_InputPort[port].setObjName(portName.toChar());
47 #endif
48  }
49 
50  // Connect output port Log
51  for (
52  FwIndexType port = 0;
53  port < static_cast<FwIndexType>(this->getNum_Log_OutputPorts());
54  port++
55  ) {
56  this->m_Log_OutputPort[port].init();
57 
58 #if FW_OBJECT_NAMES == 1
59  Fw::ObjectName portName;
60  portName.format(
61  "%s_Log_OutputPort[%" PRI_PlatformIntType "]",
62  this->m_objName.toChar(),
63  port
64  );
65  this->m_Log_OutputPort[port].setObjName(portName.toChar());
66 #endif
67  }
68 
69 #if FW_ENABLE_TEXT_LOGGING == 1
70  // Connect output port LogText
71  for (
72  FwIndexType port = 0;
73  port < static_cast<FwIndexType>(this->getNum_LogText_OutputPorts());
74  port++
75  ) {
76  this->m_LogText_OutputPort[port].init();
77 
78 #if FW_OBJECT_NAMES == 1
79  Fw::ObjectName portName;
80  portName.format(
81  "%s_LogText_OutputPort[%" PRI_PlatformIntType "]",
82  this->m_objName.toChar(),
83  port
84  );
85  this->m_LogText_OutputPort[port].setObjName(portName.toChar());
86 #endif
87  }
88 #endif
89 
90  // Connect output port Time
91  for (
92  FwIndexType port = 0;
93  port < static_cast<FwIndexType>(this->getNum_Time_OutputPorts());
94  port++
95  ) {
96  this->m_Time_OutputPort[port].init();
97 
98 #if FW_OBJECT_NAMES == 1
99  Fw::ObjectName portName;
100  portName.format(
101  "%s_Time_OutputPort[%" PRI_PlatformIntType "]",
102  this->m_objName.toChar(),
103  port
104  );
105  this->m_Time_OutputPort[port].setObjName(portName.toChar());
106 #endif
107  }
108 
109  // Connect output port Tlm
110  for (
111  FwIndexType port = 0;
112  port < static_cast<FwIndexType>(this->getNum_Tlm_OutputPorts());
113  port++
114  ) {
115  this->m_Tlm_OutputPort[port].init();
116 
117 #if FW_OBJECT_NAMES == 1
118  Fw::ObjectName portName;
119  portName.format(
120  "%s_Tlm_OutputPort[%" PRI_PlatformIntType "]",
121  this->m_objName.toChar(),
122  port
123  );
124  this->m_Tlm_OutputPort[port].setObjName(portName.toChar());
125 #endif
126  }
127  }
128 
129  // ----------------------------------------------------------------------
130  // Getters for typed input ports
131  // ----------------------------------------------------------------------
132 
135  {
136  FW_ASSERT(
137  portNum < this->getNum_SpiReadWrite_InputPorts(),
138  static_cast<FwAssertArgType>(portNum)
139  );
140 
141  return &this->m_SpiReadWrite_InputPort[portNum];
142  }
143 
144  // ----------------------------------------------------------------------
145  // Connect input ports to special output ports
146  // ----------------------------------------------------------------------
147 
150  FwIndexType portNum,
151  Fw::InputLogPort* port
152  )
153  {
154  FW_ASSERT(
155  portNum < this->getNum_Log_OutputPorts(),
156  static_cast<FwAssertArgType>(portNum)
157  );
158 
159  this->m_Log_OutputPort[portNum].addCallPort(port);
160  }
161 
162 #if FW_ENABLE_TEXT_LOGGING == 1
163 
164  void LinuxSpiDriverComponentBase ::
165  set_LogText_OutputPort(
166  FwIndexType portNum,
168  )
169  {
170  FW_ASSERT(
171  portNum < this->getNum_LogText_OutputPorts(),
172  static_cast<FwAssertArgType>(portNum)
173  );
174 
175  this->m_LogText_OutputPort[portNum].addCallPort(port);
176  }
177 
178 #endif
179 
182  FwIndexType portNum,
183  Fw::InputTimePort* port
184  )
185  {
186  FW_ASSERT(
187  portNum < this->getNum_Time_OutputPorts(),
188  static_cast<FwAssertArgType>(portNum)
189  );
190 
191  this->m_Time_OutputPort[portNum].addCallPort(port);
192  }
193 
196  FwIndexType portNum,
197  Fw::InputTlmPort* port
198  )
199  {
200  FW_ASSERT(
201  portNum < this->getNum_Tlm_OutputPorts(),
202  static_cast<FwAssertArgType>(portNum)
203  );
204 
205  this->m_Tlm_OutputPort[portNum].addCallPort(port);
206  }
207 
208 #if FW_PORT_SERIALIZATION
209 
210  // ----------------------------------------------------------------------
211  // Connect serial input ports to special output ports
212  // ----------------------------------------------------------------------
213 
216  FwIndexType portNum,
217  Fw::InputSerializePort* port
218  )
219  {
220  FW_ASSERT(
221  portNum < this->getNum_Log_OutputPorts(),
222  static_cast<FwAssertArgType>(portNum)
223  );
224 
225  this->m_Log_OutputPort[portNum].registerSerialPort(port);
226  }
227 
228 #if FW_ENABLE_TEXT_LOGGING == 1
229 
230  void LinuxSpiDriverComponentBase ::
231  set_LogText_OutputPort(
232  FwIndexType portNum,
233  Fw::InputSerializePort* port
234  )
235  {
236  FW_ASSERT(
237  portNum < this->getNum_LogText_OutputPorts(),
238  static_cast<FwAssertArgType>(portNum)
239  );
240 
241  this->m_LogText_OutputPort[portNum].registerSerialPort(port);
242  }
243 
244 #endif
245 
248  FwIndexType portNum,
249  Fw::InputSerializePort* port
250  )
251  {
252  FW_ASSERT(
253  portNum < this->getNum_Time_OutputPorts(),
254  static_cast<FwAssertArgType>(portNum)
255  );
256 
257  this->m_Time_OutputPort[portNum].registerSerialPort(port);
258  }
259 
262  FwIndexType portNum,
263  Fw::InputSerializePort* port
264  )
265  {
266  FW_ASSERT(
267  portNum < this->getNum_Tlm_OutputPorts(),
268  static_cast<FwAssertArgType>(portNum)
269  );
270 
271  this->m_Tlm_OutputPort[portNum].registerSerialPort(port);
272  }
273 
274 #endif
275 
276  // ----------------------------------------------------------------------
277  // Component construction and destruction
278  // ----------------------------------------------------------------------
279 
281  LinuxSpiDriverComponentBase(const char* compName) :
282  Fw::PassiveComponentBase(compName)
283  {
284  this->m_SPI_WriteErrorThrottle = 0;
285  }
286 
289  {
290 
291  }
292 
293  // ----------------------------------------------------------------------
294  // Getters for numbers of typed input ports
295  // ----------------------------------------------------------------------
296 
299  {
300  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_SpiReadWrite_InputPort));
301  }
302 
303  // ----------------------------------------------------------------------
304  // Getters for numbers of special output ports
305  // ----------------------------------------------------------------------
306 
309  {
310  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_Log_OutputPort));
311  }
312 
313 #if FW_ENABLE_TEXT_LOGGING == 1
314 
315  FwIndexType LinuxSpiDriverComponentBase ::
316  getNum_LogText_OutputPorts() const
317  {
318  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_LogText_OutputPort));
319  }
320 
321 #endif
322 
325  {
326  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_Time_OutputPort));
327  }
328 
331  {
332  return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_Tlm_OutputPort));
333  }
334 
335  // ----------------------------------------------------------------------
336  // Connection status queries for special output ports
337  // ----------------------------------------------------------------------
338 
341  {
342  FW_ASSERT(
343  portNum < this->getNum_Log_OutputPorts(),
344  static_cast<FwAssertArgType>(portNum)
345  );
346 
347  return this->m_Log_OutputPort[portNum].isConnected();
348  }
349 
350 #if FW_ENABLE_TEXT_LOGGING == 1
351 
352  bool LinuxSpiDriverComponentBase ::
353  isConnected_LogText_OutputPort(FwIndexType portNum)
354  {
355  FW_ASSERT(
356  portNum < this->getNum_LogText_OutputPorts(),
357  static_cast<FwAssertArgType>(portNum)
358  );
359 
360  return this->m_LogText_OutputPort[portNum].isConnected();
361  }
362 
363 #endif
364 
367  {
368  FW_ASSERT(
369  portNum < this->getNum_Time_OutputPorts(),
370  static_cast<FwAssertArgType>(portNum)
371  );
372 
373  return this->m_Time_OutputPort[portNum].isConnected();
374  }
375 
378  {
379  FW_ASSERT(
380  portNum < this->getNum_Tlm_OutputPorts(),
381  static_cast<FwAssertArgType>(portNum)
382  );
383 
384  return this->m_Tlm_OutputPort[portNum].isConnected();
385  }
386 
387  // ----------------------------------------------------------------------
388  // Port handler base-class functions for typed input ports
389  //
390  // Call these functions directly to bypass the corresponding ports
391  // ----------------------------------------------------------------------
392 
395  FwIndexType portNum,
396  Fw::Buffer& writeBuffer,
397  Fw::Buffer& readBuffer
398  )
399  {
400  // Make sure port number is valid
401  FW_ASSERT(
402  portNum < this->getNum_SpiReadWrite_InputPorts(),
403  static_cast<FwAssertArgType>(portNum)
404  );
405 
406  // Call handler function
407  this->SpiReadWrite_handler(
408  portNum,
409  writeBuffer,
410  readBuffer
411  );
412  }
413 
414  // ----------------------------------------------------------------------
415  // Event logging functions
416  // ----------------------------------------------------------------------
417 
420  I32 device,
421  I32 select,
422  I32 error
423  )
424  {
425  // Get the time
426  Fw::Time _logTime;
427  if (this->m_Time_OutputPort[0].isConnected()) {
428  this->m_Time_OutputPort[0].invoke(_logTime);
429  }
430 
431  FwEventIdType _id = static_cast<FwEventIdType>(0);
432 
433  _id = this->getIdBase() + EVENTID_SPI_OPENERROR;
434 
435  // Emit the event on the log port
436  if (this->m_Log_OutputPort[0].isConnected()) {
437  Fw::LogBuffer _logBuff;
439 
440 #if FW_AMPCS_COMPATIBLE
441  // Serialize the number of arguments
442  _status = _logBuff.serialize(static_cast<U8>(3));
443  FW_ASSERT(
444  _status == Fw::FW_SERIALIZE_OK,
445  static_cast<FwAssertArgType>(_status)
446  );
447 #endif
448 
449 #if FW_AMPCS_COMPATIBLE
450  // Serialize the argument size
451  _status = _logBuff.serialize(
452  static_cast<U8>(sizeof(I32))
453  );
454  FW_ASSERT(
455  _status == Fw::FW_SERIALIZE_OK,
456  static_cast<FwAssertArgType>(_status)
457  );
458 #endif
459  _status = _logBuff.serialize(device);
460  FW_ASSERT(
461  _status == Fw::FW_SERIALIZE_OK,
462  static_cast<FwAssertArgType>(_status)
463  );
464 
465 #if FW_AMPCS_COMPATIBLE
466  // Serialize the argument size
467  _status = _logBuff.serialize(
468  static_cast<U8>(sizeof(I32))
469  );
470  FW_ASSERT(
471  _status == Fw::FW_SERIALIZE_OK,
472  static_cast<FwAssertArgType>(_status)
473  );
474 #endif
475  _status = _logBuff.serialize(select);
476  FW_ASSERT(
477  _status == Fw::FW_SERIALIZE_OK,
478  static_cast<FwAssertArgType>(_status)
479  );
480 
481 #if FW_AMPCS_COMPATIBLE
482  // Serialize the argument size
483  _status = _logBuff.serialize(
484  static_cast<U8>(sizeof(I32))
485  );
486  FW_ASSERT(
487  _status == Fw::FW_SERIALIZE_OK,
488  static_cast<FwAssertArgType>(_status)
489  );
490 #endif
491  _status = _logBuff.serialize(error);
492  FW_ASSERT(
493  _status == Fw::FW_SERIALIZE_OK,
494  static_cast<FwAssertArgType>(_status)
495  );
496 
497  this->m_Log_OutputPort[0].invoke(
498  _id,
499  _logTime,
501  _logBuff
502  );
503  }
504 
505  // Emit the event on the text log port
506 #if FW_ENABLE_TEXT_LOGGING
507  if (this->m_LogText_OutputPort[0].isConnected()) {
508 #if FW_OBJECT_NAMES == 1
509  const char* _formatString =
510  "(%s) %s: Error opening SPI device %" PRIi32 ".%" PRIi32 ": %" PRIi32 "";
511 #else
512  const char* _formatString =
513  "%s: Error opening SPI device %" PRIi32 ".%" PRIi32 ": %" PRIi32 "";
514 #endif
515 
516  Fw::TextLogString _logString;
517  _logString.format(
518  _formatString,
519 #if FW_OBJECT_NAMES == 1
520  this->m_objName.toChar(),
521 #endif
522  "SPI_OpenError ",
523  device,
524  select,
525  error
526  );
527 
528  this->m_LogText_OutputPort[0].invoke(
529  _id,
530  _logTime,
532  _logString
533  );
534  }
535 #endif
536  }
537 
540  I32 device,
541  I32 select,
542  I32 error
543  )
544  {
545  // Get the time
546  Fw::Time _logTime;
547  if (this->m_Time_OutputPort[0].isConnected()) {
548  this->m_Time_OutputPort[0].invoke(_logTime);
549  }
550 
551  FwEventIdType _id = static_cast<FwEventIdType>(0);
552 
553  _id = this->getIdBase() + EVENTID_SPI_CONFIGERROR;
554 
555  // Emit the event on the log port
556  if (this->m_Log_OutputPort[0].isConnected()) {
557  Fw::LogBuffer _logBuff;
559 
560 #if FW_AMPCS_COMPATIBLE
561  // Serialize the number of arguments
562  _status = _logBuff.serialize(static_cast<U8>(3));
563  FW_ASSERT(
564  _status == Fw::FW_SERIALIZE_OK,
565  static_cast<FwAssertArgType>(_status)
566  );
567 #endif
568 
569 #if FW_AMPCS_COMPATIBLE
570  // Serialize the argument size
571  _status = _logBuff.serialize(
572  static_cast<U8>(sizeof(I32))
573  );
574  FW_ASSERT(
575  _status == Fw::FW_SERIALIZE_OK,
576  static_cast<FwAssertArgType>(_status)
577  );
578 #endif
579  _status = _logBuff.serialize(device);
580  FW_ASSERT(
581  _status == Fw::FW_SERIALIZE_OK,
582  static_cast<FwAssertArgType>(_status)
583  );
584 
585 #if FW_AMPCS_COMPATIBLE
586  // Serialize the argument size
587  _status = _logBuff.serialize(
588  static_cast<U8>(sizeof(I32))
589  );
590  FW_ASSERT(
591  _status == Fw::FW_SERIALIZE_OK,
592  static_cast<FwAssertArgType>(_status)
593  );
594 #endif
595  _status = _logBuff.serialize(select);
596  FW_ASSERT(
597  _status == Fw::FW_SERIALIZE_OK,
598  static_cast<FwAssertArgType>(_status)
599  );
600 
601 #if FW_AMPCS_COMPATIBLE
602  // Serialize the argument size
603  _status = _logBuff.serialize(
604  static_cast<U8>(sizeof(I32))
605  );
606  FW_ASSERT(
607  _status == Fw::FW_SERIALIZE_OK,
608  static_cast<FwAssertArgType>(_status)
609  );
610 #endif
611  _status = _logBuff.serialize(error);
612  FW_ASSERT(
613  _status == Fw::FW_SERIALIZE_OK,
614  static_cast<FwAssertArgType>(_status)
615  );
616 
617  this->m_Log_OutputPort[0].invoke(
618  _id,
619  _logTime,
621  _logBuff
622  );
623  }
624 
625  // Emit the event on the text log port
626 #if FW_ENABLE_TEXT_LOGGING
627  if (this->m_LogText_OutputPort[0].isConnected()) {
628 #if FW_OBJECT_NAMES == 1
629  const char* _formatString =
630  "(%s) %s: Error configuring SPI device %" PRIi32 ".%" PRIi32 ": %" PRIi32 "";
631 #else
632  const char* _formatString =
633  "%s: Error configuring SPI device %" PRIi32 ".%" PRIi32 ": %" PRIi32 "";
634 #endif
635 
636  Fw::TextLogString _logString;
637  _logString.format(
638  _formatString,
639 #if FW_OBJECT_NAMES == 1
640  this->m_objName.toChar(),
641 #endif
642  "SPI_ConfigError ",
643  device,
644  select,
645  error
646  );
647 
648  this->m_LogText_OutputPort[0].invoke(
649  _id,
650  _logTime,
652  _logString
653  );
654  }
655 #endif
656  }
657 
660  I32 device,
661  I32 select,
662  I32 error
663  )
664  {
665  // Check throttle value
666  if (this->m_SPI_WriteErrorThrottle >= EVENTID_SPI_WRITEERROR_THROTTLE) {
667  return;
668  }
669  else {
670  this->m_SPI_WriteErrorThrottle++;
671  }
672 
673  // Get the time
674  Fw::Time _logTime;
675  if (this->m_Time_OutputPort[0].isConnected()) {
676  this->m_Time_OutputPort[0].invoke(_logTime);
677  }
678 
679  FwEventIdType _id = static_cast<FwEventIdType>(0);
680 
681  _id = this->getIdBase() + EVENTID_SPI_WRITEERROR;
682 
683  // Emit the event on the log port
684  if (this->m_Log_OutputPort[0].isConnected()) {
685  Fw::LogBuffer _logBuff;
687 
688 #if FW_AMPCS_COMPATIBLE
689  // Serialize the number of arguments
690  _status = _logBuff.serialize(static_cast<U8>(3));
691  FW_ASSERT(
692  _status == Fw::FW_SERIALIZE_OK,
693  static_cast<FwAssertArgType>(_status)
694  );
695 #endif
696 
697 #if FW_AMPCS_COMPATIBLE
698  // Serialize the argument size
699  _status = _logBuff.serialize(
700  static_cast<U8>(sizeof(I32))
701  );
702  FW_ASSERT(
703  _status == Fw::FW_SERIALIZE_OK,
704  static_cast<FwAssertArgType>(_status)
705  );
706 #endif
707  _status = _logBuff.serialize(device);
708  FW_ASSERT(
709  _status == Fw::FW_SERIALIZE_OK,
710  static_cast<FwAssertArgType>(_status)
711  );
712 
713 #if FW_AMPCS_COMPATIBLE
714  // Serialize the argument size
715  _status = _logBuff.serialize(
716  static_cast<U8>(sizeof(I32))
717  );
718  FW_ASSERT(
719  _status == Fw::FW_SERIALIZE_OK,
720  static_cast<FwAssertArgType>(_status)
721  );
722 #endif
723  _status = _logBuff.serialize(select);
724  FW_ASSERT(
725  _status == Fw::FW_SERIALIZE_OK,
726  static_cast<FwAssertArgType>(_status)
727  );
728 
729 #if FW_AMPCS_COMPATIBLE
730  // Serialize the argument size
731  _status = _logBuff.serialize(
732  static_cast<U8>(sizeof(I32))
733  );
734  FW_ASSERT(
735  _status == Fw::FW_SERIALIZE_OK,
736  static_cast<FwAssertArgType>(_status)
737  );
738 #endif
739  _status = _logBuff.serialize(error);
740  FW_ASSERT(
741  _status == Fw::FW_SERIALIZE_OK,
742  static_cast<FwAssertArgType>(_status)
743  );
744 
745  this->m_Log_OutputPort[0].invoke(
746  _id,
747  _logTime,
749  _logBuff
750  );
751  }
752 
753  // Emit the event on the text log port
754 #if FW_ENABLE_TEXT_LOGGING
755  if (this->m_LogText_OutputPort[0].isConnected()) {
756 #if FW_OBJECT_NAMES == 1
757  const char* _formatString =
758  "(%s) %s: Error writing/reading SPI device %" PRIi32 ".%" PRIi32 ": %" PRIi32 "";
759 #else
760  const char* _formatString =
761  "%s: Error writing/reading SPI device %" PRIi32 ".%" PRIi32 ": %" PRIi32 "";
762 #endif
763 
764  Fw::TextLogString _logString;
765  _logString.format(
766  _formatString,
767 #if FW_OBJECT_NAMES == 1
768  this->m_objName.toChar(),
769 #endif
770  "SPI_WriteError ",
771  device,
772  select,
773  error
774  );
775 
776  this->m_LogText_OutputPort[0].invoke(
777  _id,
778  _logTime,
780  _logString
781  );
782  }
783 #endif
784  }
785 
788  I32 device,
789  I32 select
790  )
791  {
792  // Get the time
793  Fw::Time _logTime;
794  if (this->m_Time_OutputPort[0].isConnected()) {
795  this->m_Time_OutputPort[0].invoke(_logTime);
796  }
797 
798  FwEventIdType _id = static_cast<FwEventIdType>(0);
799 
800  _id = this->getIdBase() + EVENTID_SPI_PORTOPENED;
801 
802  // Emit the event on the log port
803  if (this->m_Log_OutputPort[0].isConnected()) {
804  Fw::LogBuffer _logBuff;
806 
807 #if FW_AMPCS_COMPATIBLE
808  // Serialize the number of arguments
809  _status = _logBuff.serialize(static_cast<U8>(2));
810  FW_ASSERT(
811  _status == Fw::FW_SERIALIZE_OK,
812  static_cast<FwAssertArgType>(_status)
813  );
814 #endif
815 
816 #if FW_AMPCS_COMPATIBLE
817  // Serialize the argument size
818  _status = _logBuff.serialize(
819  static_cast<U8>(sizeof(I32))
820  );
821  FW_ASSERT(
822  _status == Fw::FW_SERIALIZE_OK,
823  static_cast<FwAssertArgType>(_status)
824  );
825 #endif
826  _status = _logBuff.serialize(device);
827  FW_ASSERT(
828  _status == Fw::FW_SERIALIZE_OK,
829  static_cast<FwAssertArgType>(_status)
830  );
831 
832 #if FW_AMPCS_COMPATIBLE
833  // Serialize the argument size
834  _status = _logBuff.serialize(
835  static_cast<U8>(sizeof(I32))
836  );
837  FW_ASSERT(
838  _status == Fw::FW_SERIALIZE_OK,
839  static_cast<FwAssertArgType>(_status)
840  );
841 #endif
842  _status = _logBuff.serialize(select);
843  FW_ASSERT(
844  _status == Fw::FW_SERIALIZE_OK,
845  static_cast<FwAssertArgType>(_status)
846  );
847 
848  this->m_Log_OutputPort[0].invoke(
849  _id,
850  _logTime,
852  _logBuff
853  );
854  }
855 
856  // Emit the event on the text log port
857 #if FW_ENABLE_TEXT_LOGGING
858  if (this->m_LogText_OutputPort[0].isConnected()) {
859 #if FW_OBJECT_NAMES == 1
860  const char* _formatString =
861  "(%s) %s: SPI Device %" PRIi32 ".%" PRIi32 " configured";
862 #else
863  const char* _formatString =
864  "%s: SPI Device %" PRIi32 ".%" PRIi32 " configured";
865 #endif
866 
867  Fw::TextLogString _logString;
868  _logString.format(
869  _formatString,
870 #if FW_OBJECT_NAMES == 1
871  this->m_objName.toChar(),
872 #endif
873  "SPI_PortOpened ",
874  device,
875  select
876  );
877 
878  this->m_LogText_OutputPort[0].invoke(
879  _id,
880  _logTime,
882  _logString
883  );
884  }
885 #endif
886  }
887 
888  // ----------------------------------------------------------------------
889  // Event throttle reset functions
890  // ----------------------------------------------------------------------
891 
894  {
895  // Reset throttle counter
896  this->m_SPI_WriteErrorThrottle = 0;
897  }
898 
899  // ----------------------------------------------------------------------
900  // Telemetry write functions
901  // ----------------------------------------------------------------------
902 
905  U32 arg,
906  Fw::Time _tlmTime
907  )
908  {
909  if (this->m_Tlm_OutputPort[0].isConnected()) {
910  if (
911  this->m_Time_OutputPort[0].isConnected() &&
912  (_tlmTime == Fw::ZERO_TIME)
913  ) {
914  this->m_Time_OutputPort[0].invoke(_tlmTime);
915  }
916 
917  Fw::TlmBuffer _tlmBuff;
918  Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
919  FW_ASSERT(
920  _stat == Fw::FW_SERIALIZE_OK,
921  static_cast<FwAssertArgType>(_stat)
922  );
923 
924  FwChanIdType _id;
925 
926  _id = this->getIdBase() + CHANNELID_SPI_BYTES;
927 
928  this->m_Tlm_OutputPort[0].invoke(
929  _id,
930  _tlmTime,
931  _tlmBuff
932  );
933  }
934  }
935 
936  // ----------------------------------------------------------------------
937  // Time
938  // ----------------------------------------------------------------------
939 
941  getTime()
942  {
943  if (this->m_Time_OutputPort[0].isConnected()) {
944  Fw::Time _time;
945  this->m_Time_OutputPort[0].invoke(_time);
946  return _time;
947  }
948  else {
949  return Fw::Time(TB_NONE, 0, 0);
950  }
951  }
952 
953  // ----------------------------------------------------------------------
954  // Calls for messages received on typed input ports
955  // ----------------------------------------------------------------------
956 
957  void LinuxSpiDriverComponentBase ::
958  m_p_SpiReadWrite_in(
959  Fw::PassiveComponentBase* callComp,
960  FwIndexType portNum,
961  Fw::Buffer& writeBuffer,
962  Fw::Buffer& readBuffer
963  )
964  {
965  FW_ASSERT(callComp);
966  LinuxSpiDriverComponentBase* compPtr = static_cast<LinuxSpiDriverComponentBase*>(callComp);
967  compPtr->SpiReadWrite_handlerBase(
968  portNum,
969  writeBuffer,
970  readBuffer
971  );
972  }
973 
974 }
#define FW_ASSERT(...)
Definition: Assert.hpp:14
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
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
Input SpiReadWrite port.
void addCallComp(Fw::PassiveComponentBase *callComp, CompFuncPtr funcPtr)
Register a component.
void init()
Initialization function.
Auto-generated base for LinuxSpiDriver component.
void log_WARNING_HI_SPI_WriteError(I32 device, I32 select, I32 error)
void set_Time_OutputPort(FwIndexType portNum, Fw::InputTimePort *port)
Connect port to Time[portNum].
void set_Tlm_OutputPort(FwIndexType portNum, Fw::InputTlmPort *port)
Connect port to Tlm[portNum].
LinuxSpiDriverComponentBase(const char *compName="")
Construct LinuxSpiDriverComponentBase object.
void tlmWrite_SPI_Bytes(U32 arg, Fw::Time _tlmTime=Fw::Time())
void log_WARNING_HI_SPI_WriteError_ThrottleClear()
Reset throttle value for SPI_WriteError.
Drv::InputSpiReadWritePort * get_SpiReadWrite_InputPort(FwIndexType portNum)
void log_WARNING_HI_SPI_ConfigError(I32 device, I32 select, I32 error)
bool isConnected_Tlm_OutputPort(FwIndexType portNum)
void log_ACTIVITY_HI_SPI_PortOpened(I32 device, I32 select)
@ CHANNELID_SPI_BYTES
Channel ID for SPI_Bytes.
bool isConnected_Log_OutputPort(FwIndexType portNum)
bool isConnected_Time_OutputPort(FwIndexType portNum)
@ EVENTID_SPI_WRITEERROR_THROTTLE
Throttle reset count for SPI_WriteError.
virtual ~LinuxSpiDriverComponentBase()
Destroy LinuxSpiDriverComponentBase object.
virtual void SpiReadWrite_handler(FwIndexType portNum, Fw::Buffer &writeBuffer, Fw::Buffer &readBuffer)=0
Handler for input port SpiReadWrite.
void set_Log_OutputPort(FwIndexType portNum, Fw::InputLogPort *port)
Connect port to Log[portNum].
void SpiReadWrite_handlerBase(FwIndexType portNum, Fw::Buffer &writeBuffer, Fw::Buffer &readBuffer)
Handler base-class function for input port SpiReadWrite.
void log_WARNING_HI_SPI_OpenError(I32 device, I32 select, I32 error)
void setPortNum(NATIVE_INT_TYPE portNum)
@ WARNING_HI
A serious but recoverable event.
@ ACTIVITY_HI
Important informational events.
void init()
Object initializer.
Definition: ObjBase.cpp:27
const char * toChar() const
Definition: ObjectName.hpp:50
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
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
void format(const CHAR *formatString,...)
write formatted string to buffer
Definition: StringBase.cpp:56
Definition: Time.hpp:9
SerializeStatus
forward declaration for string
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
const Time ZERO_TIME
Definition: Time.cpp:5