From 28262ca5fbffabc2e9cbbbe2158435298ca0e3f0 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 21 Jul 2024 14:20:48 +0200 Subject: [PATCH] More Sonar bug fixes --- ft8/ft8.cpp | 3 ++ ft8/libldpc.cpp | 4 +-- plugins/channelrx/demodadsb/adsbdemodsink.h | 4 +-- .../channelrx/demoddatv/ldpctool/encoder.h | 7 ++++- .../demoddatv/ldpctool/layered_decoder.h | 21 ++++++++++++- .../demoddatv/ldpctool/ldpc_tool.cpp | 30 ++++++++++++------- .../radioastronomy/radioastronomy.cpp | 10 +++---- .../mod802.15.4/ieee_802_15_4_macframe.h | 3 ++ scriptsapi/superscanner.py | 4 +-- sdrbase/dsp/sigmffilerecord.cpp | 4 +-- sdrbase/dsp/wfir.cpp | 6 ++++ wdsp/cfcomp.cpp | 1 - wdsp/emnr.cpp | 2 +- wdsp/fir.cpp | 10 +++++++ wdsp/resample.cpp | 4 +-- wdsp/resamplef.cpp | 4 +-- 16 files changed, 85 insertions(+), 32 deletions(-) diff --git a/ft8/ft8.cpp b/ft8/ft8.cpp index d0b96478b..31d77ff0d 100644 --- a/ft8/ft8.cpp +++ b/ft8/ft8.cpp @@ -2006,6 +2006,9 @@ void FT8::soft_decode_mags(FT8Params& params, const std::vector TYPE(0) ? a : TYPE(0); } public: - LDPCEncoder() : initialized(false) + LDPCEncoder() : + N(2), + K(1), + R(1), + initialized(false) { } + void init(LDPCInterface *it) { if (initialized) diff --git a/plugins/channelrx/demoddatv/ldpctool/layered_decoder.h b/plugins/channelrx/demoddatv/ldpctool/layered_decoder.h index e5867a980..a7cdee3c7 100644 --- a/plugins/channelrx/demoddatv/ldpctool/layered_decoder.h +++ b/plugins/channelrx/demoddatv/ldpctool/layered_decoder.h @@ -77,6 +77,7 @@ public: template class LDPCDecoder { +private: TYPE *bnl, *pty, *inp, *out; uint16_t *pos; uint8_t *cnc; @@ -89,6 +90,7 @@ class LDPCDecoder for (int i = 0; i < LT; ++i) bnl[i] = alg.zero(); } + bool bad(TYPE *data, TYPE *parity, int blocks) { for (int i = 0; i < q; ++i) { @@ -107,6 +109,7 @@ class LDPCDecoder } return false; } + void update(TYPE *data, TYPE *parity) { TYPE *bl = bnl; @@ -135,10 +138,26 @@ class LDPCDecoder } } } + public: - LDPCDecoder() : initialized(false) + LDPCDecoder() : + bnl(nullptr), + pty(nullptr), + inp(nullptr), + out(nullptr), + pos(nullptr), + cnc(nullptr), + M(0), + N(0), + K(0), + R(0), + q(0), + CNL(0), + LT(0), + initialized(false) { } + void init(LDPCInterface *it) { if (initialized) { diff --git a/plugins/channelrx/demoddatv/ldpctool/ldpc_tool.cpp b/plugins/channelrx/demoddatv/ldpctool/ldpc_tool.cpp index fee0a1730..eebc9b24a 100644 --- a/plugins/channelrx/demoddatv/ldpctool/ldpc_tool.cpp +++ b/plugins/channelrx/demoddatv/ldpctool/ldpc_tool.cpp @@ -124,16 +124,18 @@ int main(int argc, char **argv) // DVB-S2 MODCOD definitions static const char *mc_tabnames[2][32] = { // [shortframes][modcod] - {// Normal frames - 0, "B1", "B2", "B3", "B4", "B5", "B6", "B7", - "B8", "B9", "B10", "B11", "B5", "B6", "B7", "B9", - "B10", "B11", "B6", "B7", "B8", "B9", "B10", "B11", - "B7", "B8", "B8", "B10", "B11", 0, 0, 0}, - {// Short frames - 0, "C1", "C2", "C3", "C4", "C5", "C6", "C7", - "C8", "C9", "C10", 0, "C5", "C6", "C7", "C9", - "C10", 0, "C6", "C7", "C8", "C9", "C10", 0, - "C7", "C8", "C8", "C10", 0, 0, 0, 0}}; + {// Normal frames + 0, "B1", "B2", "B3", "B4", "B5", "B6", "B7", + "B8", "B9", "B10", "B11", "B5", "B6", "B7", "B9", + "B10", "B11", "B6", "B7", "B8", "B9", "B10", "B11", + "B7", "B8", "B8", "B10", "B11", 0, 0, 0 + }, + {// Short frames + 0, "C1", "C2", "C3", "C4", "C5", "C6", "C7", + "C8", "C9", "C10", 0, "C5", "C6", "C7", "C9", + "C10", 0, "C6", "C7", "C8", "C9", "C10", 0, + "C7", "C8", "C8", "C10", 0, 0, 0, 0 + }}; const char *tabname = mc_tabnames[shortframes][modcod]; if (!tabname) @@ -188,8 +190,16 @@ int main(int argc, char **argv) int blocks = j + ldpctool::SIMD_WIDTH > BLOCKS ? BLOCKS - j : ldpctool::SIMD_WIDTH; for (int n = 0; n < blocks; ++n) + { for (int i = 0; i < CODE_LEN; ++i) + { + if (((j + n) * CODE_LEN + i) >= BLOCKS * CODE_LEN) { + break; + } + reinterpret_cast(simd + i)[n] = code[(j + n) * CODE_LEN + i]; + } + } int count = decode(simd, simd + DATA_LEN, max_trials, blocks); num_decodes++; diff --git a/plugins/channelrx/radioastronomy/radioastronomy.cpp b/plugins/channelrx/radioastronomy/radioastronomy.cpp index 2254f7401..db300c5a4 100644 --- a/plugins/channelrx/radioastronomy/radioastronomy.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomy.cpp @@ -155,14 +155,12 @@ RadioAstronomy::~RadioAstronomy() m_deviceAPI->removeChannelSinkAPI(this); m_deviceAPI->removeChannelSink(this); - if (m_basebandSink->isRunning()) { + if ((m_basebandSink->isRunning()) || (m_worker->isRunning())) { stop(); } - delete m_basebandSink; - if (m_worker->isRunning()) { - stop(); - } - delete m_worker; + + m_worker->deleteLater(); + m_basebandSink->deleteLater(); } void RadioAstronomy::setDeviceAPI(DeviceAPI *deviceAPI) diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_macframe.h b/plugins/channeltx/mod802.15.4/ieee_802_15_4_macframe.h index 3cd8ff614..e9e456195 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_macframe.h +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_macframe.h @@ -60,6 +60,9 @@ struct IEEE_802_15_4_MacFrame IEEE_802_15_4_MacFrame() { + m_destShortAddress = 0; + m_sourceShortAddress = 0; + if (false) { // Example ACK frame diff --git a/scriptsapi/superscanner.py b/scriptsapi/superscanner.py index 7c8cedc64..d85793480 100644 --- a/scriptsapi/superscanner.py +++ b/scriptsapi/superscanner.py @@ -14,7 +14,7 @@ except ImportError: import _thread as thread import time -from datetime import datetime +from datetime import datetime, timezone from optparse import OptionParser import sdrangel @@ -50,7 +50,7 @@ class SuperScannerAPIError(SuperScannerError): # ====================================================================== def log_with_timestamp(message): - t = datetime.utcnow() + t = datetime.now(timezone.utc) print(f'{t.isoformat()} {message}') # ====================================================================== diff --git a/sdrbase/dsp/sigmffilerecord.cpp b/sdrbase/dsp/sigmffilerecord.cpp index 885d5875a..301b6d080 100644 --- a/sdrbase/dsp/sigmffilerecord.cpp +++ b/sdrbase/dsp/sigmffilerecord.cpp @@ -143,7 +143,7 @@ void SigMFFileRecord::setFileName(const QString& fileName) } m_initialBytesCount = (uint64_t) m_sampleFile.size(); m_sampleStart = m_initialBytesCount / ((1<= N + 2) { + break; + } + WinCoeff[j] = 1.0; + } } // This will set the gain of the window to 1. Only the Flattop window has unity gain by design. diff --git a/wdsp/cfcomp.cpp b/wdsp/cfcomp.cpp index ea6efd4db..9b93f8abe 100644 --- a/wdsp/cfcomp.cpp +++ b/wdsp/cfcomp.cpp @@ -117,7 +117,6 @@ void CFCOMP::calc_comp (CFCOMP *a) a->G[i] = sary[3 * i + 1]; a->E[i] = sary[3 * i + 2]; } - delete[] (sary); a->fp[0] = 0.0; a->fp[a->nfreqs + 1] = fmax; a->gp[0] = a->G[0]; diff --git a/wdsp/emnr.cpp b/wdsp/emnr.cpp index 14d9d2388..d54c0357c 100644 --- a/wdsp/emnr.cpp +++ b/wdsp/emnr.cpp @@ -230,7 +230,7 @@ void EMNR::interpM (double* res, double x, int nvals, double* xvals, double* yva } else { - int idx = 0; + int idx = 1; double xllow, xlhigh, frac; while ((x >= xvals[idx]) && (idx < nvals - 1)) diff --git a/wdsp/fir.cpp b/wdsp/fir.cpp index e7a404b01..269694c36 100644 --- a/wdsp/fir.cpp +++ b/wdsp/fir.cpp @@ -317,10 +317,15 @@ float *FIR::fir_read (int N, const char *filename, int rtype, float scale) void FIR::analytic (int N, float* in, float* out) { + if (N < 1) { + return; + } + int i; double inv_N = 1.0 / (double) N; double two_inv_N = 2.0 * inv_N; float* x = new float[N * 2]; // (float *) malloc0 (N * sizeof (complex)); + fftwf_plan pfor = fftwf_plan_dft_1d ( N, (fftwf_complex *) in, @@ -328,6 +333,7 @@ void FIR::analytic (int N, float* in, float* out) FFTW_FORWARD, FFTW_PATIENT ); + fftwf_plan prev = fftwf_plan_dft_1d ( N, (fftwf_complex *) x, @@ -335,20 +341,24 @@ void FIR::analytic (int N, float* in, float* out) FFTW_BACKWARD, FFTW_PATIENT ); + fftwf_execute (pfor); x[0] *= inv_N; x[1] *= inv_N; + for (i = 1; i < N / 2; i++) { x[2 * i + 0] *= two_inv_N; x[2 * i + 1] *= two_inv_N; } + x[N + 0] *= inv_N; x[N + 1] *= inv_N; memset (&x[N + 2], 0, (N - 2) * sizeof (float)); fftwf_execute (prev); fftwf_destroy_plan (prev); fftwf_destroy_plan (pfor); + delete[] x; } diff --git a/wdsp/resample.cpp b/wdsp/resample.cpp index ac66017a1..02ba5b4b9 100644 --- a/wdsp/resample.cpp +++ b/wdsp/resample.cpp @@ -60,8 +60,8 @@ void RESAMPLE::calc_resample (RESAMPLE *a) a->L = a->out_rate / x; a->M = a->in_rate / x; - a->L <= 0 ? 1 : a->L; - a->M <= 0 ? 1 : a->M; + a->L = a->L <= 0 ? 1 : a->L; + a->M = a->M <= 0 ? 1 : a->M; if (a->in_rate < a->out_rate) min_rate = a->in_rate; diff --git a/wdsp/resamplef.cpp b/wdsp/resamplef.cpp index 41624abdc..a79330f23 100644 --- a/wdsp/resamplef.cpp +++ b/wdsp/resamplef.cpp @@ -64,8 +64,8 @@ RESAMPLEF* RESAMPLEF::create_resampleF ( int run, int size, float* in, float* ou a->L = out_rate / x; a->M = in_rate / x; - a->L <= 0 ? 1 : a->L; - a->M <= 0 ? 1 : a->M; + a->L = a->L <= 0 ? 1 : a->L; + a->M = a->M <= 0 ? 1 : a->M; if (in_rate < out_rate) min_rate = in_rate;