Untested changes for the Icom protocol.

pull/1/head
Jonathan Naylor 8 years ago
parent 7307fe1d5c
commit 99692723e9

@ -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;
}

@ -35,7 +35,7 @@ enum RESP_TYPE_ICOM {
RTI_EOT, RTI_EOT,
RTI_HEADER_ACK, RTI_HEADER_ACK,
RTI_DATA_ACK, RTI_DATA_ACK,
RTI_STATUS RTI_PONG
}; };
class CIcomController : public CModem { class CIcomController : public CModem {
@ -65,6 +65,7 @@ private:
bool m_txSpace; bool m_txSpace;
RESP_TYPE_ICOM getResponse(unsigned char* buffer, unsigned int& length); RESP_TYPE_ICOM getResponse(unsigned char* buffer, unsigned int& length);
bool writePing();
}; };
#endif #endif

Loading…
Cancel
Save

Powered by TurnKey Linux.