F´ Flight Software - C/C++ Documentation  NASA-v1.6.0
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BufferLogger.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title BufferLogger.cpp
3 // \author bocchino, dinkel, mereweth
4 // \brief Svc BufferLogger implementation
5 //
6 // \copyright
7 // Copyright (C) 2015-2017 California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged.
10 //
11 // ======================================================================
12 
14 
15 namespace Svc {
16 
17  typedef BufferLogger_LogState LogState;
18  // ----------------------------------------------------------------------
19  // Construction, initialization, and destruction
20  // ----------------------------------------------------------------------
21 
23  BufferLogger(const char *const compName) :
24  BufferLoggerComponentBase(compName),
25  m_state(LogState::LOGGING_ON),
26  m_file(*this)
27  {
28 
29  }
30 
31  void BufferLogger ::
33  const NATIVE_INT_TYPE queueDepth,
34  const NATIVE_INT_TYPE instance
35  )
36  {
37  BufferLoggerComponentBase::init(queueDepth, instance);
38  }
39 
40  // ----------------------------------------------------------------------
41  // Public methods
42  // ----------------------------------------------------------------------
43 
44  //TODO(mereweth) - only allow calling this once?
45  void BufferLogger ::
47  const char *const logFilePrefix,
48  const char *const logFileSuffix,
49  const U32 maxFileSize,
50  const U8 sizeOfSize
51  )
52  {
53  m_file.init(logFilePrefix, logFileSuffix, maxFileSize, sizeOfSize);
54  }
55 
56  // ----------------------------------------------------------------------
57  // Handler implementations for user-defined typed input ports
58  // ----------------------------------------------------------------------
59 
60  void BufferLogger ::
61  bufferSendIn_handler(
62  const NATIVE_INT_TYPE portNum,
63  Fw::Buffer& fwBuffer
64  )
65  {
66  if (m_state == LogState::LOGGING_ON) {
67  const U8 *const addr = fwBuffer.getData();
68  const U32 size = fwBuffer.getSize();
69  m_file.logBuffer(addr, size);
70  }
71  this->bufferSendOut_out(0, fwBuffer);
72  }
73 
74  void BufferLogger ::
75  comIn_handler(
76  NATIVE_INT_TYPE portNum,
77  Fw::ComBuffer &data,
78  U32 context
79  )
80  {
81  if (m_state == LogState::LOGGING_ON) {
82  const U8 *const addr = data.getBuffAddr();
83  const U32 size = data.getBuffLength();
84  m_file.logBuffer(addr, size);
85  }
86  }
87 
88  void BufferLogger ::
89  pingIn_handler(NATIVE_INT_TYPE portNum, U32 key)
90  {
91  this->pingOut_out(0, key);
92  }
93 
94  void BufferLogger ::
95  schedIn_handler(
96  const NATIVE_INT_TYPE portNum,
97  NATIVE_UINT_TYPE context
98  )
99  {
100  // TODO
101  }
102 
103  // ----------------------------------------------------------------------
104  // Command handler implementations
105  // ----------------------------------------------------------------------
106 
107  // TODO(mereweth) - should this command only set the base name?
108  void BufferLogger ::
109  BL_OpenFile_cmdHandler(
110  const FwOpcodeType opCode,
111  const U32 cmdSeq,
112  const Fw::CmdStringArg& file
113  )
114  {
115  m_file.setBaseName(file);
116  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
117  }
118 
119  void BufferLogger ::
120  BL_CloseFile_cmdHandler(
121  const FwOpcodeType opCode,
122  const U32 cmdSeq
123  )
124  {
125  m_file.closeAndEmitEvent();
126  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
127  }
128 
129  void BufferLogger ::
130  BL_SetLogging_cmdHandler(
131  const FwOpcodeType opCode,
132  const U32 cmdSeq,
133  LogState state
134  )
135  {
136  m_state = state;
137  if (state == LogState::LOGGING_OFF) {
138  m_file.closeAndEmitEvent();
139  }
140  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
141  }
142 
143  void BufferLogger ::
144  BL_FlushFile_cmdHandler(
145  const FwOpcodeType opCode,
146  const U32 cmdSeq
147  )
148  {
149  const bool status = m_file.flush();
150  if(status)
151  {
152  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
153  }
154  else
155  {
156  this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::EXECUTION_ERROR);
157  }
158  }
159 
160 };
Svc::BufferLogger::BufferLogger
BufferLogger(const char *const compName)
Create a BufferLogger object.
Definition: BufferLogger.cpp:23
BufferLogger.hpp
Fw::Buffer::getData
U8 * getData() const
Definition: Buffer.cpp:60
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Fw::Buffer
Definition: Buffer.hpp:43
Fw::CmdStringArg
Definition: CmdString.hpp:11
Fw::ComBuffer::getBuffAddr
U8 * getBuffAddr()
gets buffer address for data filling
Definition: ComBuffer.cpp:36
Svc::BufferLogger::initLog
void initLog(const char *const logFilePrefix, const char *const logFileSuffix, const U32 maxFileSize, const U8 sizeOfSize)
Set up log file parameters.
Definition: BufferLogger.cpp:46
Fw::Buffer::getSize
U32 getSize() const
Definition: Buffer.cpp:64
Svc::LogState
BufferLogger_LogState LogState
Definition: BufferLogger.cpp:17
FwOpcodeType
#define FwOpcodeType
Type representation for a command opcode.
Definition: FpConfig.hpp:58
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Svc::BufferLogger::init
void init(const NATIVE_INT_TYPE queueDepth, const NATIVE_INT_TYPE instance)
Initialize a BufferLogger object.
Definition: BufferLogger.cpp:32
Fw::SerializeBufferBase::getBuffLength
NATIVE_UINT_TYPE getBuffLength() const
returns current buffer size
Definition: Serializable.cpp:591
OK
@ OK
Definition: StandardTypes.hpp:14
Svc
Definition: ActiveRateGroupImplCfg.hpp:18
NATIVE_INT_TYPE
int NATIVE_INT_TYPE
native integer type declaration
Definition: BasicTypes.hpp:29
Fw::ComBuffer
Definition: ComBuffer.hpp:21