F´ Flight Software - C/C++ Documentation devel
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FileUplink.hpp
Go to the documentation of this file.
1// ======================================================================
2// \title FileUplink.hpp
3// \author bocchino
4// \brief hpp file for FileUplink component implementation class
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
13#ifndef Svc_FileUplink_HPP
14#define Svc_FileUplink_HPP
15
18#include <Os/File.hpp>
19
20namespace Svc {
21
22 class FileUplink :
24 {
25
26 PRIVATE:
27
28 // ----------------------------------------------------------------------
29 // Types
30 // ----------------------------------------------------------------------
31
33 typedef enum { START, DATA } ReceiveMode;
34
36 class File {
37
38 public:
39
41 U32 size;
42
45
47 Os::File osFile;
48
49 PRIVATE:
50
52 ::CFDP::Checksum m_checksum;
53
54 public:
55
58 const Fw::FilePacket::StartPacket& startPacket
59 );
60
62 Os::File::Status write(
63 const U8 *const data,
64 const U32 byteOffset,
65 const U32 length
66 );
67
69 void getChecksum(::CFDP::Checksum& checksum) {
70 checksum = this->m_checksum;
71 }
72
73 };
74
76 class FilesReceived {
77
78 public:
79
81 FilesReceived(FileUplink *const fileUplink) :
82 m_received_files_counter(0),
83 m_fileUplink(fileUplink)
84 { }
85
86 public:
87
89 void fileReceived() {
90 ++this->m_received_files_counter;
91 this->m_fileUplink->tlmWrite_FilesReceived(m_received_files_counter);
92 }
93
94 PRIVATE:
95
97 U32 m_received_files_counter;
98
100 FileUplink *const m_fileUplink;
101
102 };
103
105 class PacketsReceived {
106
107 public:
108
110 PacketsReceived(FileUplink *const fileUplink) :
111 m_received_packet_count(0),
112 m_fileUplink(fileUplink)
113 { }
114
115 public:
116
118 void packetReceived() {
119 ++this->m_received_packet_count;
120 this->m_fileUplink->tlmWrite_PacketsReceived(m_received_packet_count);
121 }
122
123 PRIVATE:
124
126 U32 m_received_packet_count;
127
129 FileUplink *const m_fileUplink;
130
131 };
132
134 class Warnings {
135
136 public:
137
139 Warnings(FileUplink *const fileUplink) :
140 m_warning_count(0),
141 m_fileUplink(fileUplink)
142 { }
143
144 public:
145
147 void invalidReceiveMode(const Fw::FilePacket::Type packetType);
148
150 void fileOpen(Fw::LogStringArg& fileName);
151
153 void packetOutOfBounds(
154 const U32 sequenceIndex,
155 Fw::LogStringArg& fileName
156 );
157
159 void packetOutOfOrder(
160 const U32 sequenceIndex,
161 const U32 lastSequenceIndex
162 );
163
165 void fileWrite(Fw::LogStringArg& fileName);
166
168 void badChecksum(
169 const U32 computed,
170 const U32 read
171 );
172
173 PRIVATE:
174
176 void warning() {
177 ++this->m_warning_count;
178 this->m_fileUplink->tlmWrite_Warnings(m_warning_count);
179 }
180
181 PRIVATE:
182
184 U32 m_warning_count;
185
187 FileUplink *const m_fileUplink;
188
189 };
190
191 public:
192
193 // ----------------------------------------------------------------------
194 // Construction, initialization, and destruction
195 // ----------------------------------------------------------------------
196
200 const char *const name
201 );
202
205 void init(
206 const NATIVE_INT_TYPE queueDepth,
207 const NATIVE_INT_TYPE instance
208 );
209
212 ~FileUplink();
213
214 PRIVATE:
215
216 // ----------------------------------------------------------------------
217 // Handler implementations for user-defined typed input ports
218 // ----------------------------------------------------------------------
219
222 void bufferSendIn_handler(
223 const NATIVE_INT_TYPE portNum,
224 Fw::Buffer& buffer
225 );
226
229 void pingIn_handler(
230 const NATIVE_INT_TYPE portNum,
231 U32 key
232 );
233
234
235 PRIVATE:
236
237 // ----------------------------------------------------------------------
238 // Private helper functions
239 // ----------------------------------------------------------------------
240
242 void handleStartPacket(const Fw::FilePacket::StartPacket& startPacket);
243
245 void handleDataPacket(const Fw::FilePacket::DataPacket& dataPacket);
246
248 void handleEndPacket(const Fw::FilePacket::EndPacket& endPacket);
249
251 void handleCancelPacket();
252
254 void checkSequenceIndex(const U32 sequenceIndex);
255
257 void compareChecksums(const Fw::FilePacket::EndPacket& endPacket);
258
260 void goToStartMode();
261
263 void goToDataMode();
264
265 PRIVATE:
266
267 // ----------------------------------------------------------------------
268 // Member variables
269 // ----------------------------------------------------------------------
270
272 ReceiveMode receiveMode;
273
275 U32 lastSequenceIndex;
276
278 File file;
279
281 FilesReceived filesReceived;
282
284 PacketsReceived packetsReceived;
285
287 Warnings warnings;
288
289 };
290
291}
292
293#endif
PlatformIntType NATIVE_INT_TYPE
Definition BasicTypes.h:51
uint8_t U8
8-bit unsigned integer
Definition BasicTypes.h:26
Class representing a CFDP checksum.
Definition Checksum.hpp:23
The type of a data packet.
The type of an end packet.
void init()
Object initializer.
Definition ObjBase.cpp:27
The type of a start packet.
Type
Packet type.