F´ Flight Software - C/C++ Documentation  NASA-v1.5.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
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( (U8 *const) this->allocator->allocate(0, actualSize, recoverable), actualSize)
24  {
25  // assert if allocator returns smaller size
26  FW_ASSERT(maxSerializedSize == actualSize,maxSerializedSize,actualSize);
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
Fw::SerializableFile::buffer
SerialBuffer buffer
Definition: SerializableFile.hpp:46
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::SerializableFile::allocator
MemAllocator * allocator
Definition: SerializableFile.hpp:43
Fw::SerializeBufferBase::resetDeser
void resetDeser(void)
reset deserialization to beginning
Definition: Serializable.cpp:575
Os::File::close
void close(void)
close file
Definition: File.cpp:37
Fw::SerialBuffer::getBuffAddr
U8 * getBuffAddr(void)
gets buffer address for data filling
Definition: SerialBuffer.cpp:36
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:76
Fw::SerializableFile::Status
Status
Definition: SerializableFile.hpp:26
Fw::SerializableFile::actualSize
NATIVE_UINT_TYPE actualSize
Definition: SerializableFile.hpp:45
Fw::SerialBuffer::getBuffCapacity
NATIVE_UINT_TYPE getBuffCapacity(void) 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:570
Fw::Serializable
forward declaration
Definition: Serializable.hpp:26
Assert.hpp
Fw::SerializableFile::~SerializableFile
~SerializableFile()
Definition: SerializableFile.cpp:30
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
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
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:609
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
FW_ASSERT
#define FW_ASSERT(...)
Definition: Assert.hpp:9
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:592
File.hpp
Fw::MemAllocator
Definition: MemAllocator.hpp:44
Fw::SerializableFile::FILE_READ_ERROR
@ FILE_READ_ERROR
Definition: SerializableFile.hpp:30
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
NATIVE_INT_TYPE
int NATIVE_INT_TYPE
native integer type declaration
Definition: BasicTypes.hpp:29
Os::File::OPEN_READ
@ OPEN_READ
Open file for reading.
Definition: File.hpp:16
NULL
#define NULL
NULL.
Definition: BasicTypes.hpp:100
Os::File
Definition: File.hpp:11
Fw
Definition: BufferGetPortAc.cpp:6