88 lines
2.6 KiB
JavaScript
88 lines
2.6 KiB
JavaScript
/*
|
|
Copyright (c) 2023-forever Douglas Malnati. All rights reserved.
|
|
|
|
See the /faq/tos page for details.
|
|
|
|
(If this generated header is stamped on a file which is a 3rd party file or under a different license or copyright, then ignore this copyright statement and use that file's terms.)
|
|
*/
|
|
|
|
import { CandidateFilterBase } from './CandidateFilterBase.js';
|
|
import { NonRejectedOnlyFilter } from './WsprMessageCandidate.js';
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Candidate Filter - Bad Telemetry
|
|
//
|
|
// Reject any msg which is detected as invalid
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
export class CandidateFilterByBadTelemetry
|
|
extends CandidateFilterBase
|
|
{
|
|
constructor(t)
|
|
{
|
|
super("ByBadTelemetry", t);
|
|
}
|
|
|
|
OnFilterStart()
|
|
{
|
|
this.t.Event(`CandidateFilterByBadTelemetry Start`);
|
|
}
|
|
|
|
OnFilterEnd()
|
|
{
|
|
this.t.Event(`CandidateFilterByBadTelemetry End`);
|
|
}
|
|
|
|
FilterWindowAlgorithm(msgListList)
|
|
{
|
|
// eliminate any extended telemetry marked as the wrong slot
|
|
for (let slot = 0; slot < 5; ++slot)
|
|
{
|
|
for (let msg of NonRejectedOnlyFilter(msgListList[slot]))
|
|
{
|
|
if (msg.IsTelemetryExtended())
|
|
{
|
|
let codec = msg.GetCodec();
|
|
|
|
|
|
// actually check if decode was bad
|
|
|
|
|
|
|
|
|
|
|
|
let hdrTypeSupportedList = [
|
|
0, // user-defined
|
|
1, // heartbeat
|
|
2, // ExpandedBasicTelemetry
|
|
3, // highResLocation
|
|
15, // vendor-defined
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
let hdrRESERVED = codec.GetHdrRESERVEDEnum();
|
|
let hdrSlot = codec.GetHdrSlotEnum();
|
|
let hdrType = codec.GetHdrTypeEnum();
|
|
|
|
if (hdrRESERVED != 0)
|
|
{
|
|
msg.Reject(this.type, `Bad Telemetry - HdrRESERVED is non-zero (${hdrRESERVED})`);
|
|
}
|
|
else if (hdrSlot != slot)
|
|
{
|
|
msg.Reject(this.type, `Bad Telemetry - HdrSlot (${hdrSlot}) set incorrectly, found in slot ${slot}`);
|
|
}
|
|
else if (hdrTypeSupportedList.indexOf(hdrType) == -1)
|
|
{
|
|
msg.Reject(this.type, `Bad Telemetry - HdrType (${hdrType}) set to unsupported value`);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|