more very very experiemental PDU AMBT support;

pull/12/head
Bryan Biedenkapp 4 years ago
parent ab5c056111
commit 8bd0a0cbbc

@ -157,9 +157,9 @@ void TrunkPacket::resetNet()
/// </summary>
/// <param name="data">Buffer containing data frame.</param>
/// <param name="len">Length of data frame.</param>
/// <param name="mbtData">Flag indicating the data parameter contains MBT data.</param>
/// <param name="blockData">Flag indicating the data parameter contains raw TSBK data.</param>
/// <returns></returns>
bool TrunkPacket::process(uint8_t* data, uint32_t len, bool mbtData)
bool TrunkPacket::process(uint8_t* data, uint32_t len, bool blockData)
{
assert(data != NULL);
@ -167,7 +167,7 @@ bool TrunkPacket::process(uint8_t* data, uint32_t len, bool mbtData)
return false;
uint8_t duid = 0U;
if (!mbtData) {
if (!blockData) {
// Decode the NID
bool valid = m_p25->m_nid.decode(data + 2U);

@ -61,7 +61,7 @@ namespace p25
void resetNet();
/// <summary>Process a data frame from the RF interface.</summary>
bool process(uint8_t* data, uint32_t len, bool mbtData = false);
bool process(uint8_t* data, uint32_t len, bool blockData = false);
/// <summary>Process a data frame from the network.</summary>
bool processNetwork(uint8_t* data, uint32_t len, lc::LC& control, data::LowSpeedData& lsd, uint8_t& duid);

@ -139,6 +139,9 @@ bool DataBlock::decode(const uint8_t* data, const DataHeader header)
m_data[i] = buffer[i]; // Payload Data
}
}
else if (m_fmt == PDU_FMT_AMBT) {
// ignore AMBT this is handled else where
}
else {
LogError(LOG_P25, "unknown FMT value in P25_DUID_PDU, fmt = $%02X", m_fmt);
}
@ -193,6 +196,9 @@ void DataBlock::encode(uint8_t* data)
m_trellis.encode12(buffer, data);
}
else if (m_fmt == PDU_FMT_AMBT) {
// ignore AMBT this is handled else where
}
else {
LogError(LOG_P25, "unknown FMT value in P25_DUID_PDU, fmt = $%02X", m_fmt);
return;
@ -236,7 +242,7 @@ void DataBlock::setData(const uint8_t* buffer)
if ((m_fmt == PDU_FMT_CONFIRMED) || (m_fmt == PDU_FMT_RSP && m_confirmed)) {
::memcpy(m_data, buffer, P25_PDU_CONFIRMED_DATA_LENGTH_BYTES);
}
else if ((m_fmt == PDU_FMT_UNCONFIRMED) || (m_fmt == PDU_FMT_RSP && !m_confirmed)) {
else if ((m_fmt == PDU_FMT_UNCONFIRMED) || (m_fmt == PDU_FMT_RSP && !m_confirmed) || (m_fmt == PDU_FMT_AMBT)) {
::memcpy(m_data, buffer, P25_PDU_UNCONFIRMED_LENGTH_BYTES);
}
else {
@ -255,7 +261,7 @@ uint32_t DataBlock::getData(uint8_t* buffer) const
::memcpy(buffer, m_data, P25_PDU_CONFIRMED_DATA_LENGTH_BYTES);
return P25_PDU_CONFIRMED_DATA_LENGTH_BYTES;
}
else if ((m_fmt == PDU_FMT_UNCONFIRMED) || (m_fmt == PDU_FMT_RSP && !m_confirmed)) {
else if ((m_fmt == PDU_FMT_UNCONFIRMED) || (m_fmt == PDU_FMT_RSP && !m_confirmed) || (m_fmt == PDU_FMT_AMBT)) {
::memcpy(buffer, m_data, P25_PDU_UNCONFIRMED_LENGTH_BYTES);
return P25_PDU_UNCONFIRMED_LENGTH_BYTES;
}

@ -127,6 +127,9 @@ bool DataHeader::decode(const uint8_t* data)
m_n = 0U;
m_seqNo = 0U;
m_headerOffset = 0U;
m_ambtField8 = header[8U]; // AMBT Field 8
m_ambtField9 = header[9U]; // AMBT Field 9
}
else {
m_sync = (header[8U] & 0x80U) == 0x80U; // Re-synchronize Flag
@ -169,6 +172,8 @@ void DataHeader::encode(uint8_t* data)
if (m_fmt == PDU_FMT_AMBT) {
header[7U] = (m_ambtOpcode & 0x3FU); // AMBT Opcode
header[8U] = m_ambtField8; // AMBT Field 8
header[9U] = m_ambtField9; // AMBT Field 9
}
else {
header[7U] = (m_padCount & 0x1FU); // Pad Count

@ -91,8 +91,13 @@ namespace p25
__PROPERTY(uint8_t, seqNo, SeqNo);
/// <summary>Offset of the header.</summary>
__PROPERTY(uint8_t, headerOffset, HeaderOffset);
/// <summary>Alternate Trunking Block Opcode</summary>
__PROPERTY(uint8_t, ambtOpcode, AMBTOpcode);
/// <summary>Alternate Trunking Block Field 8</summary>
__PROPERTY(uint8_t, ambtField8, AMBTField8);
/// <summary>Alternate Trunking Block Field 9</summary>
__PROPERTY(uint8_t, ambtField9, AMBTField9);
private:
edac::Trellis m_trellis;

Loading…
Cancel
Save

Powered by TurnKey Linux.