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 
38  void configure(U64 chunkSize);
39 
40  private:
41  static constexpr U64 BLOCK_SIZE_BYTES = 4096;
42  static constexpr U32 TIMEOUT_MS = 1000000;
43  static constexpr U32 MAX_LOOP_ITERATIONS = 32;
44 
45  Svc::FileWorkerState m_state;
46  std::atomic<bool> m_abort;
47  U64 m_chunkSize;
48 
49  // ----------------------------------------------------------------------
50  // Handler implementations for typed input ports
51  // ----------------------------------------------------------------------
52 
54  void cancelIn_handler(FwIndexType portNum
55  ) override;
56 
58  void readIn_handler(FwIndexType portNum,
59  const Fw::StringBase& path,
60  Fw::Buffer& buffer) override;
61 
63  void verifyIn_handler(FwIndexType portNum,
64  const Fw::StringBase& path,
65  U32 crc) override;
66 
68  void writeIn_handler(FwIndexType portNum,
69  const Fw::StringBase& path,
70  Fw::Buffer& buffer,
71  U64 offsetBytes,
72  bool append) override;
73 
74  // ----------------------------------------------------------------------
75  // Helper functions
76  // ----------------------------------------------------------------------
77 
78  Svc::FileWorkerStatus readBufferFromFile(Fw::Buffer& buffer, const char* const fileName);
79  void readFile(Fw::Buffer& buffer, FwSizeType size, Os::File& file, const Fw::LogStringArg& fileNameStr);
80  Svc::FileWorkerReadStatus readFileBytes(Fw::Buffer& buffer, FwSizeType size, Os::File& file, FwSizeType& bytesRead);
81 
82  bool getHash(const char* const hashFileName,
83  Utils::Hash& hash,
84  Utils::HashBuffer& hashBuffer,
85  const U8* const data,
86  const FwSizeType size);
87  bool writeBufferToFile(Fw::Buffer& buffer, const char* fileName, FwSizeType offset, bool append);
88  void writeBufferHashToFile(Fw::Buffer& buffer, const char* fileName, FwSizeType offset, bool append);
89  FwSizeType writeToFile(const U8* data, FwSizeType size, Os::File& file, const char* fileName);
90 };
91 
92 } // namespace Svc
93 
94 #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:23
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:53
PlatformIndexType FwIndexType
void configure(U64 chunkSize)
Definition: FileWorker.cpp:18
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.
#define U64(C)
Definition: sha.h:181