From 4cade601ccedb21ef99bf5f118aa1db5658fb03a Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 19 Apr 2016 17:47:59 +0100 Subject: [PATCH] Disable YSF payload processing, pass through data raw for now. --- AMBEFEC.cpp | 67 ++++++++++++++++++++++++++++---------------------- YSFControl.cpp | 8 +++--- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/AMBEFEC.cpp b/AMBEFEC.cpp index e495d8c..b360b82 100644 --- a/AMBEFEC.cpp +++ b/AMBEFEC.cpp @@ -599,12 +599,13 @@ unsigned int CAMBEFEC::regenerateYSF3(unsigned char* bytes) const { assert(bytes != NULL); + bool orig[144U]; bool temp[144U]; // De-interleave for (unsigned int i = 0U; i < 144U; i++) { unsigned int n = IMBE_INTERLEAVE[i]; - temp[i] = READ_BIT(bytes, n); + orig[i] = temp[i] = READ_BIT(bytes, n); } // now .. @@ -632,6 +633,23 @@ unsigned int CAMBEFEC::regenerateYSF3(unsigned char* bytes) const // // 7 voice bits 137 + // Process the c0 section first to allow the de-whitening to be accurate + + // Check/Fix FEC + bool* bit = temp; + + // c0 + unsigned int g1 = 0U; + for (unsigned int i = 0U; i < 23U; i++) + g1 = (g1 << 1) | (bit[i] ? 0x01U : 0x00U); + unsigned int c0data = CGolay24128::decode23127(g1); + unsigned int g2 = CGolay24128::encode23127(c0data); + for (int i = 23; i >= 0; i--) { + bit[i] = (g2 & 0x01U) == 0x01U; + g2 >>= 1; + } + bit += 23U; + // De-whiten some bits unsigned int prn = 0x00U; for (unsigned int i = 0U; i < 12U; i++) @@ -642,29 +660,14 @@ unsigned int CAMBEFEC::regenerateYSF3(unsigned char* bytes) const temp[i] ^= (prn & 0x80U) == 0x80U; } - // Check/Fix FEC - bool* bit = temp; - - // c0 - unsigned int g1 = 0U; - for (unsigned int i = 0U; i < 23U; i++) - g1 = (g1 << 1) | (bit[i] & 1); - unsigned int g3 = CGolay24128::decode23127(g1); - unsigned int g2 = CGolay24128::encode23127(g3); - for (int i = 23; i >= 0; i--) { - bit[i] = g2 & 1; - g2 >>= 1; - } - bit += 23U; - // c1 g1 = 0U; for (unsigned int i = 0U; i < 23U; i++) - g1 = (g1 << 1) | (bit[i] & 1); - g3 = CGolay24128::decode23127(g1); - g2 = CGolay24128::encode23127(g3); + g1 = (g1 << 1) | (bit[i] ? 0x01U : 0x00U); + unsigned int c1data = CGolay24128::decode23127(g1); + g2 = CGolay24128::encode23127(c1data); for (int i = 23; i >= 0; i--) { - bit[i] = g2 & 1; + bit[i] = (g2 & 0x01U) == 0x01U; g2 >>= 1; } bit += 23U; @@ -672,11 +675,11 @@ unsigned int CAMBEFEC::regenerateYSF3(unsigned char* bytes) const // c2 g1 = 0; for (int i = 0; i < 23; i++) - g1 = (g1 << 1) | (bit[i] & 1); - g3 = CGolay24128::decode23127(g1); - g2 = CGolay24128::encode23127(g3); + g1 = (g1 << 1) | (bit[i] ? 0x01U : 0x00U); + unsigned int c2data = CGolay24128::decode23127(g1); + g2 = CGolay24128::encode23127(c2data); for (int i = 23; i >= 0; i--) { - bit[i] = g2 & 1; + bit[i] = (g2 & 0x01U) == 0x01U; g2 >>= 1; } bit += 23U; @@ -684,11 +687,11 @@ unsigned int CAMBEFEC::regenerateYSF3(unsigned char* bytes) const // c3 g1 = 0U; for (int i = 0U; i < 23U; i++) - g1 = (g1 << 1) | (bit[i] & 1); - g3 = CGolay24128::decode23127(g1); - g2 = CGolay24128::encode23127(g3); + g1 = (g1 << 1) | (bit[i] ? 0x01U : 0x00U); + unsigned int c3data = CGolay24128::decode23127(g1); + g2 = CGolay24128::encode23127(c3data); for (int i = 23; i >= 0; i--) { - bit[i] = g2 & 1; + bit[i] = (g2 & 0x01U) == 0x01U; g2 >>= 1; } bit += 23U; @@ -714,13 +717,19 @@ unsigned int CAMBEFEC::regenerateYSF3(unsigned char* bytes) const temp[i] ^= (prn & 0x80U) == 0x80U; } + unsigned int errors = 0U; + for (unsigned int i = 0U; i < 144U; i++) { + if (orig[i] != temp[i]) + errors++; + } + // Interleave for (unsigned int i = 0U; i < 144U; i++) { unsigned int n = IMBE_INTERLEAVE[i]; WRITE_BIT(bytes, n, temp[i]); } - return 0U; + return errors; } unsigned int CAMBEFEC::regenerate(unsigned int& a, unsigned int& b, unsigned int& c, bool b23) const diff --git a/YSFControl.cpp b/YSFControl.cpp index a1ba034..1ee8dd2 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -106,9 +106,9 @@ bool CYSFControl::writeModem(unsigned char *data) unsigned char ft = m_fich.getFT(); unsigned char dt = m_fich.getDT(); - LogMessage("YSF, EOT, FI=%X FN=%u FT=%u DT=%X", fi, fn, ft, dt); + LogDebug("YSF, FI=%X FN=%u FT=%u DT=%X", fi, fn, ft, dt); - m_payload.process(data + 2U, fi, fn, ft, dt); + // m_payload.process(data + 2U, fi, fn, ft, dt); m_frames++; @@ -147,9 +147,9 @@ bool CYSFControl::writeModem(unsigned char *data) unsigned char ft = m_fich.getFT(); unsigned char dt = m_fich.getDT(); - LogMessage("YSF, Valid FICH, FI=%X FN=%u FT=%u DT=%X", fi, fn, ft, dt); + LogDebug("YSF, FI=%X FN=%u FT=%u DT=%X", fi, fn, ft, dt); - m_payload.process(data + 2U, fi, fn, ft, dt); + // m_payload.process(data + 2U, fi, fn, ft, dt); bool change = false;