#1799 DMR Cap+ & CapMax now track events correctly. Updated Cap+ events to include channel descriptor and frequencies. Corrected Capacity Max talker aliases to combine base and continuation alias fragments into a unified alias identifier. (#1801)

Critical: resolved a thread deadlock issue when the DMR multi-frequency channel rotation thread deadlocks against the UI thread when accessing the current channel's frequency from the frequency controller.  This thread deadlock may be the source of multiple users reporting OutOfMemory crashes when running any DMR channel with multiple control frequencies where the decoder was rolling through each frequency checking for activity.

Co-authored-by: Dennis Sheirer <dsheirer@github.com>
This commit is contained in:
Denny Sheirer
2024-01-21 07:47:37 -05:00
committed by GitHub
parent 1c420b8eee
commit 686bddf7d5
11 changed files with 398 additions and 300 deletions

View File

@@ -1,6 +1,6 @@
/*
* *****************************************************************************
* Copyright (C) 2014-2023 Dennis Sheirer
* Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -54,7 +54,6 @@ public enum Form
STATE,
SYSTEM,
TALKER_ALIAS,
TALKER_ALIAS_2,
TALKGROUP,
TELEPHONE_NUMBER,
TONE,

View File

@@ -1,54 +0,0 @@
/*
* *****************************************************************************
* Copyright (C) 2014-2023 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
* ****************************************************************************
*/
package io.github.dsheirer.identifier.alias;
import io.github.dsheirer.protocol.Protocol;
/**
* DMR Talker alias (alternate/additional) value provided by the network for the current talker (ie FROM).
*/
public class DmrTalkerAlias2Identifier extends TalkerAlias2Identifier
{
/**
* Constructs an instance.
* @param value of the talker alias
*/
public DmrTalkerAlias2Identifier(String value)
{
super(value);
}
@Override
public boolean isValid()
{
return getValue() != null && !getValue().isEmpty();
}
@Override
public Protocol getProtocol()
{
return Protocol.DMR;
}
public static DmrTalkerAlias2Identifier create(String value)
{
return new DmrTalkerAlias2Identifier(value);
}
}

View File

@@ -1,46 +0,0 @@
/*
* *****************************************************************************
* Copyright (C) 2014-2023 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
* ****************************************************************************
*/
package io.github.dsheirer.identifier.alias;
import io.github.dsheirer.identifier.Form;
import io.github.dsheirer.identifier.IdentifierClass;
import io.github.dsheirer.identifier.Role;
import io.github.dsheirer.identifier.string.StringIdentifier;
/**
* Talker alias (alternate/second) value provided by the network for the current talker (ie FROM).
*/
public abstract class TalkerAlias2Identifier extends StringIdentifier
{
/**
* Constructs an instance.
* @param value of the string/alias identifier
*/
public TalkerAlias2Identifier(String value)
{
super(value, IdentifierClass.USER, Form.TALKER_ALIAS_2, Role.FROM);
}
@Override
public boolean isValid()
{
return getValue() != null && !getValue().isEmpty();
}
}