mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
fix(dmr): avoid stale and mislabeled talkgroups
This commit is contained in:
@@ -166,6 +166,7 @@ type
|
||||
function GetLastBurst(var Dibits: array of Byte; out Sequence: QWord): Boolean;
|
||||
|
||||
class function SyncKindName(Kind: TDMRSyncKind): string; static;
|
||||
class function LinkControlTargetText(const S: TDMRStatus): string; static;
|
||||
property Enabled: Boolean read FEnabled;
|
||||
property OnAudio: TDMRAudioEvent read FOnAudio write FOnAudio;
|
||||
end;
|
||||
@@ -580,6 +581,17 @@ begin
|
||||
FFixedNegativeOuter := 0;
|
||||
FFixedCenter := 0;
|
||||
FMobileActiveBurst := True;
|
||||
// LC belongs to a call/slot, not to the tuned frequency forever. Keeping it
|
||||
// across carrier loss made a newly acquired call briefly inherit the old
|
||||
// target and display the same apparent TG on unrelated transmissions.
|
||||
FillChar(FLinkControl, SizeOf(FLinkControl), 0);
|
||||
FLastLCSlot := -1;
|
||||
FSelectedSlot := -1;
|
||||
FLastSelectedVoiceTick := 0;
|
||||
FColorCodeValid := False;
|
||||
FColorCode := 0;
|
||||
FLastDataType := 0;
|
||||
FSlotTypeCorrectedBits := 0;
|
||||
DMRMbeReset(FMbe);
|
||||
end;
|
||||
|
||||
@@ -947,4 +959,18 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
class function TDMRDecoder.LinkControlTargetText(
|
||||
const S: TDMRStatus): string;
|
||||
begin
|
||||
Result := '';
|
||||
if not S.LinkControlValid or (S.TargetID = 0) then Exit;
|
||||
// ETSI Full Link Control opcode 0 is Group Voice Channel User; opcode 3 is
|
||||
// Unit-to-Unit Voice Channel User. Other/vendor opcodes may reuse these 24
|
||||
// bits for different data, so do not mislabel them as a talkgroup.
|
||||
case S.LCOpcode of
|
||||
0: Result := 'TG' + IntToStr(S.TargetID);
|
||||
3: Result := 'ID' + IntToStr(S.TargetID);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user