cleanup code;

r05a06_dev
Bryan Biedenkapp 10 hours ago
parent 996b5a42cb
commit 656fc1397b

@ -26,22 +26,22 @@ using namespace p25::lc;
// ---------------------------------------------------------------------------
static const uint8_t LOOKUP_TABLE[256U] = {
0xF2U,0x2EU,0x66U,0x90U,0x74U,0x8AU,0x6FU,0x78U,0xBBU,0x53U,0x03U,0x11U,0x68U,0xCDU,0x44U,0x17U,
0x28U,0x5FU,0x1EU,0x84U,0x75U,0x79U,0x6EU,0x9BU,0x2CU,0xBEU,0x62U,0x2DU,0xF1U,0x7CU,0xB8U,0x83U,
0xD9U,0x4EU,0x6DU,0x02U,0x61U,0x3DU,0xA8U,0x06U,0xB9U,0xF8U,0x9CU,0x37U,0x3AU,0x23U,0xC1U,0x50U,
0xEDU,0x9FU,0xAFU,0x3BU,0xBDU,0x82U,0xBAU,0xA0U,0xDFU,0xC2U,0x47U,0x22U,0xF0U,0xEEU,0xA1U,0xFEU,
0xA2U,0x10U,0x5BU,0x48U,0x57U,0xA3U,0x05U,0x60U,0x7BU,0x0DU,0xF9U,0x6CU,0xB3U,0x56U,0x4CU,0xBCU,
0x29U,0xA4U,0x0FU,0xECU,0xB6U,0xA5U,0xA6U,0x3CU,0x7FU,0x6BU,0xB4U,0x21U,0xADU,0xAEU,0xC4U,0xC8U,
0xC5U,0x5DU,0xDEU,0xE0U,0x1DU,0x19U,0x4BU,0xC6U,0x0CU,0x3FU,0x5AU,0xC7U,0xE1U,0x59U,0x55U,0x54U,
0x4AU,0x43U,0x42U,0xE2U,0xE3U,0xFAU,0x00U,0xE4U,0xE5U,0x18U,0x41U,0x0BU,0x0AU,0xE6U,0xFCU,0xFDU,
0xD2U,0xF6U,0xD4U,0x2BU,0x63U,0x49U,0x94U,0x5EU,0xA7U,0x5CU,0x70U,0x69U,0xF7U,0x08U,0xB1U,0x7DU,
0x38U,0xCFU,0xCCU,0xD8U,0x51U,0x8FU,0xD5U,0x93U,0x6AU,0xF3U,0xEFU,0x7EU,0xFBU,0x64U,0xF4U,0x35U,
0x27U,0x07U,0x31U,0x14U,0x87U,0x98U,0x76U,0x34U,0xCAU,0x92U,0x33U,0x1BU,0x4FU,0x8CU,0x09U,0x40U,
0x32U,0x36U,0x77U,0x12U,0xD3U,0xC3U,0x01U,0xABU,0x72U,0x81U,0x95U,0xC9U,0xC0U,0xE9U,0x65U,0x52U,
0x24U,0x30U,0x1CU,0xDBU,0x88U,0xE8U,0x97U,0x9DU,0x58U,0x26U,0x04U,0x39U,0xACU,0x2AU,0x9EU,0xAAU,
0x25U,0xD7U,0xCEU,0xEBU,0x96U,0xF5U,0x0EU,0x8DU,0xDCU,0xA9U,0x2FU,0xDDU,0x1FU,0xEAU,0x91U,0xB7U,
0xD6U,0x89U,0x8BU,0xD1U,0xB0U,0x99U,0x13U,0x7AU,0xE7U,0x9AU,0xB5U,0x86U,0xFFU,0x46U,0x85U,0xB2U,
0x73U,0xDAU,0xBFU,0xD0U,0x71U,0xCBU,0x4DU,0x80U,0x15U,0x67U,0x16U,0x1AU,0x20U,0x8EU,0x45U,0x3EU
0xF2U, 0x2EU, 0x66U, 0x90U, 0x74U, 0x8AU, 0x6FU, 0x78U, 0xBBU, 0x53U, 0x03U, 0x11U, 0x68U, 0xCDU, 0x44U, 0x17U,
0x28U, 0x5FU, 0x1EU, 0x84U, 0x75U, 0x79U, 0x6EU, 0x9BU, 0x2CU, 0xBEU, 0x62U, 0x2DU, 0xF1U, 0x7CU, 0xB8U, 0x83U,
0xD9U, 0x4EU, 0x6DU, 0x02U, 0x61U, 0x3DU, 0xA8U, 0x06U, 0xB9U, 0xF8U, 0x9CU, 0x37U, 0x3AU, 0x23U, 0xC1U, 0x50U,
0xEDU, 0x9FU, 0xAFU, 0x3BU, 0xBDU, 0x82U, 0xBAU, 0xA0U, 0xDFU, 0xC2U, 0x47U, 0x22U, 0xF0U, 0xEEU, 0xA1U, 0xFEU,
0xA2U, 0x10U, 0x5BU, 0x48U, 0x57U, 0xA3U, 0x05U, 0x60U, 0x7BU, 0x0DU, 0xF9U, 0x6CU, 0xB3U, 0x56U, 0x4CU, 0xBCU,
0x29U, 0xA4U, 0x0FU, 0xECU, 0xB6U, 0xA5U, 0xA6U, 0x3CU, 0x7FU, 0x6BU, 0xB4U, 0x21U, 0xADU, 0xAEU, 0xC4U, 0xC8U,
0xC5U, 0x5DU, 0xDEU, 0xE0U, 0x1DU, 0x19U, 0x4BU, 0xC6U, 0x0CU, 0x3FU, 0x5AU, 0xC7U, 0xE1U, 0x59U, 0x55U, 0x54U,
0x4AU, 0x43U, 0x42U, 0xE2U, 0xE3U, 0xFAU, 0x00U, 0xE4U, 0xE5U, 0x18U, 0x41U, 0x0BU, 0x0AU, 0xE6U, 0xFCU, 0xFDU,
0xD2U, 0xF6U, 0xD4U, 0x2BU, 0x63U, 0x49U, 0x94U, 0x5EU, 0xA7U, 0x5CU, 0x70U, 0x69U, 0xF7U, 0x08U, 0xB1U, 0x7DU,
0x38U, 0xCFU, 0xCCU, 0xD8U, 0x51U, 0x8FU, 0xD5U, 0x93U, 0x6AU, 0xF3U, 0xEFU, 0x7EU, 0xFBU, 0x64U, 0xF4U, 0x35U,
0x27U, 0x07U, 0x31U, 0x14U, 0x87U, 0x98U, 0x76U, 0x34U, 0xCAU, 0x92U, 0x33U, 0x1BU, 0x4FU, 0x8CU, 0x09U, 0x40U,
0x32U, 0x36U, 0x77U, 0x12U, 0xD3U, 0xC3U, 0x01U, 0xABU, 0x72U, 0x81U, 0x95U, 0xC9U, 0xC0U, 0xE9U, 0x65U, 0x52U,
0x24U, 0x30U, 0x1CU, 0xDBU, 0x88U, 0xE8U, 0x97U, 0x9DU, 0x58U, 0x26U, 0x04U, 0x39U, 0xACU, 0x2AU, 0x9EU, 0xAAU,
0x25U, 0xD7U, 0xCEU, 0xEBU, 0x96U, 0xF5U, 0x0EU, 0x8DU, 0xDCU, 0xA9U, 0x2FU, 0xDDU, 0x1FU, 0xEAU, 0x91U, 0xB7U,
0xD6U, 0x89U, 0x8BU, 0xD1U, 0xB0U, 0x99U, 0x13U, 0x7AU, 0xE7U, 0x9AU, 0xB5U, 0x86U, 0xFFU, 0x46U, 0x85U, 0xB2U,
0x73U, 0xDAU, 0xBFU, 0xD0U, 0x71U, 0xCBU, 0x4DU, 0x80U, 0x15U, 0x67U, 0x16U, 0x1AU, 0x20U, 0x8EU, 0x45U, 0x3EU
};
static const uint16_t MOT_TALKER_ALIAS_HEADER_CRC_MASK = 0x01AU;
@ -80,9 +80,11 @@ void MotTalkerAlias::reset()
m_result = MotTalkerAliasResult();
}
/* Adds one decoded nine-byte Motorola link control word. */
/* Decodes and assembles an alias. This uses the nine-byte Motorola link control word,
which may be either a header or a data block. The assembler maintains state across multiple calls
until a complete CRC-valid alias is assembled. */
bool MotTalkerAlias::add(const uint8_t* lc)
bool MotTalkerAlias::decode(const uint8_t* lc, MotTalkerAliasResult& result)
{
if (lc == nullptr || lc[1U] != MFG_MOT)
return false;
@ -130,18 +132,10 @@ bool MotTalkerAlias::add(const uint8_t* lc)
}
assemble();
return m_complete;
}
/* Gets the most recently completed alias. */
bool MotTalkerAlias::getResult(MotTalkerAliasResult& result) const
{
if (!m_complete)
return false;
result = m_result;
return true;
}

