|
|
|
@ -69,13 +69,13 @@ void* CIcomController::Entry()
|
|
|
|
wxLogMessage(wxT("Starting Icom Controller thread"));
|
|
|
|
wxLogMessage(wxT("Starting Icom Controller thread"));
|
|
|
|
|
|
|
|
|
|
|
|
// Clock every 5ms-ish
|
|
|
|
// Clock every 5ms-ish
|
|
|
|
CTimer pollTimer(200U, 0U, 100U);
|
|
|
|
CTimer pollTimer(200U, 1U);
|
|
|
|
pollTimer.start();
|
|
|
|
pollTimer.start();
|
|
|
|
|
|
|
|
|
|
|
|
while (!m_stopped) {
|
|
|
|
while (!m_stopped) {
|
|
|
|
// Poll the modem status every 100ms
|
|
|
|
// Poll the modem status every 100ms
|
|
|
|
if (pollTimer.hasExpired()) {
|
|
|
|
if (pollTimer.hasExpired()) {
|
|
|
|
m_serial.write((unsigned char*)"\xFF\xFF\xFF", 3U);
|
|
|
|
writePing();
|
|
|
|
pollTimer.start();
|
|
|
|
pollTimer.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -133,20 +133,20 @@ void* CIcomController::Entry()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case RTI_STATUS:
|
|
|
|
case RTI_PONG:
|
|
|
|
// wxLogMessage(wxT("RTI_STATUS"));
|
|
|
|
// wxLogMessage(wxT("RTI_PONG"));
|
|
|
|
if (m_buffer[2U] == 0x01U)
|
|
|
|
|
|
|
|
m_txSpace = true;
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case RTI_HEADER_ACK:
|
|
|
|
case RTI_HEADER_ACK:
|
|
|
|
// wxLogMessage(wxT("RTI_HEADER_ACK"));
|
|
|
|
wxLogMessage(wxT("RTI_HEADER_ACK"));
|
|
|
|
// m_txSpace = true;
|
|
|
|
if (m_buffer[2U] == 0x00U)
|
|
|
|
|
|
|
|
m_txSpace = true;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case RTI_DATA_ACK:
|
|
|
|
case RTI_DATA_ACK:
|
|
|
|
// wxLogMessage(wxT("RTI_DATA_ACK"));
|
|
|
|
wxLogMessage(wxT("RTI_DATA_ACK"));
|
|
|
|
m_txSpace = true;
|
|
|
|
if (m_buffer[3U] == 0x00U)
|
|
|
|
|
|
|
|
m_txSpace = true;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
@ -167,6 +167,8 @@ void* CIcomController::Entry()
|
|
|
|
if (ret != int(len + 1U))
|
|
|
|
if (ret != int(len + 1U))
|
|
|
|
wxLogWarning(wxT("Error when writing to the Icom radio"));
|
|
|
|
wxLogWarning(wxT("Error when writing to the Icom radio"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pollTimer.start();
|
|
|
|
|
|
|
|
|
|
|
|
m_txSpace = false;
|
|
|
|
m_txSpace = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -231,7 +233,7 @@ bool CIcomController::writeHeader(const CHeaderData& header)
|
|
|
|
|
|
|
|
|
|
|
|
m_txData.addData(buffer, 42U);
|
|
|
|
m_txData.addData(buffer, 42U);
|
|
|
|
|
|
|
|
|
|
|
|
m_txSpace = false;
|
|
|
|
m_txSpace = true;
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -262,8 +264,6 @@ bool CIcomController::writeData(const unsigned char* data, unsigned int, bool en
|
|
|
|
|
|
|
|
|
|
|
|
m_txData.addData(buffer, 17U);
|
|
|
|
m_txData.addData(buffer, 17U);
|
|
|
|
|
|
|
|
|
|
|
|
m_txSpace = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -287,8 +287,6 @@ bool CIcomController::writeData(const unsigned char* data, unsigned int, bool en
|
|
|
|
|
|
|
|
|
|
|
|
m_txData.addData(buffer, 17U);
|
|
|
|
m_txData.addData(buffer, 17U);
|
|
|
|
|
|
|
|
|
|
|
|
m_txSpace = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -331,7 +329,7 @@ RESP_TYPE_ICOM CIcomController::getResponse(unsigned char *buffer, unsigned int&
|
|
|
|
|
|
|
|
|
|
|
|
unsigned int offset = 1U;
|
|
|
|
unsigned int offset = 1U;
|
|
|
|
|
|
|
|
|
|
|
|
while (offset < length) {
|
|
|
|
while (offset <= length) {
|
|
|
|
ret = m_serial.read(buffer + offset, length - offset);
|
|
|
|
ret = m_serial.read(buffer + offset, length - offset);
|
|
|
|
if (ret < 0) {
|
|
|
|
if (ret < 0) {
|
|
|
|
wxLogError(wxT("Error when reading from the Icom radio"));
|
|
|
|
wxLogError(wxT("Error when reading from the Icom radio"));
|
|
|
|
@ -345,11 +343,11 @@ RESP_TYPE_ICOM CIcomController::getResponse(unsigned char *buffer, unsigned int&
|
|
|
|
Sleep(5UL);
|
|
|
|
Sleep(5UL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CUtils::dump(wxT("Received"), buffer, length + 1U);
|
|
|
|
// CUtils::dump(wxT("Received"), buffer, length + 1U);
|
|
|
|
|
|
|
|
|
|
|
|
switch (buffer[1U]) {
|
|
|
|
switch (buffer[1U]) {
|
|
|
|
case 0x03U:
|
|
|
|
case 0x03U:
|
|
|
|
return RTI_STATUS;
|
|
|
|
return RTI_PONG;
|
|
|
|
case 0x10U:
|
|
|
|
case 0x10U:
|
|
|
|
return RTI_HEADER;
|
|
|
|
return RTI_HEADER;
|
|
|
|
case 0x12U:
|
|
|
|
case 0x12U:
|
|
|
|
@ -365,3 +363,8 @@ RESP_TYPE_ICOM CIcomController::getResponse(unsigned char *buffer, unsigned int&
|
|
|
|
return RTI_UNKNOWN;
|
|
|
|
return RTI_UNKNOWN;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool CIcomController::writePing()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return m_serial.write((unsigned char*)"\x02\x02\xFF", 3U) == 3;
|
|
|
|
|
|
|
|
}
|
|
|
|
|