Add M17 Codec 1600 mode on RX and remove the remains of M17 packet mode

support.
This commit is contained in:
Jonathan Naylor
2021-08-10 19:54:14 +01:00
parent bfacdee8e2
commit e2e5ddf4c8
14 changed files with 94 additions and 107 deletions

View File

@@ -108,7 +108,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
unsigned char type = data[0U];
if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) {
if (type == TAG_LOST && (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO)) {
std::string source = m_rfLSF.getSource();
std::string dest = m_rfLSF.getDest();
@@ -135,12 +135,6 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
return false;
}
// Ignore packet data
if (type == TAG_DATA2) {
m_rfState = RS_RF_LISTENING;
return false;
}
// Have we got RSSI bytes on the end?
if (len == (M17_FRAME_LENGTH_BYTES + 4U)) {
uint16_t raw = 0U;
@@ -208,12 +202,12 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
}
}
if (m_rfState == RS_RF_LISTENING && data[0U] == TAG_DATA1) {
if (m_rfState == RS_RF_LISTENING && data[0U] == TAG_DATA) {
m_rfState = RS_RF_LATE_ENTRY;
m_rfLSF.reset();
}
if (m_rfState == RS_RF_LATE_ENTRY && data[0U] == TAG_DATA1) {
if (m_rfState == RS_RF_LATE_ENTRY && data[0U] == TAG_DATA) {
unsigned int lich1, lich2, lich3, lich4;
bool valid1 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 0U, lich1);
bool valid2 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 3U, lich2);
@@ -256,7 +250,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
}
}
if (m_rfState == RS_RF_AUDIO && data[0U] == TAG_DATA1) {
if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO) && data[0U] == TAG_DATA) {
#if defined(DUMP_M17)
writeFile(data + 2U);
#endif
@@ -273,8 +267,14 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
frame[0U] = (m_rfFN >> 8) & 0xFFU;
frame[1U] = (m_rfFN >> 0) & 0xFFU;
::memcpy(frame + 2U + 0U, M17_3200_SILENCE, 8U);
::memcpy(frame + 2U + 8U, M17_3200_SILENCE, 8U);
if (m_rfState == RS_RF_AUDIO) {
::memcpy(frame + 2U + 0U, M17_3200_SILENCE, 8U);
::memcpy(frame + 2U + 8U, M17_3200_SILENCE, 8U);
} else {
::memcpy(frame + 2U + 0U, M17_1600_SILENCE, 4U);
::memcpy(frame + 2U + 4U, M17_1600_SILENCE, 4U);
::memset(frame + 2U + 8U, 0x00U, 8U);
}
} else {
m_rfFN = (frame[0U] << 8) + (frame[1U] << 0);
}
@@ -290,7 +290,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
if (m_duplex) {
unsigned char rfData[2U + M17_FRAME_LENGTH_BYTES];
rfData[0U] = TAG_DATA1;
rfData[0U] = TAG_DATA;
rfData[1U] = 0x00U;
// Generate the sync
@@ -451,7 +451,7 @@ void CM17Control::writeNetwork()
break;
case M17_DATA_TYPE_VOICE_DATA:
LogMessage("M17, received network voice + data transmission from %s to %s", source.c_str(), dest.c_str());
m_netState = RS_NET_AUDIO;
m_netState = RS_NET_DATA_AUDIO;
break;
default:
LogMessage("M17, received network unknown transmission from %s to %s", source.c_str(), dest.c_str());
@@ -490,10 +490,10 @@ void CM17Control::writeNetwork()
writeQueueNet(start);
}
if (m_netState == RS_NET_AUDIO) {
if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA_AUDIO) {
unsigned char data[M17_FRAME_LENGTH_BYTES + 2U];
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
// Generate the sync
@@ -591,7 +591,7 @@ bool CM17Control::processRFHeader(bool lateEntry)
break;
case M17_DATA_TYPE_VOICE_DATA:
LogMessage("M17, received RF%svoice + data transmission from %s to %s", lateEntry ? " late entry " : " ", source.c_str(), dest.c_str());
m_rfState = RS_RF_AUDIO;
m_rfState = RS_RF_DATA_AUDIO;
break;
default:
LogMessage("M17, received RF%sunknown transmission from %s to %s", lateEntry ? " late entry " : " ", source.c_str(), dest.c_str());
@@ -636,7 +636,7 @@ void CM17Control::clock(unsigned int ms)
m_rfTimeoutTimer.clock(ms);
m_netTimeoutTimer.clock(ms);
if (m_netState == RS_NET_AUDIO) {
if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA_AUDIO) {
m_networkWatchdog.clock(ms);
if (m_networkWatchdog.hasExpired()) {