Skip to content

Commit

Permalink
Setup support for continuous pipeline runs
Browse files Browse the repository at this point in the history
Reg Marr committed Jan 22, 2025
1 parent 26e4119 commit 4335e71
Showing 5 changed files with 56 additions and 17 deletions.
51 changes: 36 additions & 15 deletions FlightComputer/CCSDSTester/CCSDSTester.cpp
Original file line number Diff line number Diff line change
@@ -26,6 +26,7 @@
#include <cstdio>
#include <iomanip> // for std::hex and std::setfill
#include <iostream>
#include <iterator>
#include <string>
#include "CCSDSConfig.hpp"

@@ -106,19 +107,21 @@ void CCSDSTester::routeMessage(Fw::Buffer &messageBuffer, const U8 vcIdx) {

// Helper to generate and print a response
// NOTE this is just some test code for now
void CCSDSTester::runPipeline(Fw::ComBuffer &comResponse, const U8 vcIdx) {
comResponse.resetSer();
comResponse.setBuffLen(TMSpaceDataLink::FPrimeTransferFrame::SERIALIZED_SIZE);
Fw::Buffer response(comResponse.getBuffAddr(), comResponse.getBuffCapacity());
this->m_protocolEntity.generateNextFrame(response);
void CCSDSTester::runPipeline() {
for (NATIVE_UINT_TYPE vcIdx = 0; vcIdx < MessageNum; vcIdx++) {
this->m_pipelineBuffer.resetSer();
this->m_pipelineBuffer.setBuffLen(TMSpaceDataLink::FPrimeTransferFrame::SERIALIZED_SIZE);

TMSpaceDataLink::FPrimeTransferFrame frame;
Fw::Buffer response(this->m_pipelineBuffer.getBuffAddr(), this->m_pipelineBuffer.getBuffCapacity());
this->m_protocolEntity.generateNextFrame(response);

Fw::SerializeBufferBase &serBuff = response.getSerializeRepr();
serBuff.setBuffLen(serBuff.getBuffCapacity());
Fw::SerializeBufferBase &serBuff = response.getSerializeRepr();
serBuff.setBuffLen(serBuff.getBuffCapacity());

frame.extract(serBuff);
frame.dataField.print();
TMSpaceDataLink::FPrimeTransferFrame frame;
frame.extract(serBuff);
frame.dataField.print();
}
}

void CCSDSTester::seqCmdBuff_handler(NATIVE_INT_TYPE portNum,
@@ -196,6 +199,18 @@ void CCSDSTester::comStatusIn_handler(
// }
}

void CCSDSTester::run_handler(
const NATIVE_INT_TYPE portNum,
NATIVE_UINT_TYPE context
) {
// If we haven't enabled running the pipeline then return
if (!this->m_ShouldRunPipeline) {
return;
}

runPipeline();
}

void CCSDSTester::sendLoopbackMsg(loopbackMsgHeader_t &header) {
std::array<Fw::ComBuffer, MessageNum> comBuffers;
std::array<Fw::Buffer, MessageNum> plainBuffers;
@@ -222,11 +237,16 @@ void CCSDSTester::sendLoopbackMsg(loopbackMsgHeader_t &header) {
// Transfer data after all messages have been sent
this->m_protocolEntity.m_physicalChannel.m_subChannels.at(0).transfer(null_arg);

// Generate and handle responses
std::array<Fw::ComBuffer, MessageNum> responses;
for (int i = 0; i < MessageNum; i++) {
runPipeline(responses.at(i), i);
}
// // Generate and handle responses
// runPipeline();
}

void CCSDSTester::RUN_PIPELINE_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq) {
runPipeline();
}

void CCSDSTester::TOGGLE_RUN_PIPELINE_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq) {
this->m_ShouldRunPipeline = !this->m_ShouldRunPipeline;
}

void CCSDSTester::PING_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq) {
@@ -236,6 +256,7 @@ void CCSDSTester::PING_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq) {

cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
}

void CCSDSTester::MESSAGE_cmdHandler(const FwOpcodeType opCode,
const U32 cmdSeq,
const Fw::CmdStringArg &str1) {
9 changes: 9 additions & 0 deletions FlightComputer/CCSDSTester/CCSDSTester.fpp
Original file line number Diff line number Diff line change
@@ -53,6 +53,9 @@ module FlightComputer {
@ Buffer send in
async input port bufferSendIn: Fw.BufferSend

@ Run port for filling the FT4232 interface's buffer with data from the queue after processing (encoding) with potential padding
async input port run: Svc.Sched
@ Buffer send out
output port bufferSendOut: Fw.BufferSend
@@ -87,6 +90,12 @@ module FlightComputer {
@ Simple command received interface
async command PING
@ Trigger running the pipeline once
async command RUN_PIPELINE
@ Toggle running the pipeline continuously
async command TOGGLE_RUN_PIPELINE
@ Simple command received interface
# async command LONG_MESSAGE(str1: string)
async command MESSAGE(
10 changes: 9 additions & 1 deletion FlightComputer/CCSDSTester/CCSDSTester.hpp
Original file line number Diff line number Diff line change
@@ -39,14 +39,17 @@ class CCSDSTester : public CCSDSTesterComponentBase {
U32 m_MsgCnt = 0;
bool m_IsConnected = false;

bool m_ShouldRunPipeline = false;
Fw::ComBuffer m_pipelineBuffer;

void bufferSendIn_handler(const NATIVE_INT_TYPE portNum,
Fw::Buffer &fwBuffer);
Fw::Buffer createSerializedBuffer(const FwPacketDescriptorType packetType,
const std::array<U8, MessageSize> &data,
Fw::ComBuffer &comBuffer);
void sendLoopbackMsg(loopbackMsgHeader_t &header);
void routeMessage(Fw::Buffer &messageBuffer, const U8 vcIdx);
void runPipeline(Fw::ComBuffer &comResponse, const U8 vcIdx);
void runPipeline();

// Handler functions
void seqCmdBuff_handler(NATIVE_INT_TYPE portNum, Fw::ComBuffer &data,
@@ -56,6 +59,11 @@ class CCSDSTester : public CCSDSTesterComponentBase {
);

Drv::SendStatus drvSend_handler(FwIndexType, Fw::Buffer &);
void run_handler(const NATIVE_INT_TYPE portNum, NATIVE_UINT_TYPE context);

// Command handlers
void TOGGLE_RUN_PIPELINE_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq);
void RUN_PIPELINE_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq);
void PING_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq);
void MESSAGE_cmdHandler(const FwOpcodeType opCode, const U32 cmdSeq,
const Fw::CmdStringArg &str1);
1 change: 1 addition & 0 deletions FlightComputer/Top/topology.fpp
Original file line number Diff line number Diff line change
@@ -118,6 +118,7 @@ module FlightComputer {
rateGroupDriverComp.CycleOut[Ports_RateGroups.rateGroup3] -> rateGroup3Comp.CycleIn
rateGroup3Comp.RateGroupMemberOut[0] -> systemResources.run
rateGroup3Comp.RateGroupMemberOut[1] -> fileDownlink.Run
rateGroup3Comp.RateGroupMemberOut[2] -> ccsdsNode.run
}

# NOTE this is not really used atm and is here more to match closer to the Ref

0 comments on commit 4335e71

Please sign in to comment.