|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|