diff --git a/Modem.cpp b/Modem.cpp index 2e46210..9c5b3d2 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -698,6 +698,8 @@ void CModem::clock(unsigned int ms) m_txPOCSAGData.getData(&len, 1U); m_txPOCSAGData.getData(m_buffer, len); + LogMessage("POCSAG, sending message %u", m_buffer[3U]); + if (m_trace) CUtils::dump(1U, "TX POCSAG Data", m_buffer, len); @@ -1049,6 +1051,8 @@ bool CModem::writePOCSAGData(const unsigned char* data, unsigned int length) ::memcpy(buffer + 3U, data, length); + LogMessage("POCSAG, queueing message %u", buffer[3U]); + unsigned char len = length + 3U; // XXX Check lengths m_txPOCSAGData.addData(&len, 1U); m_txPOCSAGData.addData(buffer, len); diff --git a/POCSAGControl.cpp b/POCSAGControl.cpp index bc16398..94c6d34 100644 --- a/POCSAGControl.cpp +++ b/POCSAGControl.cpp @@ -67,7 +67,8 @@ m_buffer(), m_ric(0U), m_text(), m_state(PS_NONE), -m_fp(NULL) +m_fp(NULL), +m_sequence(0U) { assert(display != NULL); } @@ -312,8 +313,13 @@ void CPOCSAGControl::addBCHAndParity(uint32_t& word) const void CPOCSAGControl::writeQueue() { // Convert 32-bit words to bytes - unsigned char data[POCSAG_FRAME_LENGTH_BYTES]; - unsigned char len = 0U; + unsigned char data[POCSAG_FRAME_LENGTH_BYTES + 1U]; + + data[0U] = m_sequence++; + + LogMessage("POCSAG, creating message %u", data[0U]); + + unsigned char len = 1U; for (std::deque::const_iterator it = m_output.cbegin(); it != m_output.cend(); ++it) { uint32_t word = *it; @@ -331,7 +337,7 @@ void CPOCSAGControl::writeQueue() CUtils::dump(1U, "Data to MMDVM", data, len); - assert(len == POCSAG_FRAME_LENGTH_BYTES); + assert(len == (POCSAG_FRAME_LENGTH_BYTES + 1U)); unsigned int space = m_queue.freeSpace(); if (space < (len + 1U)) { diff --git a/POCSAGControl.h b/POCSAGControl.h index 828e4cb..33d72d1 100644 --- a/POCSAGControl.h +++ b/POCSAGControl.h @@ -59,6 +59,7 @@ private: std::string m_text; POCSAG_STATE m_state; FILE* m_fp; + uint8_t m_sequence; bool processData(); void writeQueue();