mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 15:09:23 +08:00
Fix the FACCH1 data on incoming network streams.
This commit is contained in:
@@ -726,10 +726,9 @@ void CNXDNControl::writeNetwork()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (usc == NXDN_LICH_USC_SACCH_NS) {
|
} else if (usc == NXDN_LICH_USC_SACCH_NS) {
|
||||||
CNXDNLayer3 layer3;
|
m_netLayer3.setData(netData + 5U + 0U, 10U);
|
||||||
layer3.setData(netData + 5U, 10U);
|
|
||||||
|
|
||||||
unsigned char type = layer3.getMessageType();
|
unsigned char type = m_netLayer3.getMessageType();
|
||||||
if (type == NXDN_MESSAGE_TYPE_TX_REL && m_netState == RS_RF_LISTENING)
|
if (type == NXDN_MESSAGE_TYPE_TX_REL && m_netState == RS_RF_LISTENING)
|
||||||
return;
|
return;
|
||||||
if (type == NXDN_MESSAGE_TYPE_VCALL && m_netState != RS_RF_LISTENING)
|
if (type == NXDN_MESSAGE_TYPE_VCALL && m_netState != RS_RF_LISTENING)
|
||||||
@@ -741,11 +740,8 @@ void CNXDNControl::writeNetwork()
|
|||||||
sacch.setData(SACCH_IDLE);
|
sacch.setData(SACCH_IDLE);
|
||||||
sacch.encode(data + 2U);
|
sacch.encode(data + 2U);
|
||||||
|
|
||||||
unsigned char message[22U];
|
|
||||||
m_rfLayer3.getData(message);
|
|
||||||
|
|
||||||
CNXDNFACCH1 facch;
|
CNXDNFACCH1 facch;
|
||||||
facch.setData(message);
|
facch.setData(netData + 5U + 0U);
|
||||||
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
|
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
|
||||||
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
|
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
|
||||||
|
|
||||||
@@ -761,9 +757,9 @@ void CNXDNControl::writeNetwork()
|
|||||||
LogMessage("NXDN, received network end of transmission, %.1f seconds, %u%% packet loss", float(m_netFrames) / 12.5F, (m_netLost * 100U) / m_netFrames);
|
LogMessage("NXDN, received network end of transmission, %.1f seconds, %u%% packet loss", float(m_netFrames) / 12.5F, (m_netLost * 100U) / m_netFrames);
|
||||||
writeEndNet();
|
writeEndNet();
|
||||||
} else if (type == NXDN_MESSAGE_TYPE_VCALL) {
|
} else if (type == NXDN_MESSAGE_TYPE_VCALL) {
|
||||||
unsigned short srcId = layer3.getSourceUnitId();
|
unsigned short srcId = m_netLayer3.getSourceUnitId();
|
||||||
unsigned short dstId = layer3.getDestinationGroupId();
|
unsigned short dstId = m_netLayer3.getDestinationGroupId();
|
||||||
bool grp = layer3.getIsGroup();
|
bool grp = m_netLayer3.getIsGroup();
|
||||||
|
|
||||||
std::string source = m_lookup->find(srcId);
|
std::string source = m_lookup->find(srcId);
|
||||||
LogMessage("NXDN, received network transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId);
|
LogMessage("NXDN, received network transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId);
|
||||||
@@ -883,8 +879,7 @@ void CNXDNControl::writeNetwork()
|
|||||||
ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U);
|
ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 27U);
|
||||||
} else if (option == NXDN_LICH_STEAL_FACCH1_1) {
|
} else if (option == NXDN_LICH_STEAL_FACCH1_1) {
|
||||||
CNXDNFACCH1 facch1;
|
CNXDNFACCH1 facch1;
|
||||||
bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
|
facch1.setData(netData + 5U + 0U);
|
||||||
if (valid)
|
|
||||||
facch1.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
|
facch1.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
|
||||||
|
|
||||||
CAMBEFEC ambe;
|
CAMBEFEC ambe;
|
||||||
@@ -896,18 +891,15 @@ void CNXDNControl::writeNetwork()
|
|||||||
ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U);
|
ambe.regenerateYSFDN(data + 2U + NXDN_FSW_LICH_SACCH_LENGTH_BYTES + 9U);
|
||||||
|
|
||||||
CNXDNFACCH1 facch1;
|
CNXDNFACCH1 facch1;
|
||||||
bool valid = facch1.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
|
facch1.setData(netData + 5U + 14U);
|
||||||
if (valid)
|
|
||||||
facch1.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
|
facch1.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
|
||||||
} else {
|
} else {
|
||||||
CNXDNFACCH1 facch11;
|
CNXDNFACCH1 facch11;
|
||||||
bool valid1 = facch11.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
|
facch11.setData(netData + 5U + 0U);
|
||||||
if (valid1)
|
|
||||||
facch11.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
|
facch11.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
|
||||||
|
|
||||||
CNXDNFACCH1 facch12;
|
CNXDNFACCH1 facch12;
|
||||||
bool valid2 = facch12.decode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
|
facch12.setData(netData + 5U + 14U);
|
||||||
if (valid2)
|
|
||||||
facch12.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
|
facch12.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user