F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
Loading...
Searching...
No Matches
BufferManagerComponentAc.cpp
Go to the documentation of this file.
1// ======================================================================
2// \title BufferManagerComponentAc.cpp
3// \author Generated by fpp-to-cpp
4// \brief cpp file for BufferManager 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
14namespace Svc {
15
16 // ----------------------------------------------------------------------
17 // Component initialization
18 // ----------------------------------------------------------------------
19
20 void BufferManagerComponentBase ::
21 init(FwEnumStoreType instance)
22 {
23 // Initialize base class
25
26 // Connect input port bufferGetCallee
27 for (
28 FwIndexType port = 0;
29 port < static_cast<FwIndexType>(this->getNum_bufferGetCallee_InputPorts());
30 port++
31 ) {
32 this->m_bufferGetCallee_InputPort[port].init();
33 this->m_bufferGetCallee_InputPort[port].addCallComp(
34 this,
35 m_p_bufferGetCallee_in
36 );
37 this->m_bufferGetCallee_InputPort[port].setPortNum(port);
38
39#if FW_OBJECT_NAMES == 1
40 Fw::ObjectName portName;
41 portName.format(
42 "%s_bufferGetCallee_InputPort[%" PRI_PlatformIntType "]",
43 this->m_objName.toChar(),
44 port
45 );
46 this->m_bufferGetCallee_InputPort[port].setObjName(portName.toChar());
47#endif
48 }
49
50 // Connect input port bufferSendIn
51 for (
52 FwIndexType port = 0;
53 port < static_cast<FwIndexType>(this->getNum_bufferSendIn_InputPorts());
54 port++
55 ) {
56 this->m_bufferSendIn_InputPort[port].init();
57 this->m_bufferSendIn_InputPort[port].addCallComp(
58 this,
59 m_p_bufferSendIn_in
60 );
61 this->m_bufferSendIn_InputPort[port].setPortNum(port);
62
63#if FW_OBJECT_NAMES == 1
64 Fw::ObjectName portName;
65 portName.format(
66 "%s_bufferSendIn_InputPort[%" PRI_PlatformIntType "]",
67 this->m_objName.toChar(),
68 port
69 );
70 this->m_bufferSendIn_InputPort[port].setObjName(portName.toChar());
71#endif
72 }
73
74 // Connect input port schedIn
75 for (
76 FwIndexType port = 0;
77 port < static_cast<FwIndexType>(this->getNum_schedIn_InputPorts());
78 port++
79 ) {
80 this->m_schedIn_InputPort[port].init();
81 this->m_schedIn_InputPort[port].addCallComp(
82 this,
83 m_p_schedIn_in
84 );
85 this->m_schedIn_InputPort[port].setPortNum(port);
86
87#if FW_OBJECT_NAMES == 1
88 Fw::ObjectName portName;
89 portName.format(
90 "%s_schedIn_InputPort[%" PRI_PlatformIntType "]",
91 this->m_objName.toChar(),
92 port
93 );
94 this->m_schedIn_InputPort[port].setObjName(portName.toChar());
95#endif
96 }
97
98 // Connect output port eventOut
99 for (
100 FwIndexType port = 0;
101 port < static_cast<FwIndexType>(this->getNum_eventOut_OutputPorts());
102 port++
103 ) {
104 this->m_eventOut_OutputPort[port].init();
105
106#if FW_OBJECT_NAMES == 1
107 Fw::ObjectName portName;
108 portName.format(
109 "%s_eventOut_OutputPort[%" PRI_PlatformIntType "]",
110 this->m_objName.toChar(),
111 port
112 );
113 this->m_eventOut_OutputPort[port].setObjName(portName.toChar());
114#endif
115 }
116
117#if FW_ENABLE_TEXT_LOGGING == 1
118 // Connect output port textEventOut
119 for (
120 FwIndexType port = 0;
121 port < static_cast<FwIndexType>(this->getNum_textEventOut_OutputPorts());
122 port++
123 ) {
124 this->m_textEventOut_OutputPort[port].init();
125
126#if FW_OBJECT_NAMES == 1
127 Fw::ObjectName portName;
128 portName.format(
129 "%s_textEventOut_OutputPort[%" PRI_PlatformIntType "]",
130 this->m_objName.toChar(),
131 port
132 );
133 this->m_textEventOut_OutputPort[port].setObjName(portName.toChar());
134#endif
135 }
136#endif
137
138 // Connect output port timeCaller
139 for (
140 FwIndexType port = 0;
141 port < static_cast<FwIndexType>(this->getNum_timeCaller_OutputPorts());
142 port++
143 ) {
144 this->m_timeCaller_OutputPort[port].init();
145
146#if FW_OBJECT_NAMES == 1
147 Fw::ObjectName portName;
148 portName.format(
149 "%s_timeCaller_OutputPort[%" PRI_PlatformIntType "]",
150 this->m_objName.toChar(),
151 port
152 );
153 this->m_timeCaller_OutputPort[port].setObjName(portName.toChar());
154#endif
155 }
156
157 // Connect output port tlmOut
158 for (
159 FwIndexType port = 0;
160 port < static_cast<FwIndexType>(this->getNum_tlmOut_OutputPorts());
161 port++
162 ) {
163 this->m_tlmOut_OutputPort[port].init();
164
165#if FW_OBJECT_NAMES == 1
166 Fw::ObjectName portName;
167 portName.format(
168 "%s_tlmOut_OutputPort[%" PRI_PlatformIntType "]",
169 this->m_objName.toChar(),
170 port
171 );
172 this->m_tlmOut_OutputPort[port].setObjName(portName.toChar());
173#endif
174 }
175 }
176
177 // ----------------------------------------------------------------------
178 // Getters for typed input ports
179 // ----------------------------------------------------------------------
180
181 Fw::InputBufferGetPort* BufferManagerComponentBase ::
182 get_bufferGetCallee_InputPort(FwIndexType portNum)
183 {
184 FW_ASSERT(
185 portNum < this->getNum_bufferGetCallee_InputPorts(),
186 static_cast<FwAssertArgType>(portNum)
187 );
188
189 return &this->m_bufferGetCallee_InputPort[portNum];
190 }
191
192 Fw::InputBufferSendPort* BufferManagerComponentBase ::
193 get_bufferSendIn_InputPort(FwIndexType portNum)
194 {
195 FW_ASSERT(
196 portNum < this->getNum_bufferSendIn_InputPorts(),
197 static_cast<FwAssertArgType>(portNum)
198 );
199
200 return &this->m_bufferSendIn_InputPort[portNum];
201 }
202
203 Svc::InputSchedPort* BufferManagerComponentBase ::
204 get_schedIn_InputPort(FwIndexType portNum)
205 {
206 FW_ASSERT(
207 portNum < this->getNum_schedIn_InputPorts(),
208 static_cast<FwAssertArgType>(portNum)
209 );
210
211 return &this->m_schedIn_InputPort[portNum];
212 }
213
214 // ----------------------------------------------------------------------
215 // Connect input ports to special output ports
216 // ----------------------------------------------------------------------
217
218 void BufferManagerComponentBase ::
219 set_eventOut_OutputPort(
220 FwIndexType portNum,
221 Fw::InputLogPort* port
222 )
223 {
224 FW_ASSERT(
225 portNum < this->getNum_eventOut_OutputPorts(),
226 static_cast<FwAssertArgType>(portNum)
227 );
228
229 this->m_eventOut_OutputPort[portNum].addCallPort(port);
230 }
231
232#if FW_ENABLE_TEXT_LOGGING == 1
233
234 void BufferManagerComponentBase ::
235 set_textEventOut_OutputPort(
236 FwIndexType portNum,
238 )
239 {
240 FW_ASSERT(
241 portNum < this->getNum_textEventOut_OutputPorts(),
242 static_cast<FwAssertArgType>(portNum)
243 );
244
245 this->m_textEventOut_OutputPort[portNum].addCallPort(port);
246 }
247
248#endif
249
250 void BufferManagerComponentBase ::
251 set_timeCaller_OutputPort(
252 FwIndexType portNum,
254 )
255 {
256 FW_ASSERT(
257 portNum < this->getNum_timeCaller_OutputPorts(),
258 static_cast<FwAssertArgType>(portNum)
259 );
260
261 this->m_timeCaller_OutputPort[portNum].addCallPort(port);
262 }
263
264 void BufferManagerComponentBase ::
265 set_tlmOut_OutputPort(
266 FwIndexType portNum,
267 Fw::InputTlmPort* port
268 )
269 {
270 FW_ASSERT(
271 portNum < this->getNum_tlmOut_OutputPorts(),
272 static_cast<FwAssertArgType>(portNum)
273 );
274
275 this->m_tlmOut_OutputPort[portNum].addCallPort(port);
276 }
277
278#if FW_PORT_SERIALIZATION
279
280 // ----------------------------------------------------------------------
281 // Connect serial input ports to special output ports
282 // ----------------------------------------------------------------------
283
284 void BufferManagerComponentBase ::
285 set_eventOut_OutputPort(
286 FwIndexType portNum,
287 Fw::InputSerializePort* port
288 )
289 {
290 FW_ASSERT(
291 portNum < this->getNum_eventOut_OutputPorts(),
292 static_cast<FwAssertArgType>(portNum)
293 );
294
295 this->m_eventOut_OutputPort[portNum].registerSerialPort(port);
296 }
297
298#if FW_ENABLE_TEXT_LOGGING == 1
299
300 void BufferManagerComponentBase ::
301 set_textEventOut_OutputPort(
302 FwIndexType portNum,
303 Fw::InputSerializePort* port
304 )
305 {
306 FW_ASSERT(
307 portNum < this->getNum_textEventOut_OutputPorts(),
308 static_cast<FwAssertArgType>(portNum)
309 );
310
311 this->m_textEventOut_OutputPort[portNum].registerSerialPort(port);
312 }
313
314#endif
315
316 void BufferManagerComponentBase ::
317 set_timeCaller_OutputPort(
318 FwIndexType portNum,
319 Fw::InputSerializePort* port
320 )
321 {
322 FW_ASSERT(
323 portNum < this->getNum_timeCaller_OutputPorts(),
324 static_cast<FwAssertArgType>(portNum)
325 );
326
327 this->m_timeCaller_OutputPort[portNum].registerSerialPort(port);
328 }
329
330 void BufferManagerComponentBase ::
331 set_tlmOut_OutputPort(
332 FwIndexType portNum,
333 Fw::InputSerializePort* port
334 )
335 {
336 FW_ASSERT(
337 portNum < this->getNum_tlmOut_OutputPorts(),
338 static_cast<FwAssertArgType>(portNum)
339 );
340
341 this->m_tlmOut_OutputPort[portNum].registerSerialPort(port);
342 }
343
344#endif
345
346 // ----------------------------------------------------------------------
347 // Component construction and destruction
348 // ----------------------------------------------------------------------
349
350 BufferManagerComponentBase ::
351 BufferManagerComponentBase(const char* compName) :
352 Fw::PassiveComponentBase(compName)
353 {
354 // Write telemetry channel TotalBuffs
355 this->m_first_update_TotalBuffs = true;
356 this->m_last_TotalBuffs = 0;
357
358 // Write telemetry channel CurrBuffs
359 this->m_first_update_CurrBuffs = true;
360 this->m_last_CurrBuffs = 0;
361
362 // Write telemetry channel HiBuffs
363 this->m_first_update_HiBuffs = true;
364 this->m_last_HiBuffs = 0;
365
366 // Write telemetry channel NoBuffs
367 this->m_first_update_NoBuffs = true;
368 this->m_last_NoBuffs = 0;
369
370 // Write telemetry channel EmptyBuffs
371 this->m_first_update_EmptyBuffs = true;
372 this->m_last_EmptyBuffs = 0;
373
374 this->m_NoBuffsAvailableThrottle = 0;
375 this->m_ZeroSizeBufferThrottle = 0;
376 }
377
378 BufferManagerComponentBase ::
379 ~BufferManagerComponentBase()
380 {
381
382 }
383
384 // ----------------------------------------------------------------------
385 // Getters for numbers of typed input ports
386 // ----------------------------------------------------------------------
387
388 FwIndexType BufferManagerComponentBase ::
389 getNum_bufferGetCallee_InputPorts() const
390 {
391 return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_bufferGetCallee_InputPort));
392 }
393
394 FwIndexType BufferManagerComponentBase ::
395 getNum_bufferSendIn_InputPorts() const
396 {
397 return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_bufferSendIn_InputPort));
398 }
399
400 FwIndexType BufferManagerComponentBase ::
401 getNum_schedIn_InputPorts() const
402 {
403 return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_schedIn_InputPort));
404 }
405
406 // ----------------------------------------------------------------------
407 // Getters for numbers of special output ports
408 // ----------------------------------------------------------------------
409
410 FwIndexType BufferManagerComponentBase ::
411 getNum_eventOut_OutputPorts() const
412 {
413 return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_eventOut_OutputPort));
414 }
415
416#if FW_ENABLE_TEXT_LOGGING == 1
417
418 FwIndexType BufferManagerComponentBase ::
419 getNum_textEventOut_OutputPorts() const
420 {
421 return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_textEventOut_OutputPort));
422 }
423
424#endif
425
426 FwIndexType BufferManagerComponentBase ::
427 getNum_timeCaller_OutputPorts() const
428 {
429 return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_timeCaller_OutputPort));
430 }
431
432 FwIndexType BufferManagerComponentBase ::
433 getNum_tlmOut_OutputPorts() const
434 {
435 return static_cast<FwIndexType>(FW_NUM_ARRAY_ELEMENTS(this->m_tlmOut_OutputPort));
436 }
437
438 // ----------------------------------------------------------------------
439 // Connection status queries for special output ports
440 // ----------------------------------------------------------------------
441
442 bool BufferManagerComponentBase ::
443 isConnected_eventOut_OutputPort(FwIndexType portNum)
444 {
445 FW_ASSERT(
446 portNum < this->getNum_eventOut_OutputPorts(),
447 static_cast<FwAssertArgType>(portNum)
448 );
449
450 return this->m_eventOut_OutputPort[portNum].isConnected();
451 }
452
453#if FW_ENABLE_TEXT_LOGGING == 1
454
455 bool BufferManagerComponentBase ::
456 isConnected_textEventOut_OutputPort(FwIndexType portNum)
457 {
458 FW_ASSERT(
459 portNum < this->getNum_textEventOut_OutputPorts(),
460 static_cast<FwAssertArgType>(portNum)
461 );
462
463 return this->m_textEventOut_OutputPort[portNum].isConnected();
464 }
465
466#endif
467
468 bool BufferManagerComponentBase ::
469 isConnected_timeCaller_OutputPort(FwIndexType portNum)
470 {
471 FW_ASSERT(
472 portNum < this->getNum_timeCaller_OutputPorts(),
473 static_cast<FwAssertArgType>(portNum)
474 );
475
476 return this->m_timeCaller_OutputPort[portNum].isConnected();
477 }
478
479 bool BufferManagerComponentBase ::
480 isConnected_tlmOut_OutputPort(FwIndexType portNum)
481 {
482 FW_ASSERT(
483 portNum < this->getNum_tlmOut_OutputPorts(),
484 static_cast<FwAssertArgType>(portNum)
485 );
486
487 return this->m_tlmOut_OutputPort[portNum].isConnected();
488 }
489
490 // ----------------------------------------------------------------------
491 // Port handler base-class functions for typed input ports
492 //
493 // Call these functions directly to bypass the corresponding ports
494 // ----------------------------------------------------------------------
495
496 Fw::Buffer BufferManagerComponentBase ::
497 bufferGetCallee_handlerBase(
498 FwIndexType portNum,
499 U32 size
500 )
501 {
502 // Make sure port number is valid
503 FW_ASSERT(
504 portNum < this->getNum_bufferGetCallee_InputPorts(),
505 static_cast<FwAssertArgType>(portNum)
506 );
507
508 Fw::Buffer retVal;
509
510 // Lock guard mutex before calling
511 this->lock();
512
513 // Call handler function
514 retVal = this->bufferGetCallee_handler(
515 portNum,
516 size
517 );
518
519 // Unlock guard mutex
520 this->unLock();
521
522 return retVal;
523 }
524
525 void BufferManagerComponentBase ::
526 bufferSendIn_handlerBase(
527 FwIndexType portNum,
528 Fw::Buffer& fwBuffer
529 )
530 {
531 // Make sure port number is valid
532 FW_ASSERT(
533 portNum < this->getNum_bufferSendIn_InputPorts(),
534 static_cast<FwAssertArgType>(portNum)
535 );
536
537 // Lock guard mutex before calling
538 this->lock();
539
540 // Call handler function
541 this->bufferSendIn_handler(
542 portNum,
543 fwBuffer
544 );
545
546 // Unlock guard mutex
547 this->unLock();
548 }
549
550 void BufferManagerComponentBase ::
551 schedIn_handlerBase(
552 FwIndexType portNum,
553 U32 context
554 )
555 {
556 // Make sure port number is valid
557 FW_ASSERT(
558 portNum < this->getNum_schedIn_InputPorts(),
559 static_cast<FwAssertArgType>(portNum)
560 );
561
562 // Call handler function
563 this->schedIn_handler(
564 portNum,
565 context
566 );
567 }
568
569 // ----------------------------------------------------------------------
570 // Event logging functions
571 // ----------------------------------------------------------------------
572
573 void BufferManagerComponentBase ::
574 log_WARNING_HI_NoBuffsAvailable(U32 size)
575 {
576 // Check throttle value
577 if (this->m_NoBuffsAvailableThrottle >= EVENTID_NOBUFFSAVAILABLE_THROTTLE) {
578 return;
579 }
580 else {
581 this->m_NoBuffsAvailableThrottle++;
582 }
583
584 // Get the time
585 Fw::Time _logTime;
586 if (this->m_timeCaller_OutputPort[0].isConnected()) {
587 this->m_timeCaller_OutputPort[0].invoke(_logTime);
588 }
589
590 FwEventIdType _id = static_cast<FwEventIdType>(0);
591
592 _id = this->getIdBase() + EVENTID_NOBUFFSAVAILABLE;
593
594 // Emit the event on the log port
595 if (this->m_eventOut_OutputPort[0].isConnected()) {
596 Fw::LogBuffer _logBuff;
598
599#if FW_AMPCS_COMPATIBLE
600 // Serialize the number of arguments
601 _status = _logBuff.serialize(static_cast<U8>(1));
602 FW_ASSERT(
603 _status == Fw::FW_SERIALIZE_OK,
604 static_cast<FwAssertArgType>(_status)
605 );
606#endif
607
608#if FW_AMPCS_COMPATIBLE
609 // Serialize the argument size
610 _status = _logBuff.serialize(
611 static_cast<U8>(sizeof(U32))
612 );
613 FW_ASSERT(
614 _status == Fw::FW_SERIALIZE_OK,
615 static_cast<FwAssertArgType>(_status)
616 );
617#endif
618 _status = _logBuff.serialize(size);
619 FW_ASSERT(
620 _status == Fw::FW_SERIALIZE_OK,
621 static_cast<FwAssertArgType>(_status)
622 );
623
624 this->m_eventOut_OutputPort[0].invoke(
625 _id,
626 _logTime,
628 _logBuff
629 );
630 }
631
632 // Emit the event on the text log port
633#if FW_ENABLE_TEXT_LOGGING
634 if (this->m_textEventOut_OutputPort[0].isConnected()) {
635#if FW_OBJECT_NAMES == 1
636 const char* _formatString =
637 "(%s) %s: No available buffers of size %" PRIu32 "";
638#else
639 const char* _formatString =
640 "%s: No available buffers of size %" PRIu32 "";
641#endif
642
643 Fw::TextLogString _logString;
644 _logString.format(
645 _formatString,
646#if FW_OBJECT_NAMES == 1
647 this->m_objName.toChar(),
648#endif
649 "NoBuffsAvailable ",
650 size
651 );
652
653 this->m_textEventOut_OutputPort[0].invoke(
654 _id,
655 _logTime,
657 _logString
658 );
659 }
660#endif
661 }
662
663 void BufferManagerComponentBase ::
664 log_WARNING_HI_ZeroSizeBuffer()
665 {
666 // Check throttle value
667 if (this->m_ZeroSizeBufferThrottle >= EVENTID_ZEROSIZEBUFFER_THROTTLE) {
668 return;
669 }
670 else {
671 this->m_ZeroSizeBufferThrottle++;
672 }
673
674 // Get the time
675 Fw::Time _logTime;
676 if (this->m_timeCaller_OutputPort[0].isConnected()) {
677 this->m_timeCaller_OutputPort[0].invoke(_logTime);
678 }
679
680 FwEventIdType _id = static_cast<FwEventIdType>(0);
681
682 _id = this->getIdBase() + EVENTID_ZEROSIZEBUFFER;
683
684 // Emit the event on the log port
685 if (this->m_eventOut_OutputPort[0].isConnected()) {
686 Fw::LogBuffer _logBuff;
687
688#if FW_AMPCS_COMPATIBLE
690 // Serialize the number of arguments
691 _status = _logBuff.serialize(static_cast<U8>(0));
692 FW_ASSERT(
693 _status == Fw::FW_SERIALIZE_OK,
694 static_cast<FwAssertArgType>(_status)
695 );
696#endif
697
698 this->m_eventOut_OutputPort[0].invoke(
699 _id,
700 _logTime,
702 _logBuff
703 );
704 }
705
706 // Emit the event on the text log port
707#if FW_ENABLE_TEXT_LOGGING
708 if (this->m_textEventOut_OutputPort[0].isConnected()) {
709#if FW_OBJECT_NAMES == 1
710 const char* _formatString =
711 "(%s) %s: Received zero size buffer";
712#else
713 const char* _formatString =
714 "%s: Received zero size buffer";
715#endif
716
717 Fw::TextLogString _logString;
718 _logString.format(
719 _formatString,
720#if FW_OBJECT_NAMES == 1
721 this->m_objName.toChar(),
722#endif
723 "ZeroSizeBuffer "
724 );
725
726 this->m_textEventOut_OutputPort[0].invoke(
727 _id,
728 _logTime,
730 _logString
731 );
732 }
733#endif
734 }
735
736 // ----------------------------------------------------------------------
737 // Event throttle reset functions
738 // ----------------------------------------------------------------------
739
740 void BufferManagerComponentBase ::
741 log_WARNING_HI_NoBuffsAvailable_ThrottleClear()
742 {
743 // Reset throttle counter
744 this->m_NoBuffsAvailableThrottle = 0;
745 }
746
747 void BufferManagerComponentBase ::
748 log_WARNING_HI_ZeroSizeBuffer_ThrottleClear()
749 {
750 // Reset throttle counter
751 this->m_ZeroSizeBufferThrottle = 0;
752 }
753
754 // ----------------------------------------------------------------------
755 // Telemetry write functions
756 // ----------------------------------------------------------------------
757
758 void BufferManagerComponentBase ::
759 tlmWrite_TotalBuffs(
760 U32 arg,
761 Fw::Time _tlmTime
762 )
763 {
764 // Check to see if it is the first time
765 if (not this->m_first_update_TotalBuffs) {
766 // Check to see if value has changed. If not, don't write it.
767 if (arg == this->m_last_TotalBuffs) {
768 return;
769 }
770 else {
771 this->m_last_TotalBuffs = arg;
772 }
773 }
774 else {
775 this->m_first_update_TotalBuffs = false;
776 this->m_last_TotalBuffs = arg;
777 }
778
779 if (this->m_tlmOut_OutputPort[0].isConnected()) {
780 if (
781 this->m_timeCaller_OutputPort[0].isConnected() &&
782 (_tlmTime == Fw::ZERO_TIME)
783 ) {
784 this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
785 }
786
787 Fw::TlmBuffer _tlmBuff;
788 Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
789 FW_ASSERT(
790 _stat == Fw::FW_SERIALIZE_OK,
791 static_cast<FwAssertArgType>(_stat)
792 );
793
794 FwChanIdType _id;
795
796 _id = this->getIdBase() + CHANNELID_TOTALBUFFS;
797
798 this->m_tlmOut_OutputPort[0].invoke(
799 _id,
800 _tlmTime,
801 _tlmBuff
802 );
803 }
804 }
805
806 void BufferManagerComponentBase ::
807 tlmWrite_CurrBuffs(
808 U32 arg,
809 Fw::Time _tlmTime
810 )
811 {
812 // Check to see if it is the first time
813 if (not this->m_first_update_CurrBuffs) {
814 // Check to see if value has changed. If not, don't write it.
815 if (arg == this->m_last_CurrBuffs) {
816 return;
817 }
818 else {
819 this->m_last_CurrBuffs = arg;
820 }
821 }
822 else {
823 this->m_first_update_CurrBuffs = false;
824 this->m_last_CurrBuffs = arg;
825 }
826
827 if (this->m_tlmOut_OutputPort[0].isConnected()) {
828 if (
829 this->m_timeCaller_OutputPort[0].isConnected() &&
830 (_tlmTime == Fw::ZERO_TIME)
831 ) {
832 this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
833 }
834
835 Fw::TlmBuffer _tlmBuff;
836 Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
837 FW_ASSERT(
838 _stat == Fw::FW_SERIALIZE_OK,
839 static_cast<FwAssertArgType>(_stat)
840 );
841
842 FwChanIdType _id;
843
844 _id = this->getIdBase() + CHANNELID_CURRBUFFS;
845
846 this->m_tlmOut_OutputPort[0].invoke(
847 _id,
848 _tlmTime,
849 _tlmBuff
850 );
851 }
852 }
853
854 void BufferManagerComponentBase ::
855 tlmWrite_HiBuffs(
856 U32 arg,
857 Fw::Time _tlmTime
858 )
859 {
860 // Check to see if it is the first time
861 if (not this->m_first_update_HiBuffs) {
862 // Check to see if value has changed. If not, don't write it.
863 if (arg == this->m_last_HiBuffs) {
864 return;
865 }
866 else {
867 this->m_last_HiBuffs = arg;
868 }
869 }
870 else {
871 this->m_first_update_HiBuffs = false;
872 this->m_last_HiBuffs = arg;
873 }
874
875 if (this->m_tlmOut_OutputPort[0].isConnected()) {
876 if (
877 this->m_timeCaller_OutputPort[0].isConnected() &&
878 (_tlmTime == Fw::ZERO_TIME)
879 ) {
880 this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
881 }
882
883 Fw::TlmBuffer _tlmBuff;
884 Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
885 FW_ASSERT(
886 _stat == Fw::FW_SERIALIZE_OK,
887 static_cast<FwAssertArgType>(_stat)
888 );
889
890 FwChanIdType _id;
891
892 _id = this->getIdBase() + CHANNELID_HIBUFFS;
893
894 this->m_tlmOut_OutputPort[0].invoke(
895 _id,
896 _tlmTime,
897 _tlmBuff
898 );
899 }
900 }
901
902 void BufferManagerComponentBase ::
903 tlmWrite_NoBuffs(
904 U32 arg,
905 Fw::Time _tlmTime
906 )
907 {
908 // Check to see if it is the first time
909 if (not this->m_first_update_NoBuffs) {
910 // Check to see if value has changed. If not, don't write it.
911 if (arg == this->m_last_NoBuffs) {
912 return;
913 }
914 else {
915 this->m_last_NoBuffs = arg;
916 }
917 }
918 else {
919 this->m_first_update_NoBuffs = false;
920 this->m_last_NoBuffs = arg;
921 }
922
923 if (this->m_tlmOut_OutputPort[0].isConnected()) {
924 if (
925 this->m_timeCaller_OutputPort[0].isConnected() &&
926 (_tlmTime == Fw::ZERO_TIME)
927 ) {
928 this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
929 }
930
931 Fw::TlmBuffer _tlmBuff;
932 Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
933 FW_ASSERT(
934 _stat == Fw::FW_SERIALIZE_OK,
935 static_cast<FwAssertArgType>(_stat)
936 );
937
938 FwChanIdType _id;
939
940 _id = this->getIdBase() + CHANNELID_NOBUFFS;
941
942 this->m_tlmOut_OutputPort[0].invoke(
943 _id,
944 _tlmTime,
945 _tlmBuff
946 );
947 }
948 }
949
950 void BufferManagerComponentBase ::
951 tlmWrite_EmptyBuffs(
952 U32 arg,
953 Fw::Time _tlmTime
954 )
955 {
956 // Check to see if it is the first time
957 if (not this->m_first_update_EmptyBuffs) {
958 // Check to see if value has changed. If not, don't write it.
959 if (arg == this->m_last_EmptyBuffs) {
960 return;
961 }
962 else {
963 this->m_last_EmptyBuffs = arg;
964 }
965 }
966 else {
967 this->m_first_update_EmptyBuffs = false;
968 this->m_last_EmptyBuffs = arg;
969 }
970
971 if (this->m_tlmOut_OutputPort[0].isConnected()) {
972 if (
973 this->m_timeCaller_OutputPort[0].isConnected() &&
974 (_tlmTime == Fw::ZERO_TIME)
975 ) {
976 this->m_timeCaller_OutputPort[0].invoke(_tlmTime);
977 }
978
979 Fw::TlmBuffer _tlmBuff;
980 Fw::SerializeStatus _stat = _tlmBuff.serialize(arg);
981 FW_ASSERT(
982 _stat == Fw::FW_SERIALIZE_OK,
983 static_cast<FwAssertArgType>(_stat)
984 );
985
986 FwChanIdType _id;
987
988 _id = this->getIdBase() + CHANNELID_EMPTYBUFFS;
989
990 this->m_tlmOut_OutputPort[0].invoke(
991 _id,
992 _tlmTime,
993 _tlmBuff
994 );
995 }
996 }
997
998 // ----------------------------------------------------------------------
999 // Time
1000 // ----------------------------------------------------------------------
1001
1002 Fw::Time BufferManagerComponentBase ::
1003 getTime()
1004 {
1005 if (this->m_timeCaller_OutputPort[0].isConnected()) {
1006 Fw::Time _time;
1007 this->m_timeCaller_OutputPort[0].invoke(_time);
1008 return _time;
1009 }
1010 else {
1011 return Fw::Time(TB_NONE, 0, 0);
1012 }
1013 }
1014
1015 // ----------------------------------------------------------------------
1016 // Mutex operations for guarded ports
1017 //
1018 // You can override these operations to provide more sophisticated
1019 // synchronization
1020 // ----------------------------------------------------------------------
1021
1022 void BufferManagerComponentBase ::
1023 lock()
1024 {
1025 this->m_guardedPortMutex.lock();
1026 }
1027
1028 void BufferManagerComponentBase ::
1029 unLock()
1030 {
1031 this->m_guardedPortMutex.unLock();
1032 }
1033
1034 // ----------------------------------------------------------------------
1035 // Calls for messages received on typed input ports
1036 // ----------------------------------------------------------------------
1037
1038 Fw::Buffer BufferManagerComponentBase ::
1039 m_p_bufferGetCallee_in(
1040 Fw::PassiveComponentBase* callComp,
1041 FwIndexType portNum,
1042 U32 size
1043 )
1044 {
1045 FW_ASSERT(callComp);
1046 BufferManagerComponentBase* compPtr = static_cast<BufferManagerComponentBase*>(callComp);
1047 return compPtr->bufferGetCallee_handlerBase(
1048 portNum,
1049 size
1050 );
1051 }
1052
1053 void BufferManagerComponentBase ::
1054 m_p_bufferSendIn_in(
1055 Fw::PassiveComponentBase* callComp,
1056 FwIndexType portNum,
1057 Fw::Buffer& fwBuffer
1058 )
1059 {
1060 FW_ASSERT(callComp);
1061 BufferManagerComponentBase* compPtr = static_cast<BufferManagerComponentBase*>(callComp);
1062 compPtr->bufferSendIn_handlerBase(
1063 portNum,
1064 fwBuffer
1065 );
1066 }
1067
1068 void BufferManagerComponentBase ::
1069 m_p_schedIn_in(
1070 Fw::PassiveComponentBase* callComp,
1071 FwIndexType portNum,
1072 U32 context
1073 )
1074 {
1075 FW_ASSERT(callComp);
1076 BufferManagerComponentBase* compPtr = static_cast<BufferManagerComponentBase*>(callComp);
1077 compPtr->schedIn_handlerBase(
1078 portNum,
1079 context
1080 );
1081 }
1082
1083}
#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)/*#en...
Definition FpConfig.h:148
@ WARNING_HI
A serious but recoverable event.
void init()
Object initializer.
Definition ObjBase.cpp:27
const char * toChar() const
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
void format(const CHAR *formatString,...)
write formatted string to buffer
Auto-generated base for BufferManager component.
Fw::Buffer bufferGetCallee_handlerBase(FwIndexType portNum, U32 size)
Handler base-class function for input port bufferGetCallee.
void bufferSendIn_handlerBase(FwIndexType portNum, Fw::Buffer &fwBuffer)
Handler base-class function for input port bufferSendIn.
SerializeStatus
forward declaration for string
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
const Time ZERO_TIME
Definition Time.cpp:5