From 42570c905d9017f8aa876d07a909fbea60c338ef Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sun, 14 Mar 2021 19:04:54 +0000 Subject: [PATCH] Handle updated M17 modem serial data. --- Modem.cpp | 48 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/Modem.cpp b/Modem.cpp index d6ed93f..6af10d2 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -74,9 +74,10 @@ const unsigned char MMDVM_P25_LOST = 0x32U; const unsigned char MMDVM_NXDN_DATA = 0x40U; const unsigned char MMDVM_NXDN_LOST = 0x41U; -const unsigned char MMDVM_M17_HEADER = 0x45U; -const unsigned char MMDVM_M17_DATA = 0x46U; -const unsigned char MMDVM_M17_LOST = 0x47U; +const unsigned char MMDVM_M17_LINK_SETUP = 0x45U; +const unsigned char MMDVM_M17_STREAM = 0x46U; +const unsigned char MMDVM_M17_PACKET = 0x47U; +const unsigned char MMDVM_M17_LOST = 0x48U; const unsigned char MMDVM_POCSAG_DATA = 0x50U; @@ -648,9 +649,9 @@ void CModem::clock(unsigned int ms) } break; - case MMDVM_M17_HEADER: { + case MMDVM_M17_LINK_SETUP: { if (m_trace) - CUtils::dump(1U, "RX M17 Header", m_buffer, m_length); + CUtils::dump(1U, "RX M17 Link Setup", m_buffer, m_length); unsigned char data = m_length - 2U; m_rxM17Data.addData(&data, 1U); @@ -662,9 +663,23 @@ void CModem::clock(unsigned int ms) } break; - case MMDVM_M17_DATA: { + case MMDVM_M17_STREAM: { if (m_trace) - CUtils::dump(1U, "RX M17 Data", m_buffer, m_length); + CUtils::dump(1U, "RX M17 Stream Data", m_buffer, m_length); + + unsigned char data = m_length - 2U; + m_rxM17Data.addData(&data, 1U); + + data = TAG_DATA; + m_rxM17Data.addData(&data, 1U); + + m_rxM17Data.addData(m_buffer + 3U, m_length - 3U); + } + break; + + case MMDVM_M17_PACKET: { + if (m_trace) + CUtils::dump(1U, "RX M17 Packet Data", m_buffer, m_length); unsigned char data = m_length - 2U; m_rxM17Data.addData(&data, 1U); @@ -1019,10 +1034,17 @@ void CModem::clock(unsigned int ms) m_txM17Data.getData(m_buffer, len); if (m_trace) { - if (m_buffer[2U] == MMDVM_M17_HEADER) - CUtils::dump(1U, "TX M17 Header", m_buffer, len); - else - CUtils::dump(1U, "TX M17 Data", m_buffer, len); + switch (m_buffer[2U]) { + case MMDVM_M17_LINK_SETUP: + CUtils::dump(1U, "TX M17 Link Setup", m_buffer, len); + break; + case MMDVM_M17_STREAM: + CUtils::dump(1U, "TX M17 Stream Data", m_buffer, len); + break; + case MMDVM_M17_PACKET: + CUtils::dump(1U, "TX M17 Packet Data", m_buffer, len); + break; + } } int ret = m_port->write(m_buffer, len); @@ -1487,9 +1509,9 @@ bool CModem::writeM17Data(const unsigned char* data, unsigned int length) buffer[1U] = length + 2U; if (data[0U] == TAG_HEADER) - buffer[2U] = MMDVM_M17_HEADER; + buffer[2U] = MMDVM_M17_LINK_SETUP; else - buffer[2U] = MMDVM_M17_DATA; + buffer[2U] = MMDVM_M17_STREAM; ::memcpy(buffer + 3U, data + 1U, length - 1U);