F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
DpManagerComponentAc.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title DpManagerComponentAc.hpp
3 // \author Generated by fpp-to-cpp
4 // \brief hpp file for DpManager component base class
5 // ======================================================================
6 
7 #ifndef Svc_DpManagerComponentAc_HPP
8 #define Svc_DpManagerComponentAc_HPP
9 
10 #include <atomic>
11 
14 #include "Fw/Cmd/CmdPortAc.hpp"
15 #include "Fw/Cmd/CmdRegPortAc.hpp"
17 #include "Fw/Cmd/CmdString.hpp"
19 #include "Fw/Dp/DpGetPortAc.hpp"
22 #include "Fw/Dp/DpSendPortAc.hpp"
23 #include "Fw/FPrimeBasicTypes.hpp"
24 #include "Fw/Log/LogPortAc.hpp"
25 #include "Fw/Log/LogString.hpp"
26 #if FW_ENABLE_TEXT_LOGGING == 1
27 #include "Fw/Log/LogTextPortAc.hpp"
28 #endif
31 #include "Fw/Time/TimePortAc.hpp"
32 #include "Fw/Tlm/TlmPortAc.hpp"
33 #include "Fw/Tlm/TlmString.hpp"
35 
36 namespace Svc {
37 
44  {
45 
46  // ----------------------------------------------------------------------
47  // Friend classes
48  // ----------------------------------------------------------------------
49 
53  friend class DpManagerTesterBase;
54 
55  PROTECTED:
56 
57  // ----------------------------------------------------------------------
58  // Constants
59  // ----------------------------------------------------------------------
60 
62  enum {
64  };
65 
67  enum {
72  };
73 
75  enum {
82  };
83 
85  enum {
89  };
90 
92  enum {
94  };
95 
97  enum {
99  };
100 
102  enum {
104  };
105 
107  enum {
112  };
113 
114  public:
115 
116  // ----------------------------------------------------------------------
117  // Component initialization
118  // ----------------------------------------------------------------------
119 
121  void init(
122  FwSizeType queueDepth,
123  FwEnumStoreType instance = 0
124  );
125 
126  public:
127 
128  // ----------------------------------------------------------------------
129  // Getters for special input ports
130  // ----------------------------------------------------------------------
131 
136  FwIndexType portNum
137  );
138 
139  public:
140 
141  // ----------------------------------------------------------------------
142  // Getters for typed input ports
143  // ----------------------------------------------------------------------
144 
149  FwIndexType portNum
150  );
151 
156  FwIndexType portNum
157  );
158 
163  FwIndexType portNum
164  );
165 
170  FwIndexType portNum
171  );
172 
173  public:
174 
175  // ----------------------------------------------------------------------
176  // Connect input ports to special output ports
177  // ----------------------------------------------------------------------
178 
181  FwIndexType portNum,
182  Fw::InputCmdRegPort* port
183  );
184 
187  FwIndexType portNum,
189  );
190 
193  FwIndexType portNum,
194  Fw::InputLogPort* port
195  );
196 
197 #if FW_ENABLE_TEXT_LOGGING == 1
198 
200  void set_textEventOut_OutputPort(
201  FwIndexType portNum,
202  Fw::InputLogTextPort* port
203  );
204 
205 #endif
206 
209  FwIndexType portNum,
210  Fw::InputTimePort* port
211  );
212 
215  FwIndexType portNum,
216  Fw::InputTlmPort* port
217  );
218 
219  public:
220 
221  // ----------------------------------------------------------------------
222  // Connect typed input ports to typed output ports
223  // ----------------------------------------------------------------------
224 
227  FwIndexType portNum,
229  );
230 
233  FwIndexType portNum,
235  );
236 
239  FwIndexType portNum,
241  );
242 
243 #if FW_PORT_SERIALIZATION
244 
245  public:
246 
247  // ----------------------------------------------------------------------
248  // Connect serial input ports to special output ports
249  // ----------------------------------------------------------------------
250 
253  FwIndexType portNum,
254  Fw::InputSerializePort* port
255  );
256 
259  FwIndexType portNum,
260  Fw::InputSerializePort* port
261  );
262 
265  FwIndexType portNum,
266  Fw::InputSerializePort* port
267  );
268 
269 #if FW_ENABLE_TEXT_LOGGING == 1
270 
272  void set_textEventOut_OutputPort(
273  FwIndexType portNum,
274  Fw::InputSerializePort* port
275  );
276 
277 #endif
278 
281  FwIndexType portNum,
282  Fw::InputSerializePort* port
283  );
284 
287  FwIndexType portNum,
288  Fw::InputSerializePort* port
289  );
290 
291 #endif
292 
293 #if FW_PORT_SERIALIZATION
294 
295  public:
296 
297  // ----------------------------------------------------------------------
298  // Connect serial input ports to typed output ports
299  // ----------------------------------------------------------------------
300 
303  FwIndexType portNum,
304  Fw::InputSerializePort* port
305  );
306 
309  FwIndexType portNum,
310  Fw::InputSerializePort* port
311  );
312 
313 #endif
314 
315  public:
316 
317  // ----------------------------------------------------------------------
318  // Command registration
319  // ----------------------------------------------------------------------
320 
324  void regCommands();
325 
326  PROTECTED:
327 
328  // ----------------------------------------------------------------------
329  // Component construction and destruction
330  // ----------------------------------------------------------------------
331 
334  const char* compName = ""
335  );
336 
338  virtual ~DpManagerComponentBase();
339 
340  PROTECTED:
341 
342  // ----------------------------------------------------------------------
343  // Getters for numbers of special input ports
344  // ----------------------------------------------------------------------
345 
350 
351  PROTECTED:
352 
353  // ----------------------------------------------------------------------
354  // Getters for numbers of typed input ports
355  // ----------------------------------------------------------------------
356 
361 
366 
371 
376 
377  PROTECTED:
378 
379  // ----------------------------------------------------------------------
380  // Getters for numbers of special output ports
381  // ----------------------------------------------------------------------
382 
387 
392 
397 
398 #if FW_ENABLE_TEXT_LOGGING == 1
399 
403  FwIndexType getNum_textEventOut_OutputPorts() const;
404 
405 #endif
406 
411 
416 
417  PROTECTED:
418 
419  // ----------------------------------------------------------------------
420  // Getters for numbers of typed output ports
421  // ----------------------------------------------------------------------
422 
427 
432 
437 
438  PROTECTED:
439 
440  // ----------------------------------------------------------------------
441  // Connection status queries for special output ports
442  // ----------------------------------------------------------------------
443 
448  FwIndexType portNum
449  );
450 
455  FwIndexType portNum
456  );
457 
462  FwIndexType portNum
463  );
464 
465 #if FW_ENABLE_TEXT_LOGGING == 1
466 
470  bool isConnected_textEventOut_OutputPort(
471  FwIndexType portNum
472  );
473 
474 #endif
475 
480  FwIndexType portNum
481  );
482 
487  FwIndexType portNum
488  );
489 
490  PROTECTED:
491 
492  // ----------------------------------------------------------------------
493  // Connection status queries for typed output ports
494  // ----------------------------------------------------------------------
495 
500  FwIndexType portNum
501  );
502 
507  FwIndexType portNum
508  );
509 
514  FwIndexType portNum
515  );
516 
517  PROTECTED:
518 
519  // ----------------------------------------------------------------------
520  // Handlers to implement for typed input ports
521  // ----------------------------------------------------------------------
522 
525  FwIndexType portNum,
526  FwDpIdType id,
527  FwSizeType dataSize,
528  Fw::Buffer& buffer
529  ) = 0;
530 
532  virtual void productRequestIn_handler(
533  FwIndexType portNum,
534  FwDpIdType id,
535  FwSizeType dataSize
536  ) = 0;
537 
539  virtual void productSendIn_handler(
540  FwIndexType portNum,
541  FwDpIdType id,
542  const Fw::Buffer& buffer
543  ) = 0;
544 
546  virtual void schedIn_handler(
547  FwIndexType portNum,
548  U32 context
549  ) = 0;
550 
551  PROTECTED:
552 
553  // ----------------------------------------------------------------------
554  // Port handler base-class functions for typed input ports
555  //
556  // Call these functions directly to bypass the corresponding ports
557  // ----------------------------------------------------------------------
558 
561  FwIndexType portNum,
562  FwDpIdType id,
563  FwSizeType dataSize,
564  Fw::Buffer& buffer
565  );
566 
569  FwIndexType portNum,
570  FwDpIdType id,
571  FwSizeType dataSize
572  );
573 
576  FwIndexType portNum,
577  FwDpIdType id,
578  const Fw::Buffer& buffer
579  );
580 
582  void schedIn_handlerBase(
583  FwIndexType portNum,
584  U32 context
585  );
586 
587  PROTECTED:
588 
589  // ----------------------------------------------------------------------
590  // Pre-message hooks for typed async input ports
591  //
592  // Each of these functions is invoked just before processing a message
593  // on the corresponding port. By default, they do nothing. You can
594  // override them to provide specific pre-message behavior.
595  // ----------------------------------------------------------------------
596 
598  virtual void productRequestIn_preMsgHook(
599  FwIndexType portNum,
600  FwDpIdType id,
601  FwSizeType dataSize
602  );
603 
605  virtual void productSendIn_preMsgHook(
606  FwIndexType portNum,
607  FwDpIdType id,
608  const Fw::Buffer& buffer
609  );
610 
612  virtual void schedIn_preMsgHook(
613  FwIndexType portNum,
614  U32 context
615  );
616 
617  PROTECTED:
618 
619  // ----------------------------------------------------------------------
620  // Invocation functions for typed output ports
621  // ----------------------------------------------------------------------
622 
625  FwIndexType portNum,
626  U32 size
627  );
628 
631  FwIndexType portNum,
632  FwDpIdType id,
633  const Fw::Buffer& buffer,
634  const Fw::Success& status
635  );
636 
638  void productSendOut_out(
639  FwIndexType portNum,
640  Fw::Buffer& fwBuffer
641  );
642 
643  PROTECTED:
644 
645  // ----------------------------------------------------------------------
646  // Command response
647  // ----------------------------------------------------------------------
648 
650  void cmdResponse_out(
651  FwOpcodeType opCode,
652  U32 cmdSeq,
653  Fw::CmdResponse response
654  );
655 
656  PROTECTED:
657 
658  // ----------------------------------------------------------------------
659  // Command handlers to implement
660  // ----------------------------------------------------------------------
661 
665  virtual void CLEAR_EVENT_THROTTLE_cmdHandler(
666  FwOpcodeType opCode,
667  U32 cmdSeq
668  ) = 0;
669 
670  PROTECTED:
671 
672  // ----------------------------------------------------------------------
673  // Command handler base-class functions
674  //
675  // Call these functions directly to bypass the command input port
676  // ----------------------------------------------------------------------
677 
682  FwOpcodeType opCode,
683  U32 cmdSeq,
684  Fw::CmdArgBuffer& args
685  );
686 
687  PROTECTED:
688 
689  // ----------------------------------------------------------------------
690  // Pre-message hooks for async commands
691  //
692  // Each of these functions is invoked just before processing the
693  // corresponding command. By default they do nothing. You can
694  // override them to provide specific pre-command behavior.
695  // ----------------------------------------------------------------------
696 
698  virtual void CLEAR_EVENT_THROTTLE_preMsgHook(
699  FwOpcodeType opCode,
700  U32 cmdSeq
701  );
702 
703  PROTECTED:
704 
705  // ----------------------------------------------------------------------
706  // Event logging functions
707  // ----------------------------------------------------------------------
708 
713  U32 id
714  );
715 
716  PROTECTED:
717 
718  // ----------------------------------------------------------------------
719  // Event throttle reset functions
720  // ----------------------------------------------------------------------
721 
724 
725  PROTECTED:
726 
727  // ----------------------------------------------------------------------
728  // Telemetry write functions
729  // ----------------------------------------------------------------------
730 
735  U32 arg,
736  Fw::Time _tlmTime = Fw::Time()
737  );
738 
743  U32 arg,
744  Fw::Time _tlmTime = Fw::Time()
745  );
746 
751  U32 arg,
752  Fw::Time _tlmTime = Fw::Time()
753  );
754 
758  void tlmWrite_NumBytes(
759  U64 arg,
760  Fw::Time _tlmTime = Fw::Time()
761  );
762 
763  PROTECTED:
764 
765  // ----------------------------------------------------------------------
766  // Time
767  // ----------------------------------------------------------------------
768 
772  Fw::Time getTime() const;
773 
774  PRIVATE:
775 
776  // ----------------------------------------------------------------------
777  // Message dispatch functions
778  // ----------------------------------------------------------------------
779 
781  virtual MsgDispatchStatus doDispatch();
782 
783  PRIVATE:
784 
785  // ----------------------------------------------------------------------
786  // Calls for messages received on special input ports
787  // ----------------------------------------------------------------------
788 
790  static void m_p_cmdIn_in(
791  Fw::PassiveComponentBase* callComp,
792  FwIndexType portNum,
793  FwOpcodeType opCode,
794  U32 cmdSeq,
795  Fw::CmdArgBuffer& args
796  );
797 
798  PRIVATE:
799 
800  // ----------------------------------------------------------------------
801  // Calls for messages received on typed input ports
802  // ----------------------------------------------------------------------
803 
805  static Fw::Success m_p_productGetIn_in(
806  Fw::PassiveComponentBase* callComp,
807  FwIndexType portNum,
808  FwDpIdType id,
809  FwSizeType dataSize,
810  Fw::Buffer& buffer
811  );
812 
814  static void m_p_productRequestIn_in(
815  Fw::PassiveComponentBase* callComp,
816  FwIndexType portNum,
817  FwDpIdType id,
818  FwSizeType dataSize
819  );
820 
822  static void m_p_productSendIn_in(
823  Fw::PassiveComponentBase* callComp,
824  FwIndexType portNum,
825  FwDpIdType id,
826  const Fw::Buffer& buffer
827  );
828 
830  static void m_p_schedIn_in(
831  Fw::PassiveComponentBase* callComp,
832  FwIndexType portNum,
833  U32 context
834  );
835 
836  PRIVATE:
837 
838  // ----------------------------------------------------------------------
839  // Special input ports
840  // ----------------------------------------------------------------------
841 
843  Fw::InputCmdPort m_cmdIn_InputPort[NUM_CMDIN_INPUT_PORTS];
844 
845  PRIVATE:
846 
847  // ----------------------------------------------------------------------
848  // Typed input ports
849  // ----------------------------------------------------------------------
850 
852  Fw::InputDpGetPort m_productGetIn_InputPort[NUM_PRODUCTGETIN_INPUT_PORTS];
853 
855  Fw::InputDpRequestPort m_productRequestIn_InputPort[NUM_PRODUCTREQUESTIN_INPUT_PORTS];
856 
858  Fw::InputDpSendPort m_productSendIn_InputPort[NUM_PRODUCTSENDIN_INPUT_PORTS];
859 
861  Svc::InputSchedPort m_schedIn_InputPort[NUM_SCHEDIN_INPUT_PORTS];
862 
863  PRIVATE:
864 
865  // ----------------------------------------------------------------------
866  // Special output ports
867  // ----------------------------------------------------------------------
868 
870  Fw::OutputCmdRegPort m_cmdRegIn_OutputPort[NUM_CMDREGIN_OUTPUT_PORTS];
871 
873  Fw::OutputCmdResponsePort m_cmdResponseOut_OutputPort[NUM_CMDRESPONSEOUT_OUTPUT_PORTS];
874 
876  Fw::OutputLogPort m_eventOut_OutputPort[NUM_EVENTOUT_OUTPUT_PORTS];
877 
878 #if FW_ENABLE_TEXT_LOGGING == 1
879 
881  Fw::OutputLogTextPort m_textEventOut_OutputPort[NUM_TEXTEVENTOUT_OUTPUT_PORTS];
882 
883 #endif
884 
886  Fw::OutputTimePort m_timeGetOut_OutputPort[NUM_TIMEGETOUT_OUTPUT_PORTS];
887 
889  Fw::OutputTlmPort m_tlmOut_OutputPort[NUM_TLMOUT_OUTPUT_PORTS];
890 
891  PRIVATE:
892 
893  // ----------------------------------------------------------------------
894  // Typed output ports
895  // ----------------------------------------------------------------------
896 
898  Fw::OutputBufferGetPort m_bufferGetOut_OutputPort[NUM_BUFFERGETOUT_OUTPUT_PORTS];
899 
901  Fw::OutputDpResponsePort m_productResponseOut_OutputPort[NUM_PRODUCTRESPONSEOUT_OUTPUT_PORTS];
902 
904  Fw::OutputBufferSendPort m_productSendOut_OutputPort[NUM_PRODUCTSENDOUT_OUTPUT_PORTS];
905 
906  PRIVATE:
907 
908  // ----------------------------------------------------------------------
909  // Counter values for event throttling
910  // ----------------------------------------------------------------------
911 
913  std::atomic<FwIndexType> m_BufferAllocationFailedThrottle;
914 
915  PRIVATE:
916 
917  // ----------------------------------------------------------------------
918  // First update flags for telemetry channels
919  // ----------------------------------------------------------------------
920 
922  bool m_first_update_NumSuccessfulAllocations;
923 
925  bool m_first_update_NumFailedAllocations;
926 
928  bool m_first_update_NumDataProducts;
929 
931  bool m_first_update_NumBytes;
932 
933  PRIVATE:
934 
935  // ----------------------------------------------------------------------
936  // Last value storage for telemetry channels
937  // ----------------------------------------------------------------------
938 
940  U32 m_last_NumSuccessfulAllocations;
941 
943  U32 m_last_NumFailedAllocations;
944 
946  U32 m_last_NumDataProducts;
947 
949  U64 m_last_NumBytes;
950 
951  };
952 
953 }
954 
955 #endif
Svc::InputSchedPort * get_schedIn_InputPort(FwIndexType portNum)
FwIndexType getNum_productGetIn_InputPorts() const
void cmdResponse_out(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdResponse response)
Emit command response.
Definition: Time.hpp:9
void set_productSendOut_OutputPort(FwIndexType portNum, Fw::InputBufferSendPort *port)
Connect port to productSendOut[portNum].
void log_WARNING_HI_BufferAllocationFailed_ThrottleClear()
Reset throttle value for BufferAllocationFailed.
bool isConnected_cmdResponseOut_OutputPort(FwIndexType portNum)
PlatformSizeType FwSizeType
bool isConnected_cmdRegIn_OutputPort(FwIndexType portNum)
void set_cmdResponseOut_OutputPort(FwIndexType portNum, Fw::InputCmdResponsePort *port)
Connect port to cmdResponseOut[portNum].
I32 FwEnumStoreType
void set_timeGetOut_OutputPort(FwIndexType portNum, Fw::InputTimePort *port)
Connect port to timeGetOut[portNum].
virtual void schedIn_handler(FwIndexType portNum, U32 context)=0
Handler for input port schedIn.
FwIndexType getNum_eventOut_OutputPorts() const
virtual ~DpManagerComponentBase()
Destroy DpManagerComponentBase object.
FwIndexType getNum_timeGetOut_OutputPorts() const
void productRequestIn_handlerBase(FwIndexType portNum, FwDpIdType id, FwSizeType dataSize)
Handler base-class function for input port productRequestIn.
FwIndexType getNum_schedIn_InputPorts() const
Enum representing a command response.
FwIndexType getNum_productRequestIn_InputPorts() const
void tlmWrite_NumSuccessfulAllocations(U32 arg, Fw::Time _tlmTime=Fw::Time())
Fw::Buffer bufferGetOut_out(FwIndexType portNum, U32 size)
Invoke output port bufferGetOut.
void tlmWrite_NumFailedAllocations(U32 arg, Fw::Time _tlmTime=Fw::Time())
U32 FwDpIdType
The type of a data product identifier.
void productSendIn_handlerBase(FwIndexType portNum, FwDpIdType id, const Fw::Buffer &buffer)
Handler base-class function for input port productSendIn.
void init()
Object initializer.
Definition: ObjBase.cpp:26
Fw::InputDpGetPort * get_productGetIn_InputPort(FwIndexType portNum)
virtual void productSendIn_handler(FwIndexType portNum, FwDpIdType id, const Fw::Buffer &buffer)=0
Handler for input port productSendIn.
FwIndexType getNum_cmdRegIn_OutputPorts() const
virtual Fw::Success productGetIn_handler(FwIndexType portNum, FwDpIdType id, FwSizeType dataSize, Fw::Buffer &buffer)=0
Handler for input port productGetIn.
FwIndexType getNum_bufferGetOut_OutputPorts() const
virtual void productSendIn_preMsgHook(FwIndexType portNum, FwDpIdType id, const Fw::Buffer &buffer)
Pre-message hook for async input port productSendIn.
U32 FwOpcodeType
The type of a command opcode.
friend class DpManagerTesterBase
Friend class tester to support autocoded test harness.
Fw::InputDpSendPort * get_productSendIn_InputPort(FwIndexType portNum)
FwIndexType getNum_productSendIn_InputPorts() const
void productResponseOut_out(FwIndexType portNum, FwDpIdType id, const Fw::Buffer &buffer, const Fw::Success &status)
Invoke output port productResponseOut.
void tlmWrite_NumDataProducts(U32 arg, Fw::Time _tlmTime=Fw::Time())
bool isConnected_productResponseOut_OutputPort(FwIndexType portNum)
bool isConnected_bufferGetOut_OutputPort(FwIndexType portNum)
virtual void schedIn_preMsgHook(FwIndexType portNum, U32 context)
Pre-message hook for async input port schedIn.
FwIndexType getNum_productResponseOut_OutputPorts() const
virtual void CLEAR_EVENT_THROTTLE_cmdHandler(FwOpcodeType opCode, U32 cmdSeq)=0
bool isConnected_timeGetOut_OutputPort(FwIndexType portNum)
void CLEAR_EVENT_THROTTLE_cmdHandlerBase(FwOpcodeType opCode, U32 cmdSeq, Fw::CmdArgBuffer &args)
void set_tlmOut_OutputPort(FwIndexType portNum, Fw::InputTlmPort *port)
Connect port to tlmOut[portNum].
Fw::InputCmdPort * get_cmdIn_InputPort(FwIndexType portNum)
Auto-generated base for DpManager component.
void schedIn_handlerBase(FwIndexType portNum, U32 context)
Handler base-class function for input port schedIn.
void productSendOut_out(FwIndexType portNum, Fw::Buffer &fwBuffer)
Invoke output port productSendOut.
FwIndexType getNum_cmdIn_InputPorts() const
virtual void productRequestIn_handler(FwIndexType portNum, FwDpIdType id, FwSizeType dataSize)=0
Handler for input port productRequestIn.
void set_productResponseOut_OutputPort(FwIndexType portNum, Fw::InputDpResponsePort *port)
Connect port to productResponseOut[portNum].
PlatformIndexType FwIndexType
virtual void productRequestIn_preMsgHook(FwIndexType portNum, FwDpIdType id, FwSizeType dataSize)
Pre-message hook for async input port productRequestIn.
DpManagerComponentBase(const char *compName="")
Construct DpManagerComponentBase object.
Fw::InputDpRequestPort * get_productRequestIn_InputPort(FwIndexType portNum)
bool isConnected_productSendOut_OutputPort(FwIndexType portNum)
void regCommands()
Register commands with the Command Dispatcher.
friend class DpManagerComponentBaseFriend
Friend class for white-box testing.
FwIndexType getNum_cmdResponseOut_OutputPorts() const
RateGroupDivider component implementation.
void set_bufferGetOut_OutputPort(FwIndexType portNum, Fw::InputBufferGetPort *port)
Connect port to bufferGetOut[portNum].
FwIndexType getNum_productSendOut_OutputPorts() const
bool isConnected_tlmOut_OutputPort(FwIndexType portNum)
FwIndexType getNum_tlmOut_OutputPorts() const
Fw::Success productGetIn_handlerBase(FwIndexType portNum, FwDpIdType id, FwSizeType dataSize, Fw::Buffer &buffer)
Handler base-class function for input port productGetIn.
bool isConnected_eventOut_OutputPort(FwIndexType portNum)
virtual void CLEAR_EVENT_THROTTLE_preMsgHook(FwOpcodeType opCode, U32 cmdSeq)
Pre-message hook for command CLEAR_EVENT_THROTTLE.
void set_eventOut_OutputPort(FwIndexType portNum, Fw::InputLogPort *port)
Connect port to eventOut[portNum].
void set_cmdRegIn_OutputPort(FwIndexType portNum, Fw::InputCmdRegPort *port)
Connect port to cmdRegIn[portNum].
void tlmWrite_NumBytes(U64 arg, Fw::Time _tlmTime=Fw::Time())
Success/Failure.
#define U64(C)
Definition: sha.h:180