F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
Loading...
Searching...
No Matches
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 packetDuplicate(
166 const U32 sequenceIndex
167 );
168
170 void fileWrite(Fw::LogStringArg& fileName);
171
173 void badChecksum(
174 const U32 computed,
175 const U32 read
176 );
177
178 PRIVATE:
179
181 void warning() {
182 ++this->m_warning_count;
183 this->m_fileUplink->tlmWrite_Warnings(m_warning_count);
184 }
185
186 PRIVATE:
187
189 U32 m_warning_count;
190
192 FileUplink *const m_fileUplink;
193
194 };
195
196 public:
197
198 // ----------------------------------------------------------------------
199 // Construction, initialization, and destruction
200 // ----------------------------------------------------------------------
201
205 const char *const name
206 );
207
210 ~FileUplink();
211
212 PRIVATE:
213
214 // ----------------------------------------------------------------------
215 // Handler implementations for user-defined typed input ports
216 // ----------------------------------------------------------------------
217
220 void bufferSendIn_handler(
221 const NATIVE_INT_TYPE portNum,
222 Fw::Buffer& buffer
223 );
224
227 void pingIn_handler(
228 const NATIVE_INT_TYPE portNum,
229 U32 key
230 );
231
232
233 PRIVATE:
234
235 // ----------------------------------------------------------------------
236 // Private helper functions
237 // ----------------------------------------------------------------------
238
240 void handleStartPacket(const Fw::FilePacket::StartPacket& startPacket);
241
243 void handleDataPacket(const Fw::FilePacket::DataPacket& dataPacket);
244
246 void handleEndPacket(const Fw::FilePacket::EndPacket& endPacket);
247
249 void handleCancelPacket();
250
252 void checkSequenceIndex(const U32 sequenceIndex);
253
255 bool checkDuplicatedPacket(const U32 sequenceIndex);
256
258 void compareChecksums(const Fw::FilePacket::EndPacket& endPacket);
259
261 void goToStartMode();
262
264 void goToDataMode();
265
266 PRIVATE:
267
268 // ----------------------------------------------------------------------
269 // Member variables
270 // ----------------------------------------------------------------------
271
273 ReceiveMode m_receiveMode;
274
276 U32 m_lastSequenceIndex;
277
279 Os::File::Status m_lastPacketWriteStatus;
280
282 File m_file;
283
285 FilesReceived m_filesReceived;
286
288 PacketsReceived m_packetsReceived;
289
291 Warnings m_warnings;
292
293 };
294
295}
296
297#endif
PlatformIntType NATIVE_INT_TYPE
Definition BasicTypes.h:55
uint8_t U8
8-bit unsigned integer
Definition BasicTypes.h:30
Class representing a 32-bit checksum as mandated by the CCSDS File Delivery Protocol.
Definition Checksum.hpp:53
The type of a data packet.
The type of an end packet.
The type of a start packet.
Type
Packet type.