Fix for Wires-X SEARCH reply > 20 results for YSF2DMR, YSF2NXDN and YSF2P25

This commit is contained in:
Andy CA6JAU 2019-01-27 12:20:38 -03:00
parent 220ce15db1
commit ae7cfe6140
3 changed files with 30 additions and 18 deletions

View File

@ -344,13 +344,13 @@ void CWiresX::processCategory(const unsigned char* source, const unsigned char*
void CWiresX::processAll(const unsigned char* source, const unsigned char* data)
{
char buffer[4U];
::memcpy(buffer, data + 2U, 3U);
buffer[3U] = 0x00U;
if (data[0U] == '0' && data[1] == '1') {
::LogDebug("Received ALL for \"%3.3s\" from %10.10s", data + 2U, source);
char buffer[4U];
::memcpy(buffer, data + 2U, 3U);
buffer[3U] = 0x00U;
m_start = ::atoi(buffer);
if (m_start > 0U)
m_start--;
@ -361,6 +361,10 @@ void CWiresX::processAll(const unsigned char* source, const unsigned char* data)
} else if (data[0U] == '1' && data[1U] == '1') {
::LogDebug("Received SEARCH for \"%16.16s\" from %10.10s", data + 5U, source);
m_start = ::atoi(buffer);
if (m_start > 0U)
m_start--;
m_search = std::string((char*)(data + 5U), 16U);
m_status = WXSI_SEARCH;
@ -873,7 +877,7 @@ void CWiresX::sendSearchReply()
unsigned int total = search.size();
if (total > 999U) total = 999U;
unsigned int n = search.size();
unsigned int n = search.size() - m_start;
if (n > 20U) n = 20U;
::sprintf((char*)(data + 23U), "%02u%03u", n, total);
@ -882,7 +886,7 @@ void CWiresX::sendSearchReply()
unsigned int offset = 29U;
for (unsigned int j = 0U; j < n; j++, offset += 50U) {
CTGReg* tgreg = search.at(j);
CTGReg* tgreg = search.at(j + m_start);
::memset(data + offset, ' ', 50U);

View File

@ -315,13 +315,13 @@ void CWiresX::processCategory(const unsigned char* source, const unsigned char*
void CWiresX::processAll(const unsigned char* source, const unsigned char* data)
{
char buffer[4U];
::memcpy(buffer, data + 2U, 3U);
buffer[3U] = 0x00U;
if (data[0U] == '0' && data[1] == '1') {
::LogDebug("Received ALL for \"%3.3s\" from %10.10s", data + 2U, source);
char buffer[4U];
::memcpy(buffer, data + 2U, 3U);
buffer[3U] = 0x00U;
m_start = ::atoi(buffer);
if (m_start > 0U)
m_start--;
@ -332,6 +332,10 @@ void CWiresX::processAll(const unsigned char* source, const unsigned char* data)
} else if (data[0U] == '1' && data[1U] == '1') {
::LogDebug("Received SEARCH for \"%16.16s\" from %10.10s", data + 5U, source);
m_start = ::atoi(buffer);
if (m_start > 0U)
m_start--;
m_search = std::string((char*)(data + 5U), 16U);
m_status = WXSI_SEARCH;
@ -824,7 +828,7 @@ void CWiresX::sendSearchReply()
unsigned int total = search.size();
if (total > 999U) total = 999U;
unsigned int n = search.size();
unsigned int n = search.size() - m_start;
if (n > 20U) n = 20U;
::sprintf((char*)(data + 23U), "%02u%03u", n, total);
@ -833,7 +837,7 @@ void CWiresX::sendSearchReply()
unsigned int offset = 29U;
for (unsigned int j = 0U; j < n; j++, offset += 50U) {
CTGReg* tgreg = search.at(j);
CTGReg* tgreg = search.at(j + m_start);
::memset(data + offset, ' ', 50U);

View File

@ -315,13 +315,13 @@ void CWiresX::processCategory(const unsigned char* source, const unsigned char*
void CWiresX::processAll(const unsigned char* source, const unsigned char* data)
{
char buffer[4U];
::memcpy(buffer, data + 2U, 3U);
buffer[3U] = 0x00U;
if (data[0U] == '0' && data[1] == '1') {
::LogDebug("Received ALL for \"%3.3s\" from %10.10s", data + 2U, source);
char buffer[4U];
::memcpy(buffer, data + 2U, 3U);
buffer[3U] = 0x00U;
m_start = ::atoi(buffer);
if (m_start > 0U)
m_start--;
@ -332,6 +332,10 @@ void CWiresX::processAll(const unsigned char* source, const unsigned char* data)
} else if (data[0U] == '1' && data[1U] == '1') {
::LogDebug("Received SEARCH for \"%16.16s\" from %10.10s", data + 5U, source);
m_start = ::atoi(buffer);
if (m_start > 0U)
m_start--;
m_search = std::string((char*)(data + 5U), 16U);
m_status = WXSI_SEARCH;
@ -824,7 +828,7 @@ void CWiresX::sendSearchReply()
unsigned int total = search.size();
if (total > 999U) total = 999U;
unsigned int n = search.size();
unsigned int n = search.size() - m_start;
if (n > 20U) n = 20U;
::sprintf((char*)(data + 23U), "%02u%03u", n, total);
@ -833,7 +837,7 @@ void CWiresX::sendSearchReply()
unsigned int offset = 29U;
for (unsigned int j = 0U; j < n; j++, offset += 50U) {
CTGReg* tgreg = search.at(j);
CTGReg* tgreg = search.at(j + m_start);
::memset(data + offset, ' ', 50U);