Retrieve M17 source, destination and extended callsign data from LSF
This commit is contained in:
parent
a0f5d55cc1
commit
dc0114e7e2
|
|
@ -22,6 +22,7 @@
|
||||||
#include <interfaces/delays.h>
|
#include <interfaces/delays.h>
|
||||||
#include <interfaces/audio.h>
|
#include <interfaces/audio.h>
|
||||||
#include <interfaces/radio.h>
|
#include <interfaces/radio.h>
|
||||||
|
#include <M17/M17Callsign.hpp>
|
||||||
#include <OpMode_M17.hpp>
|
#include <OpMode_M17.hpp>
|
||||||
#include <audio_codec.h>
|
#include <audio_codec.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
@ -123,7 +124,6 @@ void OpMode_M17::update(rtxStatus_t *const status, const bool newCfg)
|
||||||
platform_ledOn(GREEN);
|
platform_ledOn(GREEN);
|
||||||
else
|
else
|
||||||
platform_ledOff(GREEN);
|
platform_ledOff(GREEN);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TX:
|
case TX:
|
||||||
|
|
@ -198,15 +198,45 @@ void OpMode_M17::rxState(rtxStatus_t *const status)
|
||||||
// Process new data
|
// Process new data
|
||||||
if(newData)
|
if(newData)
|
||||||
{
|
{
|
||||||
auto& frame = demodulator.getFrame();
|
auto& frame = demodulator.getFrame();
|
||||||
auto type = decoder.decodeFrame(frame);
|
auto type = decoder.decodeFrame(frame);
|
||||||
bool lsfOk = decoder.getLsf().valid();
|
auto lsf = decoder.getLsf();
|
||||||
|
status->lsfOk = lsf.valid();
|
||||||
|
|
||||||
if((type == M17FrameType::STREAM) && (lsfOk == true) && (pthSts == PATH_OPEN))
|
if(status->lsfOk)
|
||||||
{
|
{
|
||||||
M17StreamFrame sf = decoder.getStreamFrame();
|
// Retrieve stream source and destination data
|
||||||
codec_pushFrame(sf.payload().data(), false);
|
std::string dst = lsf.getDestination();
|
||||||
codec_pushFrame(sf.payload().data() + 8, false);
|
std::string src = lsf.getSource();
|
||||||
|
strncpy(status->M17_src, src.c_str(), 10);
|
||||||
|
strncpy(status->M17_dst, dst.c_str(), 10);
|
||||||
|
|
||||||
|
// Retrieve extended callsign data
|
||||||
|
streamType_t streamType = lsf.getType();
|
||||||
|
|
||||||
|
if((streamType.fields.encType == M17_ENCRYPTION_NONE) &&
|
||||||
|
(streamType.fields.encSubType == M17_META_EXTD_CALLSIGN))
|
||||||
|
{
|
||||||
|
meta_t& meta = lsf.metadata();
|
||||||
|
std::string exCall1 = decode_callsign(meta.extended_call_sign.call1);
|
||||||
|
std::string exCall2 = decode_callsign(meta.extended_call_sign.call2);
|
||||||
|
|
||||||
|
strncpy(status->M17_orig, exCall1.c_str(), 10);
|
||||||
|
strncpy(status->M17_refl, exCall2.c_str(), 10);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status->M17_orig[0] = '\0';
|
||||||
|
status->M17_refl[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract audio data
|
||||||
|
if((type == M17FrameType::STREAM) && (pthSts == PATH_OPEN))
|
||||||
|
{
|
||||||
|
M17StreamFrame sf = decoder.getStreamFrame();
|
||||||
|
codec_pushFrame(sf.payload().data(), false);
|
||||||
|
codec_pushFrame(sf.payload().data() + 8, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -219,6 +249,10 @@ void OpMode_M17::rxState(rtxStatus_t *const status)
|
||||||
locked = false;
|
locked = false;
|
||||||
status->opStatus = OFF;
|
status->opStatus = OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Force invalidation of LSF data as soon as lock is lost (for whatever cause)
|
||||||
|
if(locked == false)
|
||||||
|
status->lsfOk = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpMode_M17::txState(rtxStatus_t *const status)
|
void OpMode_M17::txState(rtxStatus_t *const status)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue