Svc::FileUplink Component
1 Introduction
FileUplink
is an active ISF component.
It manages uplink of files to the spacecraft.
2 Requirements
Requirement | Description | Rationale | Verification Method |
---|---|---|---|
ISF-FU-001 | FileUplink shall receive file packets, assemble them into files, and store the files in the on-board non-volatile storage. |
This requirement provides the capability to uplink files to the spacecraft. | Test |
3 Design
3.1 Assumptions
The design of FileUplink
assumes the following:
-
File uplink occurs by dividing files into packets of type
Fw::FilePacket
. -
In the nominal case of file uplink
a. Files are received one at a time. All packets of one file are received before receiving any packets of the next file.
b. Within a file, packets are received in order.
3.2 Block Description Diagram (BDD)
3.3 Ports
3.3.1 Role Ports
Name | Type | Role |
---|---|---|
timeCaller |
Fw::Time |
TimeGet |
tlmOut |
Fw::Tlm |
Telemetry |
eventOut |
Fw::LogEvent |
LogEvent |
3.3.2 Component-Specific Ports
Name | Type | Kind | Purpose |
---|---|---|---|
bufferSendIn |
Fw::BufferSend |
async input | Receives buffers containing file packets. |
bufferSendOut |
Fw::BufferSend |
output | Returns buffers for deallocation. |
3.4 State
FileUplink
maintains the following state:
-
receiveMode: One of START or DATA, recording the type of the next packet that
FileUplink
expects to receive. The initial value is START. -
lastSequenceIndex: An integer recording the sequence index of the last packet received. The initial value is zero.
-
writeFileDescriptor: The file descriptor of the file, if any, that is currently open for writing.
3.5 The bufferSendIn Port
FileUplink
asynchronously receives buffers on
bufferSendIn
.
Each buffer contains a file packet.
When FileUplink
receives a buffer, it (a) determines the type
of the file packet in the buffer; (b) takes action as
specified in section below corresponding to the packet type; and (c)
invokes bufferSendOut
to return the buffer for deallocation.
3.5.1 START Packets
Upon receipt of a START packet, FileUplink
does the following:
-
If receiveMode is not START, then close the file at writeFileDescriptor and issue an InvalidReceiveMode warning.
-
Open the file for writing and set writeFileDescriptor.
-
If step 2 succeeded, then set lastSequenceIndex to zero and go to DATA mode; otherwise issue a FileOpenError warning and go to START mode.
3.5.2 DATA Packets
Upon receipt of a DATA packet P, FileUplink
does the following,
where I is the
sequence index
of P:
-
If receiveMode is not DATA, then issue an InvalidReceiveMode warning and go to START mode.
-
Otherwise
a. If I is not equal to lastSequenceIndex + 1, then issue a PacketOutOfOrder warning reporting lastSequenceIndex and I.
b. If the packet offset and size are in bounds for the current file, then
-
Using writeFileDescriptor, write the file data in the packet at offset specified in the packet.
-
If there was an error writing the file, then issue a FileWriteError warning.
c. Otherwise issue a PacketOutOfBounds warning.
-
3.5.3 END Packets
Upon receipt of an END packet P, FileUplink
does the following:
-
If receiveMode is DATA, then do the following, where I is the sequence index of P:
a. If I is not equal to lastSequenceIndex + 1, then issue a PacketOutOfOrder warning reporting lastSequenceIndex and I.
b. Use writeFileDescriptor to do the following:
-
Use the method described in § 4.1.2 of the CCSDS File Delivery Protocol (CFDP) Recommended Standard to compute the checksum value for the file.
-
Compare the value computed in the previous step against the checksum value in the packet. If the two values are different, then issue a BadChecksum warning.
c. Close the file.
-
-
Otherwise issue an InvalidReceiveMode warning.
-
Set lastSequenceIndex to zero and go to START mode.
3.5.4 CANCEL Packets
Upon receipt of a cancel packet P, FileUplink
does the following:
-
Set lastSequenceIndex to zero.
-
If receiveMode is not START, then close the file at writeFileDescriptor.
-
Issue an UplinkCanceled event.
-
Go to START mode.
4 Dictionary
TBD
5 Checklists
Checklist |
---|
Design |
Code |
Unit Test |
6 Unit Testing
TODO