F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
FileWorker.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title FileWorker.hpp
3 // \author racheljt
4 // \brief hpp file for FileWorker component implementation class
5 // ======================================================================
6 
7 #ifndef Svc_FileWorker_HPP
8 #define Svc_FileWorker_HPP
9 
10 #include <atomic>
11 #include "Fw/Types/BasicTypes.hpp"
12 #include "Fw/Types/StringUtils.hpp"
13 #include "Os/File.hpp"
14 #include "Os/FileSystem.hpp"
15 #include "Os/Mutex.hpp"
18 #include "Utils/CRCChecker.hpp"
19 #include "Utils/Hash/Hash.hpp"
20 
21 namespace Svc {
22 
24  friend class FileWorkerTester;
25 
26  public:
27  // ----------------------------------------------------------------------
28  // Component construction and destruction
29  // ----------------------------------------------------------------------
30 
32  FileWorker(const char* const compName
33  );
34 
36  ~FileWorker();
37 
40  void configure(U64 chunkSize);
41 
42  private:
43  static constexpr U64 BLOCK_SIZE_BYTES = 4096;
44  static constexpr U32 TIMEOUT_MS = 1000000;
45  static constexpr U32 MAX_LOOP_ITERATIONS = 32;
46 
47  Svc::FileWorkerState m_state;
48  std::atomic<bool> m_abort;
49  U64 m_chunkSize;
50 
51  // ----------------------------------------------------------------------
52  // Handler implementations for typed input ports
53  // ----------------------------------------------------------------------
54 
56  void cancelIn_handler(FwIndexType portNum
57  ) override;
58 
60  void readIn_handler(FwIndexType portNum,
61  const Fw::StringBase& path,
62  Fw::Buffer& buffer) override;
63 
65  void verifyIn_handler(FwIndexType portNum,
66  const Fw::StringBase& path,
67  U32 crc) override;
68 
70  void writeIn_handler(FwIndexType portNum,
71  const Fw::StringBase& path,
72  Fw::Buffer& buffer,
73  FwSizeType offsetBytes,
74  bool append) override;
75 
76  // ----------------------------------------------------------------------
77  // Helper functions
78  // ----------------------------------------------------------------------
79 
80  Svc::FileWorkerStatus readBufferFromFile(Fw::Buffer& buffer, const char* const fileName);
81  Svc::FileWorkerReadStatus readFile(Fw::Buffer& buffer,
82  FwSizeType size,
83  Os::File& file,
84  const Fw::LogStringArg& fileNameStr);
85  Svc::FileWorkerReadStatus readFileBytes(Fw::Buffer& buffer, FwSizeType size, Os::File& file, FwSizeType& bytesRead);
86 
87  bool getHash(const char* const hashFileName,
88  Utils::Hash& hash,
89  Utils::HashBuffer& hashBuffer,
90  const U8* const data,
91  const FwSizeType size);
92  bool writeBufferToFile(Fw::Buffer& buffer, const char* fileName, FwSizeType offset, bool append);
93  void writeBufferHashToFile(Fw::Buffer& buffer, const char* fileName, FwSizeType offset, bool append);
94  FwSizeType writeToFile(const U8* data, FwSizeType size, Os::File& file, const char* fileName);
95 };
96 
97 } // namespace Svc
98 
99 #endif
PlatformSizeType FwSizeType
friend class FileWorkerTester
Definition: FileWorker.hpp:24
A generic interface for creating and comparing hash values.
Definition: Hash.hpp:24
~FileWorker()
Destroy FileWorker object.
Definition: FileWorker.cpp:26
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:54
PlatformIndexType FwIndexType
void configure(U64 chunkSize)
Definition: FileWorker.cpp:21
C++ header for working with basic fprime types.
A container class for holding a hash buffer.
Definition: HashBuffer.hpp:26
FileWorker(const char *const compName)
Construct FileWorker object.
Definition: FileWorker.cpp:15
RateGroupDivider component implementation.
FileWorkerReadStatus
Auto-generated base for FileWorker component.