You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.2 KiB
80 lines
2.2 KiB
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Digital Voice Modem - Common Library
|
|
* GPLv2 Open Source. Use is subject to license terms.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright (C) 2025 Bryan Biedenkapp, N2PLL
|
|
*
|
|
*/
|
|
#include "Defines.h"
|
|
#include "p25/P25Defines.h"
|
|
#include "p25/kmm/KMMRegistrationCommand.h"
|
|
#include "Log.h"
|
|
|
|
using namespace p25;
|
|
using namespace p25::defines;
|
|
using namespace p25::kmm;
|
|
|
|
#include <cassert>
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Public Class Members
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/* Initializes a new instance of the KMMRegistrationCommand class. */
|
|
|
|
KMMRegistrationCommand::KMMRegistrationCommand() : KMMFrame(),
|
|
m_bodyFormat(0U),
|
|
m_kmfRSI(9999999U)
|
|
{
|
|
m_messageId = KMM_MessageType::REG_CMD;
|
|
m_respKind = KMM_ResponseKind::IMMEDIATE;
|
|
}
|
|
|
|
/* Finalizes a instance of the KMMRegistrationCommand class. */
|
|
|
|
KMMRegistrationCommand::~KMMRegistrationCommand() = default;
|
|
|
|
/* Decode a KMM modify key. */
|
|
|
|
bool KMMRegistrationCommand::decode(const uint8_t* data)
|
|
{
|
|
assert(data != nullptr);
|
|
|
|
KMMFrame::decodeHeader(data);
|
|
|
|
m_bodyFormat = data[10U]; // Body Format
|
|
m_kmfRSI = __GET_UINT16(data, 11U); // KMF RSI
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Encode a KMM modify key. */
|
|
|
|
void KMMRegistrationCommand::encode(uint8_t* data)
|
|
{
|
|
assert(data != nullptr);
|
|
m_messageLength = KMM_REGISTRATION_CMD_LENGTH;
|
|
m_bodyFormat = 0U; // reset this to none -- we don't support warm start right now
|
|
|
|
KMMFrame::encodeHeader(data);
|
|
|
|
data[10U] = m_bodyFormat; // Body Format
|
|
__SET_UINT16(m_kmfRSI, data, 11U); // KMF RSI
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Protected Class Members
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/* Internal helper to copy the the class. */
|
|
|
|
void KMMRegistrationCommand::copy(const KMMRegistrationCommand& data)
|
|
{
|
|
KMMFrame::copy(data);
|
|
|
|
m_bodyFormat = data.m_bodyFormat;
|
|
m_kmfRSI = data.m_kmfRSI;
|
|
}
|