diff --git a/src/host/p25/Control.cpp b/src/host/p25/Control.cpp index aa5090e9..d8c3ad07 100644 --- a/src/host/p25/Control.cpp +++ b/src/host/p25/Control.cpp @@ -1063,6 +1063,7 @@ void Control::clock() m_tailOnIdle = true; m_voice->resetNet(); + m_data->resetReceivedBlocks(); m_netTimeout.stop(); } diff --git a/src/host/p25/packet/Data.cpp b/src/host/p25/packet/Data.cpp index dd868c47..2a3fb2cc 100644 --- a/src/host/p25/packet/Data.cpp +++ b/src/host/p25/packet/Data.cpp @@ -400,6 +400,8 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint8_t currentBlock, uin LogInfoEx(LOG_NET, P25_PDU_STR ", received block %u, len = %u, totalBlocks = %u", currentBlock, blockLength, totalBlocks); + m_p25->m_networkWatchdog.start(); + // store the received block uint8_t* blockData = new uint8_t[blockLength]; ::memcpy(blockData, data + 24U, blockLength); @@ -416,6 +418,7 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint8_t currentBlock, uin bool ret = m_netAssembler->disassemble(m_netReceivedBlocks[i], blockLength, true); if (!ret) { m_p25->m_netState = RS_NET_IDLE; + m_p25->m_networkWatchdog.stop(); resetReceivedBlocks(); return false; } @@ -427,6 +430,7 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint8_t currentBlock, uin } m_p25->m_netState = RS_NET_IDLE; + m_p25->m_networkWatchdog.stop(); resetReceivedBlocks(); return false; } @@ -434,6 +438,7 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint8_t currentBlock, uin // did we receive a response header? if (m_netAssembler->dataHeader.getFormat() == PDUFormatType::RSP) { m_p25->m_netState = RS_NET_IDLE; + m_p25->m_networkWatchdog.stop(); if (m_verbose) { LogInfoEx(LOG_NET, P25_PDU_STR ", FNE ISP, response, fmt = $%02X, rspClass = $%02X, rspType = $%02X, rspStatus = $%02X, llId = %u, srcLlId = %u", @@ -484,6 +489,7 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint8_t currentBlock, uin bool ret = m_netAssembler->disassemble(m_netReceivedBlocks[i], blockLength); if (!ret) { m_p25->m_netState = RS_NET_IDLE; + m_p25->m_networkWatchdog.stop(); resetReceivedBlocks(); return false; } @@ -541,6 +547,7 @@ bool Data::processNetwork(uint8_t* data, uint32_t len, uint8_t currentBlock, uin m_netPduUserDataLength = 0U; m_p25->m_netState = RS_NET_IDLE; + m_p25->m_networkWatchdog.stop(); m_p25->m_network->resetP25(); resetReceivedBlocks(); break;