@ -68,18 +68,14 @@ namespace p25
void reset();
/**
* @brief Adds one decoded nine-byte Motorola link control word.
* @brief Decodes and assembles an alias. This uses the nine-byte Motorola link control word,
* which may be either a header or a data block. The assembler maintains state across multiple calls
* until a complete CRC-valid alias is assembled.
* @param[in] lc Link control bytes, including LCO and MFId.
* @returns bool True when a complete, CRC-valid alias is available.
*/
bool add(const uint8_t* lc);
/**
* @brief Gets the most recently completed alias.
* @param[out] result Completed talker-alias fields.
* @returns bool True when a completed alias is available.
* @returns bool True when this word completes a CRC-valid alias and result was populated.
*/
bool getResult(MotTalkerAliasResult& result) const;
bool decode(const uint8_t* lc, MotTalkerAliasResult& result);
/**
* @brief Encodes an alias into a header followed by numbered data-block LC words.

@ -71,12 +71,11 @@ TEST_CASE("P25 Motorola talker alias assembly", "[p25][lc][user-alias][motorola]
{ 0x17U, 0x90U, 0x07U, 0xF9U, 0x4BU, 0x30U, 0x00U, 0x00U, 0x00U }
};
MotTalkerAliasResult result;
for (std::size_t i = 0U; i + 1U < sizeof(words) / sizeof(words[0U]); ++i)
REQUIRE_FALSE(assembler.add(words[i]));
REQUIRE(assembler.add(words[7U]));
REQUIRE_FALSE(assembler.decode(words[i], result));
REQUIRE(assembler.decode(words[7U], result));
MotTalkerAliasResult result;
REQUIRE(assembler.getResult(result));
REQUIRE(result.netId == 0xBEE00U);
REQUIRE(result.sysId == 0x2AEU);
REQUIRE(result.srcId == 0xE67852U);
@ -92,11 +91,10 @@ TEST_CASE("P25 Motorola talker alias encoding round trip", "[p25][lc][user-alias
REQUIRE(words.size() > 1U);
MotTalkerAlias assembler;
MotTalkerAliasResult result;
for (std::size_t i = 0U; i < words.size(); ++i)
REQUIRE(assembler.add(words[i].data()) == (i + 1U == words.size()));
REQUIRE(assembler.decode(words[i].data(), result) == (i + 1U == words.size()));
MotTalkerAliasResult result;
REQUIRE(assembler.getResult(result));
REQUIRE(result.netId == 0xBB800U);
REQUIRE(result.sysId == 0x123U);
REQUIRE(result.srcId == 0x456789U);

Loading…
Cancel
Save

Powered by TurnKey Linux.