This commit is contained in:
@ -156,7 +156,7 @@ void UartTestClass::scexInit() {
|
||||
std::string devname = "/dev/ul-scex";
|
||||
#endif
|
||||
uartCookie = new UartCookie(this->getObjectId(), devname, UartBaudRate::RATE_57600, 4096);
|
||||
reader->setDebugMode(true);
|
||||
reader->setDebugMode(false);
|
||||
ReturnValue_t result = reader->initializeInterface(uartCookie);
|
||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::warning << "UartTestClass::gpsPeriodic: Initializing SCEX reader "
|
||||
@ -186,9 +186,11 @@ void UartTestClass::scexPeriodic() {
|
||||
if (cmdSent and not cmdDone) {
|
||||
uint8_t* decodedPacket = nullptr;
|
||||
size_t len = 0;
|
||||
ReturnValue_t result = reader->readReceivedMessage(uartCookie, &decodedPacket, &len);
|
||||
|
||||
if (len > 0) {
|
||||
do {
|
||||
ReturnValue_t result = reader->readReceivedMessage(uartCookie, &decodedPacket, &len);
|
||||
if(len == 0){
|
||||
break;
|
||||
}
|
||||
ScexHelper helper;
|
||||
const uint8_t* helperPtr = decodedPacket;
|
||||
result = helper.deSerialize(&helperPtr, &len);
|
||||
@ -197,25 +199,35 @@ void UartTestClass::scexPeriodic() {
|
||||
}
|
||||
sif::info << helper << endl;
|
||||
|
||||
//ping
|
||||
//if ping cmd
|
||||
if(helper.getCmd() == PING) {
|
||||
ofstream out("/tmp/scex-ping.bin", ofstream::binary );
|
||||
if (out.bad()) {
|
||||
sif::warning << "bad" <<std::endl;
|
||||
// ping
|
||||
// if ping cmd
|
||||
if (helper.getCmd() == PING) {
|
||||
ofstream out("/tmp/scex-ping.bin", ofstream::binary);
|
||||
if (out.bad()) {
|
||||
sif::warning << "bad" << std::endl;
|
||||
}
|
||||
out << helper;
|
||||
}
|
||||
out << helper;
|
||||
}
|
||||
//fram
|
||||
//packetcounter eins h<>her, wenn mehr packet verloren ->
|
||||
//countdown (max 2min), wenn nicht if (helper.getPacketCounter() == helper.getTotalPacketCounter()) { nach 2min reader->finish();
|
||||
if(helper.getCmd() == FRAM) {
|
||||
if(helper.getPacketCounter() == 0) {
|
||||
ofstream out("/tmp/scex-fram.bin", ofstream::binary ); // neues file anlegen wie oben ping
|
||||
} else {
|
||||
ofstream out("/tmp/scex-fram.bin", ofstream::binary | ofstream::app );// an bestehendes file hinzuf<75>gen
|
||||
out << helper;
|
||||
}
|
||||
// fram
|
||||
// packetcounter eins h<>her, wenn mehr packet verloren -> merkt sich welches packet fehlt
|
||||
//was wenn erstes packet fehlt; mit boolean var (firstpacketarrived=false) die immer mit finish false wird?
|
||||
// countdown (max 2min), wenn nicht if (helper.getPacketCounter() ==
|
||||
// helper.getTotalPacketCounter()) { nach 2min reader->finish();
|
||||
if (helper.getCmd() == FRAM) {
|
||||
if (helper.getPacketCounter() == 1) {
|
||||
//countdown starten
|
||||
finishCountdown.resetTimer();
|
||||
ofstream out("/tmp/scex-fram.bin",
|
||||
ofstream::binary); // neues file anlegen wie oben ping
|
||||
} else {
|
||||
ofstream out("/tmp/scex-fram.bin",
|
||||
ofstream::binary | ofstream::app); // an bestehendes file hinzuf<75>gen
|
||||
out << helper;
|
||||
}
|
||||
|
||||
if(finishCountdown.hasTimedOut()){
|
||||
reader->finish();
|
||||
}
|
||||
}
|
||||
|
||||
if (helper.getPacketCounter() == helper.getTotalPacketCounter()) {
|
||||
@ -226,7 +238,7 @@ void UartTestClass::scexPeriodic() {
|
||||
cmdSent = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (len > 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -313,8 +325,9 @@ void UartTestClass::scexSimplePeriodic() {
|
||||
<< errno << ", " << strerror(errno) << "]" << std::endl;
|
||||
break;
|
||||
} else if (bytesRead >= static_cast<int>(recBuf.size())) {
|
||||
sif::debug << "UartTestClass::performPeriodicAction: recv buffer might not be large enough"
|
||||
<< std::endl;
|
||||
sif::debug << "UartTestClass::performPeriodicAction: recv buffer might not be large "
|
||||
"enough, bytes read:"
|
||||
<< bytesRead << std::endl;
|
||||
} else if (bytesRead > 0) {
|
||||
dleParser->passData(recBuf.data(), bytesRead);
|
||||
if (currCmd == ScexCmds::PING) {
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <fsfw/container/SimpleRingBuffer.h>
|
||||
#include <fsfw/globalfunctions/DleEncoder.h>
|
||||
#include <fsfw/globalfunctions/DleParser.h>
|
||||
#include <fsfw/timemanager/Countdown.h>
|
||||
#include <fsfw_hal/linux/uart/UartCookie.h>
|
||||
#include <termios.h> // Contains POSIX terminal control definitions
|
||||
|
||||
@ -46,6 +47,7 @@ class UartTestClass : public TestTask {
|
||||
static void foundDlePacketHandler(const DleParser::Context& ctx);
|
||||
void handleFoundDlePacket(uint8_t* packet, size_t len);
|
||||
|
||||
Countdown finishCountdown = Countdown(180 * 1000);
|
||||
bool cmdSent = false;
|
||||
bool cmdDone = false;
|
||||
scex::ScexCmds currCmd = scex::ScexCmds::PING;
|
||||
@ -59,7 +61,7 @@ class UartTestClass : public TestTask {
|
||||
bool startFound = false;
|
||||
ScexUartReader* reader = nullptr;
|
||||
std::array<uint8_t, 64> cmdBuf = {};
|
||||
std::array<uint8_t, 524> recBuf = {};
|
||||
std::array<uint8_t, 4096> recBuf = {};
|
||||
ScexDleParser* dleParser;
|
||||
scex::ScexCmds cmdHelper;
|
||||
uint8_t recvCnt = 0;
|
||||
|
Reference in New Issue
Block a user