F´ Flight Software - C/C++ Documentation  NASA-v1.6.0
A framework for building embedded system applications to NASA flight quality standards.
SerializableFile.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title SerializableFile.cpp
3 // \author dinkel
4 // \brief cpp file for SerializableFile
5 //
6 // \copyright
7 // Copyright 2009-2016, by the California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged.
10 //
11 // ======================================================================
12 
14 #include "Fw/Types/Assert.hpp"
15 #include "Os/File.hpp"
16 
17 namespace Fw {
18 
20  allocator(allocator),
21  recoverable(false), // for compiler; not used
22  actualSize(maxSerializedSize),
23  buffer(static_cast<U8*>(this->allocator->allocate(0, actualSize, recoverable)), actualSize)
24  {
25  // assert if allocator returns smaller size
26  FW_ASSERT(maxSerializedSize == actualSize,maxSerializedSize,actualSize);
27  FW_ASSERT(nullptr != buffer.getBuffAddr());
28  }
29 
31  this->allocator->deallocate(0, this->buffer.getBuffAddr());
32  }
33 
34  SerializableFile::Status SerializableFile::load(const char* fileName, Serializable& serializable) {
35  Os::File file;
36  Os::File::Status status;
37  status = file.open(fileName, Os::File::OPEN_READ);
38  if( Os::File::OP_OK != status ) {
39  return FILE_OPEN_ERROR;
40  }
41 
42  NATIVE_INT_TYPE capacity = this->buffer.getBuffCapacity();
43  NATIVE_INT_TYPE length = capacity;
44  status = file.read(this->buffer.getBuffAddr(), length, false);
45  if( Os::File::OP_OK != status ) {
46  file.close();
47  return FILE_READ_ERROR;
48  }
49  file.close();
50 
51  this->reset();
52  SerializeStatus serStatus;
53  serStatus = this->buffer.setBuffLen(static_cast<NATIVE_UINT_TYPE>(length));
54  FW_ASSERT(FW_SERIALIZE_OK == serStatus, serStatus);
55  serStatus = serializable.deserialize(this->buffer);
56  if(FW_SERIALIZE_OK != serStatus) {
57  return DESERIALIZATION_ERROR;
58  }
59 
61  }
62 
63  SerializableFile::Status SerializableFile::save(const char* fileName, Serializable& serializable) {
64  this->reset();
65  SerializeStatus serStatus = serializable.serialize(this->buffer);
66  FW_ASSERT(FW_SERIALIZE_OK == serStatus, serStatus);
67 
68  Os::File file;
69  Os::File::Status status;
70  status = file.open(fileName, Os::File::OPEN_WRITE);
71  if( Os::File::OP_OK != status ) {
72  return FILE_OPEN_ERROR;
73  }
74 
75  NATIVE_INT_TYPE length = this->buffer.getBuffLength();
76  NATIVE_INT_TYPE size = length;
77  status = file.write(this->buffer.getBuffAddr(), length);
78  if( (Os::File::OP_OK != status) ||
79  (length != size) )
80  {
81  file.close();
82  return FILE_WRITE_ERROR;
83  }
84 
85  file.close();
86 
88  }
89 
90  void SerializableFile::reset() {
91  this->buffer.resetSer();
92  this->buffer.resetDeser();
93  }
94 }
Fw::SerializableFile::DESERIALIZATION_ERROR
@ DESERIALIZATION_ERROR
Definition: SerializableFile.hpp:31
Fw::SerializableFile::SerializableFile
SerializableFile(MemAllocator *allocator, NATIVE_UINT_TYPE maxSerializedSize)
Definition: SerializableFile.cpp:19
SerializableFile.hpp
Fw::SerializableFile::FILE_WRITE_ERROR
@ FILE_WRITE_ERROR
Definition: SerializableFile.hpp:29
Fw::SerializeStatus
SerializeStatus
forward declaration for string
Definition: Serializable.hpp:14
Fw::SerializeBufferBase::resetDeser
void resetDeser(void)
reset deserialization to beginning
Definition: Serializable.cpp:577
Os::File::close
void close()
close file
Definition: File.cpp:37
Os::File::read
Status read(void *buffer, NATIVE_INT_TYPE &size, bool waitForFull=true)
waitForFull = true to wait for all bytes to be read
Definition: File.cpp:29
Fw::MemAllocator::deallocate
virtual void deallocate(const NATIVE_UINT_TYPE identifier, void *ptr)=0
Deallocate memory.
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:73
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:28
Fw::SerializableFile::Status
Status
Definition: SerializableFile.hpp:26
Fw::SerialBuffer::getBuffCapacity
NATIVE_UINT_TYPE getBuffCapacity() const
returns capacity, not current size, of buffer
Definition: SerialBuffer.cpp:30
Fw::SerializeBufferBase::resetSer
void resetSer(void)
reset to beginning of buffer to reuse for serialization
Definition: Serializable.cpp:572
Fw::Serializable
forward declaration
Definition: Serializable.hpp:26
Fw::SerializableFile::~SerializableFile
~SerializableFile()
Definition: SerializableFile.cpp:30
Fw::SerializableFile::OP_OK
@ OP_OK
Definition: SerializableFile.hpp:27
Os::File::write
Status write(const void *buffer, NATIVE_INT_TYPE &size, bool waitForDone=true)
write size; will return amount written or errno
Definition: File.cpp:33
Fw::SerializableFile::save
Status save(const char *fileName, Serializable &serializable)
Definition: SerializableFile.cpp:63
NATIVE_INT_TYPE
int NATIVE_INT_TYPE
native integer type declaration
Definition: BasicTypes.hpp:27
Fw::SerialBuffer::getBuffAddr
U8 * getBuffAddr()
gets buffer address for data filling
Definition: SerialBuffer.cpp:36
Fw::Serializable::deserialize
virtual SerializeStatus deserialize(SerializeBufferBase &buffer)=0
deserialize to contents
Fw::SerializableFile::load
Status load(const char *fileName, Serializable &serializable)
Definition: SerializableFile.cpp:34
Os::File::OPEN_WRITE
@ OPEN_WRITE
Open file for writing.
Definition: File.hpp:17
Fw::SerializeBufferBase::setBuffLen
SerializeStatus setBuffLen(NATIVE_UINT_TYPE length)
sets buffer length manually after filling with data
Definition: Serializable.cpp:611
Os::File::open
Status open(const char *fileName, Mode mode)
open file. Writing creates file if it doesn't exist
Definition: File.cpp:13
Fw::SerializeBufferBase::getBuffLength
NATIVE_UINT_TYPE getBuffLength() const
returns current buffer size
Definition: Serializable.cpp:594
File.hpp
Fw::MemAllocator
Definition: MemAllocator.hpp:44
Fw::SerializableFile::FILE_READ_ERROR
@ FILE_READ_ERROR
Definition: SerializableFile.hpp:30
FW_ASSERT
#define FW_ASSERT(...)
Definition: Assert.hpp:9
Fw::SerializableFile::FILE_OPEN_ERROR
@ FILE_OPEN_ERROR
Definition: SerializableFile.hpp:28
Fw::Serializable::serialize
virtual SerializeStatus serialize(SerializeBufferBase &buffer) const =0
serialize contents
Os::File::Status
Status
Definition: File.hpp:24
Os::File::OP_OK
@ OP_OK
Operation was successful.
Definition: File.hpp:25
Os::File::OPEN_READ
@ OPEN_READ
Open file for reading.
Definition: File.hpp:16
Os::File
Definition: File.hpp:11
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
Fw
Definition: SerIds.hpp:20