// SPDX-License-Identifier: AGPL-3.0-only
/**
* Digital Voice Modem - Fixed Network Equipment Core Library
* AGPLv3 Open Source. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* @package DVM / Fixed Network Equipment Core Library
* @license AGPLv3 License (https://opensource.org/licenses/AGPL-3.0)
*
* Copyright (C) 2022,2025 Bryan Biedenkapp, N2PLL
*
*/
using System;
namespace fnecore
{
///
/// Used internally to identify the logging level.
///
public enum LogLevel : byte
{
///
/// Informational
///
INFO = 0x00,
///
/// Warning
///
WARNING = 0x01,
///
/// Error
///
ERROR = 0x02,
///
/// Debug
///
DEBUG = 0x04,
///
/// Fatal
///
FATAL = 0x08
} // public enum LogLevel : byte
///
/// Peer Connection State
///
public enum ConnectionState
{
///
/// Waiting on Login - Received the repeater login request
///
WAITING_LOGIN,
///
/// Waiting on Authorization - Sent the connection challenge to peer
///
WAITING_AUTHORISATION,
///
/// Waiting on Configuration
///
WAITING_CONFIG,
///
/// Running
///
RUNNING,
} // public enum ConnectionState
///
/// Peer Connection NAK Messages
///
public enum ConnectionMSTNAK
{
///
/// General Failure
///
GENERAL_FAILURE,
///
/// Mode Not Enabled
///
MODE_NOT_ENABLED,
///
/// Illegal Packet
///
ILLEGAL_PACKET,
///
/// FNE Unauthorized
///
FNE_UNAUTHORIZED,
///
/// Bad Connection State
///
BAD_CONN_STATE,
///
/// Invalid Configuration Data
///
INVALID_CONFIG_DATA,
///
/// Peer Reset
///
PEER_RESET,
///
/// Peer ACL
///
PEER_ACL,
///
/// FNE Maximum Connections
///
FNE_MAX_CONN,
///
/// Invalid
///
INVALID = 0xFFFF
} // public enum ConnectionMSTNAK
///
/// Call Type
///
public enum CallType : byte
{
///
/// Group Call
///
GROUP = 0x00,
///
/// Private Call
///
PRIVATE = 0x01,
} // public enum CallType : byte
///
/// Frame Type
///
public enum FrameType : byte
{
///
///
///
VOICE = 0x00,
///
///
///
VOICE_SYNC = 0x01,
///
///
///
DATA_SYNC = 0x02,
///
///
///
TERMINATOR = 0xFF
} // public enum FrameType : byte
///
/// DVM State
///
public enum DVMState : byte
{
///
/// Idle
///
IDLE = 0,
///
/// DMR
///
DMR = 1,
///
/// P25
///
P25 = 2,
///
/// NXDN
///
NXDN = 3
} // public enum DVMState : byte
///
/// This class defines commonly used protocol and internal constants.
///
public sealed class Constants
{
public const uint InvalidTS = uint.MaxValue;
public const uint RtpHeaderLengthBytes = 12;
public const uint RtpExtensionHeaderLengthBytes = 4;
public const uint RtpFNEHeaderLengthBytes = 16;
public const ushort RtpFNEHeaderExtLength = 4; // length of FNE header in 32-bit units
public const uint RtpGenericClockRate = 8000;
public const ushort RtpCallEndSeq = 65535;
public const byte DVMRtpPayloadType = 0x56;
public const byte DVMFrameStart = 0xFE;
public const uint DMRPacketLength = 55U; // 20 byte header + DMR_FRAME_LENGTH_BYTES + 2 byte trailer
public const uint P25LDU1PacketLength = 193U; // 24 byte header + DFSI data + 1 byte frame type + 12 byte enc sync
public const uint P25LDU2PacketLength = 181U; // 24 byte header + DFSI data + 1 byte frame type
public const uint P25TSDUPacketLength = 69U; // 24 byte header + TSDU data
public const uint P25TDULCPacketLength = 78U; // 24 byte header + TDULC data
public const uint NXDNPacketLength = 70U; // 20 byte header + NXDN_FRAME_LENGTH_BYTES + 2 byte trailer
public const uint AnalogPacketLength = 324U; // 20 byte header + AUDIO_SAMPLES_LENGTH_BYTES + 4 byte trailer
public const uint HAParamsEntryLen = 20;
public const int MAX_RETRY_BEFORE_RECONNECT = 4;
public const int MAX_RETRY_HA_RECONNECT = 2;
/*
** Protocol Functions and Sub-Functions
*/
public const byte NET_SUBFUNC_NOP = 0xFF; // No Operation Sub-Function
public const byte NET_FUNC_PROTOCOL = 0x00; // Network Protocol Function
public const byte NET_PROTOCOL_SUBFUNC_DMR = 0x00; // DMR
public const byte NET_PROTOCOL_SUBFUNC_P25 = 0x01; // P25
public const byte NET_PROTOCOL_SUBFUNC_NXDN = 0x02; // NXDN
public const byte NET_PROTOCOL_SUBFUNC_ANALOG = 0x03; // Analog
public const byte NET_FUNC_MASTER = 0x01; // Network Master Function
public const byte NET_MASTER_SUBFUNC_WL_RID = 0x00; // Whitelist RIDs
public const byte NET_MASTER_SUBFUNC_BL_RID = 0x01; // Blacklist RIDs
public const byte NET_MASTER_SUBFUNC_ACTIVE_TGS = 0x02; // Active TGIDs
public const byte NET_MASTER_SUBFUNC_DEACTIVE_TGS = 0x03; // Deactive TGIDs
public const byte NET_MASTER_SUBFUNC_HA_PARAMS = 0xA3; // HA Parameters
public const byte NET_FUNC_RPTL = 0x60; // Repeater Login
public const byte NET_FUNC_RPTK = 0x61; // Repeater Authorisation
public const byte NET_FUNC_RPTC = 0x62; // Repeater Configuration
public const byte NET_FUNC_RPT_CLOSING = 0x70; // Repeater Closing
public const byte NET_FUNC_MST_CLOSING = 0x71; // Master Closing
public const byte NET_FUNC_PING = 0x74; // Ping
public const byte NET_FUNC_PONG = 0x75; // Pong
public const byte NET_FUNC_GRANT = 0x7A; // Grant Request
public const byte NET_FUNC_INCALL_CTRL = 0x7B; // In-CAll Control
public const byte NET_FUNC_KEY_REQ = 0x7C; // Encryption Key Request
public const byte NET_FUNC_KEY_RSP = 0x7D; // Encryption Key Response
public const byte NET_FUNC_ACK = 0x7E; // Packet Acknowledge
public const byte NET_FUNC_NAK = 0x7F; // Packet Negative Acknowledge
public const byte NET_FUNC_TRANSFER = 0x90; // Network Transfer Function
public const byte NET_TRANSFER_SUBFUNC_ACTIVITY = 0x01; // Activity Log Transfer
public const byte NET_TRANSFER_SUBFUNC_DIAG = 0x02; // Diagnostic Log Transfer
public const byte NET_FUNC_ANNOUNCE = 0x91; // Network Announce Function
public const byte NET_ANNC_SUBFUNC_GRP_AFFIL = 0x00; // Announce Group Affiliation
public const byte NET_ANNC_SUBFUNC_UNIT_REG = 0x01; // Announce Unit Registration
public const byte NET_ANNC_SUBFUNC_UNIT_DEREG = 0x02; // Announce Unit Deregistration
public const byte NET_ANNC_SUBFUNC_GRP_UNAFFIL = 0x03; // Announce Group Affiliation Removal
public const byte NET_ANNC_SUBFUNC_AFFILS = 0x90; // Update All Affiliations
public const byte NET_ICC_BUSY_DENY = 0x00; // In-Call Busy Deny
public const byte NET_ICC_REJECT_TRAFFIC = 0x01; // In-Call Reject Active Traffic
/*
** Protocol Tags (as strings)
*/
public const string TAG_DMR_DATA = "DMRD";
public const string TAG_P25_DATA = "P25D";
public const string TAG_NXDN_DATA = "NXDD";
public const string TAG_REPEATER_LOGIN = "RPTL";
public const string TAG_REPEATER_AUTH = "RPTK";
public const string TAG_REPEATER_CONFIG = "RPTC";
public const string TAG_REPEATER_PING = "RPTP";
public const string TAG_REPEATER_GRANT = "RPTG";
/*
** Timers
*/
public const double STREAM_TO = 0.360d;
} // public sealed class Constants
} // namespace fnecore