[js8.sh job] utc=2026-05-27T08:43:05Z [js8.sh job] build=step48-source-decoder-path-audit [js8.sh job] root=/decoders/js8_decoder [js8.sh job] command=./run_js8_decoder_lab.sh full-audit [js8.sh job] rx-only: no TX / no PTT / no Tune / no Send [webftr-js8-lab] command=full-audit [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260527T084305Z_full-audit.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260527T084305Z_full-audit_manifest.json [webftr-js8-lab] utc=20260527T084305Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] full-audit mode [webftr-js8-lab] This runs selftest, then source audit, then creates an upload log bundle. [webftr-js8-lab] Tip: pass a local JS8Call-Improved source path to avoid internet/git clone. ========== FULL-AUDIT STEP 1/4: SELFTEST ========== [webftr-js8-lab] command=selftest [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260527T084305Z_selftest.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260527T084305Z_selftest_manifest.json [webftr-js8-lab] utc=20260527T084305Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] creating tone test WAV: /decoders/js8_decoder/runtime/selftest_1500hz.wav /decoders/js8_decoder/runtime/selftest_1500hz.wav [webftr-js8-lab] creating short synthetic JS8-like Costas probe WAV: /decoders/js8_decoder/runtime/selftest_js8_costas_probe.wav /decoders/js8_decoder/runtime/selftest_js8_costas_probe.wav [webftr-js8-lab] running WAV validator [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T084305Z_selftest_decode_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "mode": "JS8", "decoder": "webftr-js8-decoder-lab", "decoder_version": "step48-source-decoder-path-audit-2026-05-27", "timestamp_utc": "2026-05-27T08:43:08Z", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "rig_control": false, "js8call_api_control": false }, "capabilities": { "wav_validate": true, "audio_metrics": true, "spectrum_candidates": true, "sync_candidates": true, "soft_symbol_metrics": true, "fec_input_packager": true, "bit_pipeline_mapper": true, "ldpc_probe_harness": true, "message_parse": true, "real_js8_demod": false, "real_js8_fec_decode": false, "real_js8_unpack": false }, "warnings": [ "Step 48 adds an RX-only LDPC probe harness around the 174-bit candidates. It still does not perform final real JS8 LDPC/FEC or message unpack." ], "decodes": [], "input_wav": "/decoders/js8_decoder/runtime/selftest_1500hz.wav", "wav": { "path": "/decoders/js8_decoder/runtime/selftest_1500hz.wav", "channels": 1, "sample_rate": 12000, "sample_width_bytes": 2, "frames": 24000, "duration_seconds": 2.0, "rms_dbfs": -15.05, "peak_dbfs": -12.04, "clipped": false }, "spectrum_probe": { "ok": true, "method": "goertzel_300_3000hz_25hz_step", "note": "Audio plumbing probe only, not JS8 sync or demodulation.", "candidates": [ { "freq_hz": 1500.0, "relative_db": 0.0, "power": 374.91417208 }, { "freq_hz": 1475.0, "relative_db": -277.94, "power": 0.0 }, { "freq_hz": 1525.0, "relative_db": -283.93, "power": 0.0 }, { "freq_hz": 1400.0, "relative_db": -289.05, "power": 0.0 }, { "freq_hz": 1550.0, "relative_db": -293.96, "power": 0.0 }, { "freq_hz": 1650.0, "relative_db": -295.18, "power": 0.0 }, { "freq_hz": 1575.0, "relative_db": -296.53, "power": 0.0 }, { "freq_hz": 1175.0, "relative_db": -298.26, "power": 0.0 } ] }, "implementation_stage": "step48_message91_crc_distance_ranking_no_text_unpack", "next_steps": [ "audit JS8Call/JS8Call-Improved source to locate minimal RX decoder path", "run sync-probe, soft-symbols, bit-pipeline and ldpc-probe on real JS8 WAV captures", "extract/connect the real JS8 LDPC matrix/decoder using the Step9 174-bit soft candidates", "implement JS8 message unpack and map to stable decodes[] JSON" ] } [webftr-js8-lab] running JS8 text parser smoke test [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T084305Z_selftest_parse_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "mode": "JS8", "parser": "webftr-js8-message-parser", "count": 1, "messages": [ { "raw": "CQ DN9LO JO62", "normalized": "CQ DN9LO JO62", "message_type": "CQ", "directed_to": null, "callsigns": [ "DN9LO" ], "primary_callsign": "DN9LO", "locators": [ "JO62" ], "primary_locator": "JO62", "body": "CQ DN9LO JO62" } ] } [webftr-js8-lab] running input-check smoke test [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T084305Z_selftest_input_check_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "mode": "JS8", "tool": "webftr-js8-input-check", "tool_version": "step48-source-decoder-path-audit", "input_wav": "/decoders/js8_decoder/runtime/selftest_js8_costas_probe.wav", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "decodes": [], "warnings": [ "WAV is short. A longer JS8 capture improves profile and LDPC candidate checks." ], "wav": { "path": "/decoders/js8_decoder/runtime/selftest_js8_costas_probe.wav", "channels": 1, "sample_rate": 12000, "sample_width_bytes": 2, "frames": 148608, "duration_seconds": 12.384, "rms_dbfs": -15.61, "peak_dbfs": -12.25, "clipped": false }, "next_action": "Run profile-scan, then auto-ldpc-probe on this WAV." } [webftr-js8-lab] running short sync-probe smoke test [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T084305Z_selftest_sync_probe_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "mode": "JS8", "tool": "webftr-js8-sync-probe", "tool_version": "step48-source-decoder-path-audit", "input_wav": "/decoders/js8_decoder/runtime/selftest_js8_costas_probe.wav", "rx_only": true, "safety": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "implementation_stage": "step43_sync_candidates_with_ldpc_probe_followup_no_final_decode", "wav": { "path": "/decoders/js8_decoder/runtime/selftest_js8_costas_probe.wav", "channels": 1, "sample_rate": 12000, "sample_width_bytes": 2, "frames": 148608, "duration_seconds": 12.384, "rms_dbfs": -15.61, "peak_dbfs": -12.25, "clipped": false }, "js8_reference": { "source": "JS8Call-Improved source-map orientation plus FT8-like Costas7 hypothesis", "sample_rate_hz": 12000, "default_nsps": 6192, "default_symbol_duration_seconds": 0.516, "costas7_candidate": [ 3, 1, 4, 0, 6, 5, 2 ], "tone_count_candidate": 8, "note": "This is a sync/symbol candidate extractor only. It estimates frame/symbol candidates for lab work and does not perform LDPC/FEC decode or JS8 message unpacking." }, "scan": { "nsps": 6192, "tone_spacing_hz": 1.937984, "freq_min_hz": 300.0, "freq_max_hz": 3000.0, "max_seconds_analyzed": 4.0, "start_candidates_scanned": 1, "base_candidates_scanned": 1, "base_candidates_hz": [ 1000.0 ], "coarse_tone_candidates": [ { "freq_hz": 1000.0, "relative_db": 0.0, "power": 6.94910418 }, { "freq_hz": 1025.0, "relative_db": -27.24, "power": 0.0131166 }, { "freq_hz": 975.0, "relative_db": -27.53, "power": 0.01227993 }, { "freq_hz": 1050.0, "relative_db": -37.39, "power": 0.0012678 }, { "freq_hz": 1075.0, "relative_db": -41.43, "power": 0.00049951 }, { "freq_hz": 950.0, "relative_db": -43.35, "power": 0.00032115 }, { "freq_hz": 1100.0, "relative_db": -46.57, "power": 0.00015313 }, { "freq_hz": 1250.0, "relative_db": -47.96, "power": 0.00011108 }, { "freq_hz": 1125.0, "relative_db": -48.58, "power": 9.635e-05 }, { "freq_hz": 1200.0, "relative_db": -50.32, "power": 6.457e-05 }, { "freq_hz": 875.0, "relative_db": -50.9, "power": 5.646e-05 }, { "freq_hz": 1175.0, "relative_db": -51.46, "power": 4.965e-05 } ] }, "sync_candidates": [ { "ok": true, "start_sample": 0, "start_seconds": 0.0, "base_freq_hz": 1000.0, "tone_spacing_hz": 1.937984, "nsps": 6192, "costas_pattern": [ 3, 1, 4, 0, 6, 5, 2 ], "costas_hits": 7, "costas_symbols": 7, "avg_margin_db": 29.11, "energy_score_db": 29.11, "candidate_score": 128.22, "symbols": [ { "symbol": 0, "expected_tone": 3, "strongest_tone": 3, "expected_is_strongest": true, "expected_power": 83.0873099286, "median_other_power": 0.1042308968, "margin_db": 29.02, "tone_powers": [ 0.0981480318, 0.1051242996, 0.1064179268, 83.0873099286, 0.1057422016, 0.1042308968, 0.0993799575, 0.0932492823 ] }, { "symbol": 1, "expected_tone": 1, "strongest_tone": 1, "expected_is_strongest": true, "expected_power": 83.0774568889, "median_other_power": 0.1014706768, "margin_db": 29.13, "tone_powers": [ 0.1068702304, 83.0774568889, 0.1052822376, 0.105564598, 0.1014706768, 0.0956100015, 0.0879534486, 0.0800992227 ] }, { "symbol": 2, "expected_tone": 4, "strongest_tone": 4, "expected_is_strongest": true, "expected_power": 83.0917714671, "median_other_power": 0.1044873575, "margin_db": 29.0, "tone_powers": [ 0.0960127168, 0.0986802754, 0.1054058068, 0.1081981246, 83.0917714671, 0.1055965002, 0.1044873575, 0.0990928872 ] }, { "symbol": 3, "expected_tone": 0, "strongest_tone": 0, "expected_is_strongest": true, "expected_power": 83.0749822549, "median_other_power": 0.0948551103, "margin_db": 29.42, "tone_powers": [ 83.0749822549, 0.1081775542, 0.1032741915, 0.1002757935, 0.0948551103, 0.0864721839, 0.080493759, 0.0726495994 ] }, { "symbol": 4, "expected_tone": 6, "strongest_tone": 6, "expected_is_strongest": true, "expected_power": 83.0368796528, "median_other_power": 0.1013897721, "margin_db": 29.13, "tone_powers": [ 0.0811328494, 0.088780076, 0.0950670222, 0.1013897721, 0.1027811248, 0.1070386893, 83.0368796528, 0.1089829146 ] }, { "symbol": 5, "expected_tone": 5, "strongest_tone": 5, "expected_is_strongest": true, "expected_power": 83.0780861176, "median_other_power": 0.1045690469, "margin_db": 29.0, "tone_powers": [ 0.0865241623, 0.0949217802, 0.099666939, 0.1045690469, 0.1061057949, 83.0780861176, 0.1100149946, 0.1049352501 ] }, { "symbol": 6, "expected_tone": 2, "strongest_tone": 2, "expected_is_strongest": true, "expected_power": 83.0649691812, "median_other_power": 0.1027968836, "margin_db": 29.07, "tone_powers": [ 0.1060939743, 0.1064017103, 83.0649691812, 0.1058247328, 0.1027968836, 0.1002472492, 0.0945580448, 0.088818472 ] } ], "symbol_preview": [ { "symbol": 0, "tone_index": 3, "confidence_db": 28.93, "powers": [ 0.0981480318, 0.1051242996, 0.1064179268, 83.0873099286, 0.1057422016, 0.1042308968, 0.0993799575, 0.0932492823 ] }, { "symbol": 1, "tone_index": 1, "confidence_db": 28.91, "powers": [ 0.1068702304, 83.0774568889, 0.1052822376, 0.105564598, 0.1014706768, 0.0956100015, 0.0879534486, 0.0800992227 ] }, { "symbol": 2, "tone_index": 4, "confidence_db": 28.85, "powers": [ 0.0960127168, 0.0986802754, 0.1054058068, 0.1081981246, 83.0917714671, 0.1055965002, 0.1044873575, 0.0990928872 ] }, { "symbol": 3, "tone_index": 0, "confidence_db": 28.85, "powers": [ 83.0749822549, 0.1081775542, 0.1032741915, 0.1002757935, 0.0948551103, 0.0864721839, 0.080493759, 0.0726495994 ] }, { "symbol": 4, "tone_index": 6, "confidence_db": 28.82, "powers": [ 0.0811328494, 0.088780076, 0.0950670222, 0.1013897721, 0.1027811248, 0.1070386893, 83.0368796528, 0.1089829146 ] }, { "symbol": 5, "tone_index": 5, "confidence_db": 28.78, "powers": [ 0.0865241623, 0.0949217802, 0.099666939, 0.1045690469, 0.1061057949, 83.0780861176, 0.1100149946, 0.1049352501 ] }, { "symbol": 6, "tone_index": 2, "confidence_db": 28.92, "powers": [ 0.1060939743, 0.1064017103, 83.0649691812, 0.1058247328, 0.1027968836, 0.1002472492, 0.0945580448, 0.088818472 ] } ] } ], "decodes": [], "warnings": [ "No JS8 text decode is expected in Step 48. Final real LDPC/FEC and Varicode/message unpack are not implemented yet.", "Costas7 scoring is a lab candidate extractor; real decoder validation requires actual JS8 WAV samples." ], "next_action": "Run sync-probe on real JS8 WAV captures. If stable sync_candidates appear, Step 48 can continue soft-symbol metric extraction for the LDPC/FEC path." } [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260527T084305Z_selftest.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260527T084305Z_selftest_manifest.json [webftr-js8-lab] selftest exit_code=0 ========== FULL-AUDIT STEP 2/4: SOURCE AUDIT ========== [webftr-js8-lab] no local source directory supplied, trying clone-audit [webftr-js8-lab] command=clone-audit [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260527T084314Z_clone-audit.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260527T084314Z_clone-audit_manifest.json [webftr-js8-lab] utc=20260527T084314Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] clone/audit destination: /decoders/js8_decoder/runtime/src/JS8Call-improved [webftr-js8-lab] cloning JS8Call-Improved... Cloning into '/decoders/js8_decoder/runtime/src/JS8Call-improved'... [webftr-js8-lab] running source audit [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T084314Z_clone_audit_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "scanned_files": 542, "ranked_results": [ { "path": "vendor/sqlite3/sqlite3.c", "score": 10570, "hits": { "decode": 159, "decoder": 6, "sync": 882, "unpack": 190, "symbol": 145, "soft": 93, "wav": 5, "message": 317 }, "sample_lines": [ { "line": 822, "text": "#define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8))" }, { "line": 823, "text": "#define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5<<8))" }, { "line": 1017, "text": "** CAPI3REF: Synchronization Type Flags" }, { "line": 1019, "text": "** When SQLite invokes the xSync() method of an" }, { "line": 1023, "text": "** When the SQLITE_SYNC_DATAONLY flag is used, it means that the" }, { "line": 1024, "text": "** sync operation only needs to flush data to mass storage. Inode" } ] }, { "path": "JS8_UI/mainwindow.cpp", "score": 7772, "hits": { "js8": 337, "decode": 293, "decoder": 104, "sync": 11, "ft8": 1, "jt9": 1, "fsk": 1, "symbol": 6, "snr": 68, "wav": 1, "message": 448 }, "sample_lines": [ { "line": 3, "text": "* @brief source file that implements the JS8Call user interface" }, { "line": 5, "text": "* all functionality of the JS8call main window" }, { "line": 20, "text": "int volatile itone[JS8_NUM_SYMBOLS]; // Audio tones for all Tx symbols" }, { "line": 106, "text": "// JS8_Mainwindow/UI_Constructor.cpp" }, { "line": 349, "text": "m_decoder.quit();" }, { "line": 380, "text": "m_settings->setValue(\"SubModeHB\", ui->actionModeJS8HB->isChecked());" } ] }, { "path": "JS8_Mode/JS8.cpp", "score": 4014, "hits": { "js8": 111, "decode": 142, "decoder": 36, "sync": 120, "ldpc": 23, "ft8": 1, "symbol": 37, "soft": 8, "snr": 14, "wav": 4, "message": 41, "filename:js8": 1 }, "sample_lines": [ { "line": 2, "text": "* @file JS8.cpp" }, { "line": 3, "text": "* @brief Implementation of JS8 encoding and decoding functions" }, { "line": 8, "text": "#include \"JS8.h\"" }, { "line": 9, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 10, "text": "#include \"JS8_Mode/FrequencyTracker.h\"" }, { "line": 11, "text": "#include \"JS8_Mode/whitening_processor.h\"" } ] }, { "path": "JS8_JSC/JSC_list.cpp", "score": 1916, "hits": { "js8": 6, "decode": 6, "decoder": 2, "sync": 73, "ldpc": 1, "unpack": 5, "ft8": 1, "fsk": 14, "symbol": 21, "soft": 168, "snr": 5, "wav": 109, "message": 22 }, "sample_lines": [ { "line": 5, "text": "* This file is part of JS8Call." }, { "line": 16249, "text": "{\"VSYNC\", 5, 146064}," }, { "line": 21073, "text": "{\"UUDECODE\", 8, 212134}," }, { "line": 23617, "text": "{\"UNPACKS\", 7, 238679}," }, { "line": 23618, "text": "{\"UNPACKING\", 9, 69270}," }, { "line": 23619, "text": "{\"UNPACKED\", 8, 92955}," } ] }, { "path": "JS8_JSC/JSC_map.cpp", "score": 1916, "hits": { "js8": 6, "decode": 6, "decoder": 2, "sync": 73, "ldpc": 1, "unpack": 5, "ft8": 1, "fsk": 14, "symbol": 21, "soft": 168, "snr": 5, "wav": 109, "message": 22 }, "sample_lines": [ { "line": 5, "text": "* This file is part of JS8Call." }, { "line": 95, "text": "{\"\\\\\", 1, 68}, // FYI: this used to be FT8 in JS8 1.0" }, { "line": 96, "text": "{\"\\n\", 1, 69}, // FYI: this used to be \"\\\" in JS8 1.0" }, { "line": 97, "text": "{\"JS8\", 3, 70}," }, { "line": 98, "text": "{\"JS8CALL\", 7, 71}," }, { "line": 100, "text": "72}, // FYI: this used to be JSQSO in JS8 1.0, it is now a substitute flag" } ] }, { "path": "JS8_Mainwindow/processDecodeEvent.cpp", "score": 1670, "hits": { "js8": 36, "decode": 118, "decoder": 4, "sync": 14, "ft8": 1, "jt9": 1, "snr": 19, "message": 36, "filename:decode": 1 }, "sample_lines": [ { "line": 5, "text": "* process decoded text" }, { "line": 8, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 10, "text": "void UI_Constructor::processDecodeEvent(JS8::Event::Variant const &event) {" }, { "line": 12, "text": "static qint32 syncStart = -1;" }, { "line": 18, "text": "if constexpr (std::is_same_v) {" }, { "line": 19, "text": "if (m_wideGraph->shouldDisplayDecodeAttempts()) {" } ] }, { "path": "JS8_UI/mainwindow.h", "score": 1487, "hits": { "js8": 87, "decode": 33, "decoder": 11, "symbol": 2, "snr": 9, "message": 114 }, "sample_lines": [ { "line": 5, "text": "#include \"JS8_Audio/AudioDevice.h\"" }, { "line": 6, "text": "#include \"JS8_Audio/NotificationAudio.h\"" }, { "line": 7, "text": "#include \"JS8_Audio/SoundInput.h\"" }, { "line": 8, "text": "#include \"JS8_Audio/SoundOutput.h\"" }, { "line": 9, "text": "#include \"JS8_Include/EventFilter.h\"" }, { "line": 10, "text": "#include \"JS8_Include/commons.h\"" } ] }, { "path": "JS8_Main/Varicode.cpp", "score": 1394, "hits": { "js8": 55, "decode": 8, "unpack": 76, "ft8": 2, "snr": 34, "message": 67 }, "sample_lines": [ { "line": 9, "text": "#include \"JS8_JSC/JSC.h\"" }, { "line": 10, "text": "#include \"JS8_Mode/DecodedText.h\"" }, { "line": 24, "text": "Q_DECLARE_LOGGING_CATEGORY(varicode_js8)" }, { "line": 29, "text": "// for FT8 freetext" }, { "line": 221, "text": "{\"@JS8NET\", nbasecall + 3}, // JS8NET group" }, { "line": 265, "text": "{\"@JS8\", nbasecall + 35}, // JS8 GROUP" } ] }, { "path": "CMakeLists.txt", "score": 1311, "hits": { "js8": 125, "decode": 2, "symbol": 1, "soft": 1, "message": 18 }, "sample_lines": [ { "line": 4, "text": "# JS8Call Build:" }, { "line": 38, "text": "set(CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/../js8libs)" }, { "line": 60, "text": "JS8Call" }, { "line": 68, "text": "set(PROJECT_HOMEPAGE https://groups.io/g/js8call)" }, { "line": 91, "text": "# define in js8call_config.h.in, which makes them available to the C/C++" }, { "line": 220, "text": "JS8CALL_VERSION=\\\"${PROJECT_VERSION}\\\"" } ] }, { "path": "JS8_UI/Configuration.cpp", "score": 1131, "hits": { "js8": 71, "sync": 12, "soft": 1, "snr": 12, "wav": 3, "message": 144 }, "sample_lines": [ { "line": 134, "text": "#include \"JS8_Include/Maidenhead.h\"" }, { "line": 135, "text": "#include \"JS8_Include/SettingsGroup.h\"" }, { "line": 136, "text": "#include \"JS8_Include/pimpl_impl.h\"" }, { "line": 137, "text": "#include \"JS8_Main/Bands.h\"" }, { "line": 138, "text": "#include \"JS8_Main/CallsignValidator.h\"" }, { "line": 139, "text": "#include \"JS8_Main/CandidateKeyFilter.h\"" } ] }, { "path": "vendor/Eigen/src/Core/arch/AVX512/PacketMath.h", "score": 980, "hits": { "unpack": 140 }, "sample_lines": [ { "line": 169, "text": "struct unpacket_traits {" }, { "line": 177, "text": "struct unpacket_traits {" }, { "line": 183, "text": "struct unpacket_traits {" }, { "line": 190, "text": "struct unpacket_traits {" }, { "line": 1108, "text": "__m512 T0 = _mm512_unpacklo_ps(kernel.packet[0], kernel.packet[1]);" }, { "line": 1109, "text": "__m512 T1 = _mm512_unpackhi_ps(kernel.packet[0], kernel.packet[1]);" } ] }, { "path": "JS8_Mode/DecodedText.cpp", "score": 887, "hits": { "js8": 20, "decode": 42, "decoder": 2, "unpack": 22, "snr": 7, "message": 32, "filename:decode": 1 }, "sample_lines": [ { "line": 2, "text": "* @file DecodedText.cpp" }, { "line": 3, "text": "* @brief Implementation of DecodedText class" }, { "line": 6, "text": "#include \"DecodedText.h\"" }, { "line": 7, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 8, "text": "#include " }, { "line": 17, "text": "// Quality level below which we'll consider a decode to be suspect;" } ] }, { "path": "JS8_Mainwindow/UI_Constructor.cpp", "score": 881, "hits": { "js8": 43, "decode": 15, "decoder": 8, "snr": 1, "message": 132 }, "sample_lines": [ { "line": 4, "text": "* constructs and connects UI elements to the JS8 \"engine\"" }, { "line": 7, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 8, "text": "#include \"JS8_UI/styles.h\"" }, { "line": 29, "text": "m_rigErrorMessageBox{JS8MessageBox::Critical, tr(\"Rig Control Error\")," }, { "line": 30, "text": "JS8MessageBox::Cancel | JS8MessageBox::Ok |" }, { "line": 31, "text": "JS8MessageBox::Retry}," } ] }, { "path": "JS8_Mode/JS8Submode.cpp", "score": 871, "hits": { "js8": 51, "decode": 6, "symbol": 32, "snr": 11, "filename:js8": 1 }, "sample_lines": [ { "line": 2, "text": "* @file JS8Submode.cpp" }, { "line": 3, "text": "* @brief Implementation of JS8 submode parameter inquiry functions" }, { "line": 5, "text": "#include \"JS8Submode.h\"" }, { "line": 6, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 7, "text": "#include \"JS8_Main/Varicode.h\"" }, { "line": 17, "text": "Q_DECLARE_LOGGING_CATEGORY(js8submode_js8)" } ] }, { "path": "JS8_Mainwindow/networkMessage.cpp", "score": 827, "hits": { "js8": 33, "decode": 13, "decoder": 13, "snr": 5, "message": 125, "filename:message": 1 }, "sample_lines": [ { "line": 9, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 13, "text": "* This function acts as the primary router for the JS8Call API. It handles" }, { "line": 28, "text": "qCDebug(mainwindow_js8) << \"try processing network message\" << type << id;" }, { "line": 108, "text": "\"JS8\", // mode" }, { "line": 112, "text": "m_decoderBusy, // decoding (match WSJT-X: decoder busy only)" }, { "line": 158, "text": "// STATION refers to JS8Call station settings" } ] }, { "path": "vendor/sqlite3/shell.c", "score": 812, "hits": { "decode": 18, "sync": 55, "symbol": 17, "soft": 2, "message": 95 }, "sample_lines": [ { "line": 1110, "text": "static int decodeUtf8(const unsigned char *z, int *pU){" }, { "line": 1146, "text": "int len = decodeUtf8(&a[i], &u);" }, { "line": 1180, "text": "int len = decodeUtf8(a+i, &u);" }, { "line": 5273, "text": "/* Decode base64 text into a byte buffer. */" }, { "line": 5292, "text": "/* Treat dark non-digits as pad, but they terminate decode too. */" }, { "line": 5456, "text": "** (aka \"group\") length maps 1-to-1 to the decoded binary length." } ] }, { "path": "vendor/Eigen/src/Core/arch/SSE/PacketMath.h", "score": 798, "hits": { "unpack": 114 }, "sample_lines": [ { "line": 84, "text": "EIGEN_STRONG_INLINE Packet4f vec4f_unpacklo(const Packet4f& a, const Packet4f& b)" }, { "line": 86, "text": "return Packet4f(_mm_unpacklo_ps(a,b));" }, { "line": 88, "text": "EIGEN_STRONG_INLINE Packet4f vec4f_unpackhi(const Packet4f& a, const Packet4f& b)" }, { "line": 90, "text": "return Packet4f(_mm_unpackhi_ps(a,b));" }, { "line": 98, "text": "EIGEN_STRONG_INLINE Packet2d vec2d_unpacklo(const Packet2d& a, const Packet2d& b)" }, { "line": 100, "text": "return Packet2d(_mm_unpacklo_pd(a,b));" } ] }, { "path": "JS8_Mode/Decoder.cpp", "score": 784, "hits": { "js8": 8, "decode": 32, "decoder": 32, "filename:decode": 1, "filename:decoder": 1 }, "sample_lines": [ { "line": 2, "text": "* @file Decoder.cpp" }, { "line": 3, "text": "* @brief Implementation of the JS8 decoder and worker classes" }, { "line": 7, "text": "#include \"Decoder.h\"" }, { "line": 8, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 13, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8)" }, { "line": 18, "text": "Decoder::Decoder(QObject * parent)" } ] }, { "path": "JS8_UDP/WSJTXMessageClient.cpp", "score": 739, "hits": { "js8": 21, "decode": 14, "sync": 1, "snr": 8, "message": 181, "filename:message": 1 }, "sample_lines": [ { "line": 2, "text": "* @brief WSJT-X compatible message client for JS8Call" }, { "line": 5, "text": "* communication. It allows JS8Call to send and receive messages compatible" }, { "line": 8, "text": "* Based on WSJT-X MessageClient but adapted for JS8Call." }, { "line": 12, "text": "#include \"JS8_Include/pimpl_impl.h\"" }, { "line": 13, "text": "#include \"JS8_Main/qt_helpers.h\"" }, { "line": 34, "text": "Q_LOGGING_CATEGORY(wsjtx_js8, \"wsjtx.js8\", QtWarningMsg)" } ] }, { "path": "tools/tracking_diag.cpp", "score": 727, "hits": { "js8": 25, "decode": 36, "decoder": 13, "sync": 1, "symbol": 1, "snr": 19, "message": 8 }, "sample_lines": [ { "line": 1, "text": "// Diagnostic harness for JS8 frequency/timing tracking." }, { "line": 3, "text": "// runs the decoder twice (tracking disabled vs enabled), and prints outcomes." }, { "line": 10, "text": "// fftw_mutex) that JS8.cpp expects." }, { "line": 11, "text": "// - Tracking is controlled via env vars: JS8_DISABLE_FREQ_TRACKING," }, { "line": 12, "text": "// JS8_DISABLE_TIMING_TRACKING." }, { "line": 30, "text": "#include \"JS8_Include/commons.h\"" } ] }, { "path": "JS8_UI/WideGraph.cpp", "score": 611, "hits": { "js8": 18, "decode": 22, "sync": 35, "message": 5 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_Include/EventFilter.h\"" }, { "line": 9, "text": "#include \"JS8_Include/SettingsGroup.h\"" }, { "line": 10, "text": "#include \"JS8_Main/DriftingDateTime.h\"" }, { "line": 11, "text": "#include \"JS8_Main/JS8MessageBox.h\"" }, { "line": 12, "text": "#include \"JS8_Main/Varicode.h\"" }, { "line": 28, "text": "Q_DECLARE_LOGGING_CATEGORY(widegraph_js8)" } ] }, { "path": "JS8_Include/commons.h", "score": 602, "hits": { "js8": 40, "decode": 18, "sync": 4, "symbol": 6 }, "sample_lines": [ { "line": 11, "text": "#define JS8_NSPS 6192" }, { "line": 12, "text": "#define JS8_NSMAX 6827" }, { "line": 13, "text": "#define JS8_NTMAX 60" }, { "line": 14, "text": "#define JS8_RX_SAMPLE_RATE 12000" }, { "line": 15, "text": "#define JS8_RX_SAMPLE_SIZE (JS8_NTMAX * JS8_RX_SAMPLE_RATE)" }, { "line": 17, "text": "#define JS8_RING_BUFFER 1 // use a ring buffer instead of clearing the decode frames" } ] }, { "path": "vendor/sqlite3/sqlite3.h", "score": 571, "hits": { "sync": 51, "symbol": 8, "soft": 25, "message": 37 }, "sample_lines": [ { "line": 503, "text": "#define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8))" }, { "line": 504, "text": "#define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5<<8))" }, { "line": 698, "text": "** CAPI3REF: Synchronization Type Flags" }, { "line": 700, "text": "** When SQLite invokes the xSync() method of an" }, { "line": 704, "text": "** When the SQLITE_SYNC_DATAONLY flag is used, it means that the" }, { "line": 705, "text": "** sync operation only needs to flush data to mass storage. Inode" } ] }, { "path": "tools/whitening_diag.cpp", "score": 533, "hits": { "js8": 19, "decode": 26, "decoder": 11, "sync": 1, "snr": 12, "message": 2 }, "sample_lines": [ { "line": 1, "text": "// Diagnostic harness for JS8 whitening / noise estimation." }, { "line": 3, "text": "// runs the decoder twice (whitening OFF vs ON), and prints a concise summary." }, { "line": 9, "text": "// globals (dec_data, specData, fftw_mutex) that JS8 expects." }, { "line": 25, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 26, "text": "#include \"JS8_Mode/JS8.h\"" }, { "line": 28, "text": "// Provide the globals expected by JS8.cpp" } ] }, { "path": "JS8_UDP/NetworkMessage.h", "score": 529, "hits": { "js8": 1, "decode": 32, "decoder": 1, "jt9": 1, "symbol": 2, "snr": 3, "wav": 1, "message": 102, "filename:message": 1 }, "sample_lines": [ { "line": 177, "text": "* after an old decodes replay sequence (see Replay below)," }, { "line": 209, "text": "* Decode Out 2 quint32" }, { "line": 221, "text": "* The decode message is sent when a new decode is completed, in" }, { "line": 223, "text": "* to a \"Replay\" message where each old decode in the \"Band" }, { "line": 227, "text": "* confidence decodes are flagged in protocols where the decoder" }, { "line": 228, "text": "* has knows that a decode has a higher than normal probability" } ] }, { "path": "JS8_UDP/WSJTXMessageMapper.cpp", "score": 527, "hits": { "js8": 24, "decode": 13, "snr": 7, "message": 69, "filename:message": 1 }, "sample_lines": [ { "line": 5, "text": "* and map them to JS8Call actions." }, { "line": 8, "text": "* @param main_window Main window instance for accessing JS8Call state" }, { "line": 13, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 19, "text": "Q_LOGGING_CATEGORY(wsjtx_mapper_js8, \"wsjtx.mapper.js8\", QtWarningMsg)" }, { "line": 38, "text": "* Maps JS8Call's status information to WSJT-X Status message format and" }, { "line": 58, "text": "qCDebug(wsjtx_mapper_js8)" } ] }, { "path": "vendor/Eigen/src/Core/arch/AVX/PacketMath.h", "score": 518, "hits": { "unpack": 74 }, "sample_lines": [ { "line": 217, "text": "template<> struct unpacket_traits {" }, { "line": 224, "text": "template<> struct unpacket_traits {" }, { "line": 229, "text": "template<> struct unpacket_traits { typedef int type; typedef Packet4i half; enum {size=8, alignment=Aligned32, vectorizable=false, masked_load_available=false, masked" }, { "line": 230, "text": "template<> struct unpacket_traits { typedef bfloat16 type; typedef Packet8bf half; enum {size=8, alignment=Aligned16, vectorizable=true, masked_load_available=false, mas" }, { "line": 599, "text": "// return _mm256_unpacklo_ps(tmp,tmp);" }, { "line": 864, "text": "__m256 T0 = _mm256_unpacklo_ps(kernel.packet[0], kernel.packet[1]);" } ] }, { "path": "vendor/Eigen/src/Core/products/GeneralBlockPanelKernel.h", "score": 511, "hits": { "unpack": 73 }, "sample_lines": [ { "line": 383, "text": "typename unpacket_traits::half>::half>::type \\" }, { "line": 390, "text": "typename unpacket_traits::half>::half>::type \\" }, { "line": 397, "text": "typename unpacket_traits::half>::half>::type \\" }, { "line": 404, "text": "typename unpacket_traits::half>::half>::type \\" }, { "line": 408, "text": "* real*real: unpack rhs to constant packets, ..." }, { "line": 410, "text": "* cd*cd : unpack rhs to (b_r,b_r), (b_i,b_i), mul to get (a_r b_r,a_i b_r) (a_r b_i,a_i b_i)," } ] }, { "path": "JS8_Mainwindow/processCommandActivity.cpp", "score": 446, "hits": { "js8": 23, "snr": 32, "message": 60 }, "sample_lines": [ { "line": 5, "text": "* processes JS8 commands" }, { "line": 8, "text": "#include \"JS8_Main/HBBlockingDB.h\"" }, { "line": 9, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 37, "text": "qCDebug(mainwindow_js8)" }, { "line": 117, "text": "// PROCESS @JS8NET, @APRSIS, AND OTHER GROUP SPOTS FOR EVERYONE" }, { "line": 145, "text": "bool isLast = (d.bits & Varicode::JS8CallLast) == Varicode::JS8CallLast;" } ] }, { "path": "JS8_Main/JS8MessageBox.cpp", "score": 442, "hits": { "js8": 23, "message": 34, "filename:js8": 1, "filename:message": 1 }, "sample_lines": [ { "line": 2, "text": "* @file JS8MessageBox.cpp" }, { "line": 6, "text": "#include \"JS8MessageBox.h\"" }, { "line": 13, "text": "JS8MessageBox::JS8MessageBox(QWidget *parent) : QMessageBox{parent} {" }, { "line": 17, "text": "JS8MessageBox::JS8MessageBox(Icon icon, QString const &text," }, { "line": 24, "text": "void JS8MessageBox::about_message(QWidget *parent, QString const &text) {" }, { "line": 28, "text": "void JS8MessageBox::about_Qt_message(QWidget *parent) {" } ] }, { "path": "vendor/Eigen/src/Core/ArithmeticSequence.h", "score": 415, "hits": { "symbol": 83 }, "sample_lines": [] }, { "path": "JS8_Main/main.cpp", "score": 362, "hits": { "js8": 29, "message": 36 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8MessageBox.h\"" }, { "line": 9, "text": "#include \"JS8_Include/SettingsGroup.h\"" }, { "line": 10, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 11, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 12, "text": "#include \"JS8_UI/styles.h\"" }, { "line": 45, "text": "Q_DECLARE_LOGGING_CATEGORY(main_js8)" } ] }, { "path": "JS8_Mode/DecodedText.h", "score": 352, "hits": { "js8": 2, "decode": 15, "decoder": 1, "unpack": 12, "snr": 4, "message": 6, "filename:decode": 1 }, "sample_lines": [ { "line": 3, "text": "* Class to handle the formatted string as returned from the decoder" }, { "line": 8, "text": "#ifndef DECODEDTEXT_H" }, { "line": 9, "text": "#define DECODEDTEXT_H" }, { "line": 11, "text": "#include \"JS8.h\"" }, { "line": 16, "text": "class DecodedText {" }, { "line": 20, "text": "explicit DecodedText(JS8::Event::Decoded const &);" } ] }, { "path": "JS8_Mode/JS8.h", "score": 336, "hits": { "js8": 5, "decode": 13, "decoder": 2, "sync": 5, "ft8": 1, "snr": 1, "message": 1, "filename:js8": 1 }, "sample_lines": [ { "line": 1, "text": "#ifndef __JS8" }, { "line": 2, "text": "#define __JS8" }, { "line": 12, "text": "namespace JS8 {" }, { "line": 16, "text": "// JS8 originally used the same Costas arrays as FT8 did, and so" }, { "line": 43, "text": "struct DecodeStarted {" }, { "line": 47, "text": "struct SyncStart {" } ] }, { "path": "vendor/Eigen/src/Core/GenericPacketMath.h", "score": 336, "hits": { "unpack": 48 }, "sample_lines": [ { "line": 132, "text": "template struct unpacket_traits" }, { "line": 146, "text": "template struct unpacket_traits : unpacket_traits { };" }, { "line": 179, "text": "typedef typename unpacket_traits::type Scalar;" }, { "line": 599, "text": "pload(const typename unpacket_traits::type* from) { return *from; }" }, { "line": 603, "text": "ploadu(const typename unpacket_traits::type* from) { return *from; }" }, { "line": 610, "text": "typename enable_if::masked_load_available, Packet>::type" } ] }, { "path": "JS8_Mode/JS8Submode.h", "score": 329, "hits": { "js8": 14, "decode": 2, "symbol": 10, "snr": 1, "filename:js8": 1 }, "sample_lines": [ { "line": 1, "text": "#ifndef JS8_SUBMODE_HPP_" }, { "line": 2, "text": "#define JS8_SUBMODE_HPP_" }, { "line": 4, "text": "#include \"JS8_Mode/JS8.h\"" }, { "line": 10, "text": "namespace JS8::Submode {" }, { "line": 22, "text": "// will throw if provided with an invalid JS8 submode." }, { "line": 29, "text": "// Running JS8Call with the environment variable" } ] }, { "path": "JS8_Mode/Decoder.h", "score": 324, "hits": { "js8": 2, "decode": 7, "decoder": 7, "filename:decode": 1, "filename:decoder": 1 }, "sample_lines": [ { "line": 1, "text": "#ifndef DECODER_H" }, { "line": 2, "text": "#define DECODER_H" }, { "line": 8, "text": "#include \"JS8_Main/ProcessThread.h\"" }, { "line": 37, "text": "class Decoder : public QObject {" }, { "line": 40, "text": "Decoder(QObject *parent = nullptr);" }, { "line": 41, "text": "~Decoder();" } ] }, { "path": "vendor/Eigen/src/Core/arch/AltiVec/PacketMath.h", "score": 322, "hits": { "unpack": 46 }, "sample_lines": [ { "line": 74, "text": "#define __UNPACK_TYPE__(PACKETNAME) typename unpacket_traits::type" }, { "line": 326, "text": "template<> struct unpacket_traits" }, { "line": 333, "text": "template<> struct unpacket_traits" }, { "line": 339, "text": "template<> struct unpacket_traits" }, { "line": 345, "text": "template<> struct unpacket_traits" }, { "line": 352, "text": "template<> struct unpacket_traits" } ] }, { "path": "vendor/Eigen/src/UmfPackSupport/UmfPackSupport.h", "score": 310, "hits": { "symbol": 62 }, "sample_lines": [] }, { "path": "JS8_Mainwindow/initializeDummyData.cpp", "score": 304, "hits": { "js8": 24, "decode": 2, "unpack": 3, "snr": 5, "message": 6 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 20, "text": "qCDebug(mainwindow_js8) << all;" }, { "line": 21, "text": "qCDebug(mainwindow_js8) << JSC::decompress(all) << (JSC::decompress(all) == \"HELLO WORLD \");" }, { "line": 87, "text": "qCDebug(mainwindow_js8) << \"select\" << c.selectionStart() << c.selectionEnd();" }, { "line": 145, "text": "// processDecodedLine(\"223000 -15 -0.3 1681 B 6t++yk+aJbaE 6 \\n\");" }, { "line": 158, "text": "qCDebug(mainwindow_js8) << \"test inbox opened\"" } ] }, { "path": "JS8_Mode/soft_combiner.h", "score": 286, "hits": { "js8": 9, "decode": 8, "decoder": 5, "soft": 11, "filename:soft": 1 }, "sample_lines": [ { "line": 18, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);" }, { "line": 20, "text": "namespace js8 {" }, { "line": 22, "text": "* @brief Cache and combine repeated LLR frames for the same decode candidate." }, { "line": 25, "text": "* receptions accumulate LLRs to improve decode probability without changing" }, { "line": 27, "text": "* to the decoder's bit count." }, { "line": 58, "text": "qCDebug(decoder_js8)" } ] }, { "path": "JS8_Main/Varicode.h", "score": 286, "hits": { "js8": 9, "decode": 3, "unpack": 17, "ft8": 1, "snr": 3, "message": 19 }, "sample_lines": [ { "line": 25, "text": "JS8CallNormal = 0," }, { "line": 26, "text": "JS8CallFast = 1," }, { "line": 27, "text": "JS8CallTurbo = 2," }, { "line": 28, "text": "JS8CallSlow = 4," }, { "line": 29, "text": "JS8CallUltra = 8" }, { "line": 32, "text": "// frame type transmitted via itype and decoded by the ft8 decoded" } ] }, { "path": "JS8_Mode/ldpc_feedback.h", "score": 280, "hits": { "js8": 8, "decode": 3, "decoder": 1, "ldpc": 12, "filename:ldpc": 1 }, "sample_lines": [ { "line": 14, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);" }, { "line": 16, "text": "namespace js8 {" }, { "line": 18, "text": "* @brief LDPC erasure threshold config and feedback refinement helpers." }, { "line": 21, "text": "* refineLlrsWithLdpcFeedback shrinks/boosts LLRs using the decoded" }, { "line": 22, "text": "* codeword to retry LDPC. Used inside the JS8 decode loop between" }, { "line": 23, "text": "* LDPC passes." } ] }, { "path": "JS8_Main/MessageServer.cpp", "score": 280, "hits": { "js8": 15, "message": 53, "filename:message": 1 }, "sample_lines": [ { "line": 12, "text": "Q_DECLARE_LOGGING_CATEGORY(messageserver_js8)" }, { "line": 20, "text": "qCDebug(messageserver_js8)" }, { "line": 27, "text": "qCDebug(messageserver_js8)" }, { "line": 33, "text": "qCDebug(messageserver_js8)" }, { "line": 39, "text": "qCDebug(messageserver_js8)" }, { "line": 117, "text": "qCDebug(messageserver_js8) << \"MessageServer incomingConnection\" << handle;" } ] }, { "path": "JS8_Mode/Modulator.cpp", "score": 278, "hits": { "js8": 22, "sync": 4, "symbol": 6 }, "sample_lines": [ { "line": 6, "text": "#include \"JS8Submode.h\"" }, { "line": 7, "text": "#include \"JS8_Audio/SoundOutput.h\"" }, { "line": 8, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 9, "text": "#include \"JS8_Main/DriftingDateTime.h\"" }, { "line": 10, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 21, "text": "Q_DECLARE_LOGGING_CATEGORY(modulator_js8)" } ] }, { "path": "JS8_Mode/whitening_processor.h", "score": 270, "hits": { "js8": 9, "decode": 5, "decoder": 5, "symbol": 20 }, "sample_lines": [ { "line": 15, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);" }, { "line": 17, "text": "namespace js8 {" }, { "line": 19, "text": "* @brief Compute per-tone/symbol noise medians and whiten LLRs for a JS8 frame." }, { "line": 23, "text": "* templated on matrix dimensions, so it stays header-only; used inside the JS8" }, { "line": 24, "text": "* decoder per candidate." }, { "line": 102, "text": "qCDebug(decoder_js8).noquote() << oss.str().c_str();" } ] }, { "path": "JS8_Main/APRSISClient.cpp", "score": 267, "hits": { "js8": 21, "sync": 1, "message": 25 }, "sample_lines": [ { "line": 3, "text": "* @brief Implementation of APRS-IS client for JS8Call" }, { "line": 14, "text": "Q_DECLARE_LOGGING_CATEGORY(aprsisclient_js8)" }, { "line": 105, "text": "loginFrame = loginFrame.arg(\"JS8Call\");" }, { "line": 319, "text": "qCDebug(aprsisclient_js8)" }, { "line": 354, "text": "auto spotFrame = QString(\"%1>APJ8CL,qAS,%2:=%3/%4G#JS8 %5\\n\");" }, { "line": 427, "text": "qCDebug(aprsisclient_js8)" } ] }, { "path": "vendor/Eigen/src/Core/util/SymbolicIndex.h", "score": 260, "hits": { "symbol": 40, "filename:symbol": 1 }, "sample_lines": [] }, { "path": "JS8_Main/TxLoop.cpp", "score": 250, "hits": { "js8": 25 }, "sample_lines": [ { "line": 13, "text": "#include \"JS8_Mode/JS8Submode.h\"" }, { "line": 21, "text": "Q_DECLARE_LOGGING_CATEGORY(txloop_js8)" }, { "line": 26, "text": "m_submode{Varicode::JS8CallSlow}, m_active{false}," }, { "line": 36, "text": "qCDebug(txloop_js8) << m_name << \"Destruction of TX loop\";" }, { "line": 47, "text": "((qint64)1000) * JS8::Submode::period(m_submode);" }, { "line": 52, "text": "qCWarning(txloop_js8)" } ] }, { "path": "JS8_UDP/WSJTXMessageClient.h", "score": 246, "hits": { "js8": 3, "decode": 14, "snr": 4, "message": 34, "filename:message": 1 }, "sample_lines": [ { "line": 4, "text": "#include \"JS8_Include/pimpl_h.h\"" }, { "line": 5, "text": "#include \"JS8_Main/Radio.h\"" }, { "line": 29, "text": "* @param id Application identifier (e.g., \"JS8Call\")" }, { "line": 126, "text": "* @brief Send a Decode message" }, { "line": 128, "text": "* Sends information about a decoded message." }, { "line": 130, "text": "* @param is_new Whether this is a new decode" } ] }, { "path": "JS8_Main/JS8MessageBox.h", "score": 246, "hits": { "js8": 5, "soft": 1, "message": 24, "filename:js8": 1, "filename:message": 1 }, "sample_lines": [ { "line": 7, "text": "* JS8MessageBox - wrap the Qt QMessageBox class to give a more platform" }, { "line": 11, "text": "* We dogde the resulting problems by calling our MessageBox JS8MessageBox." }, { "line": 13, "text": "class JS8MessageBox : public QMessageBox {" }, { "line": 15, "text": "explicit JS8MessageBox(QWidget *parent = nullptr);" }, { "line": 16, "text": "explicit JS8MessageBox(Icon, QString const &text," } ] }, { "path": "JS8_UI/MessagePanel.cpp", "score": 244, "hits": { "js8": 4, "message": 90, "filename:message": 1 }, "sample_lines": [ { "line": 2, "text": "#include \"JS8_Include/EventFilter.h\"" }, { "line": 3, "text": "#include \"JS8_Main/Radio.h\"" }, { "line": 4, "text": "#include \"JS8_Widgets/DateTableWidgetItem.h\"" }, { "line": 5, "text": "#include \"JS8_Widgets/SemiSortableHeader.h\"" } ] }, { "path": "JS8_Main/TransmitTextEdit.cpp", "score": 226, "hits": { "js8": 10, "sync": 18 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 9, "text": "#include \"JS8_Include/pimpl_impl.h\"" }, { "line": 22, "text": "Q_DECLARE_LOGGING_CATEGORY(transmittextedit_js8)" }, { "line": 27, "text": "#if JS8_ALLOW_EXTENDED" }, { "line": 39, "text": "#if JS8_ALLOW_UNICODE" }, { "line": 41, "text": "#elif JS8_ALLOW_EXTENDED" } ] }, { "path": "JS8_UDP/WSJTXMessageMapper.h", "score": 225, "hits": { "js8": 8, "decode": 8, "snr": 3, "message": 24, "filename:message": 1 }, "sample_lines": [ { "line": 4, "text": "#include \"JS8_Main/Radio.h\"" }, { "line": 15, "text": "* @brief Maps JS8Call events to WSJT-X protocol messages" }, { "line": 17, "text": "* This class translates JS8Call's internal event format to the WSJT-X binary" }, { "line": 18, "text": "* UDP protocol format, allowing JS8Call to communicate with WSJT-X and" }, { "line": 29, "text": "* @param main_window Main window instance for accessing JS8Call state" }, { "line": 39, "text": "* Maps JS8Call's status information to WSJT-X Status message format." } ] }, { "path": "vendor/Eigen/src/Core/arch/SYCL/PacketMath.h", "score": 222, "hits": { "unpack": 30, "soft": 3 }, "sample_lines": [ { "line": 33, "text": "const typename unpacket_traits::type, \\" }, { "line": 36, "text": "typedef typename unpacket_traits::type scalar; \\" }, { "line": 41, "text": "static_cast::type>(0)); \\" }, { "line": 63, "text": "const typename unpacket_traits::type, \\" }, { "line": 84, "text": "typename unpacket_traits::type> \\" }, { "line": 99, "text": "const typename unpacket_traits::type, \\" } ] }, { "path": "JS8_Network/PSKReporter.cpp", "score": 222, "hits": { "js8": 13, "sync": 1, "soft": 1, "snr": 7, "message": 30 }, "sample_lines": [ { "line": 13, "text": "#include \"JS8_Include/pimpl_impl.h\"" }, { "line": 14, "text": "#include \"JS8_Main/Bands.h\"" }, { "line": 15, "text": "#include \"JS8_Main/DriftingDateTime.h\"" }, { "line": 16, "text": "#include \"JS8_UI/Configuration.h\"" }, { "line": 39, "text": "Q_DECLARE_LOGGING_CATEGORY(pskreporter_js8)" }, { "line": 365, "text": "// handle re-opening asynchronously" } ] }, { "path": "JS8_UI/LogQSO.cpp", "score": 220, "hits": { "js8": 20, "fsk": 2, "message": 5 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_Include/Maidenhead.h\"" }, { "line": 9, "text": "#include \"JS8_Logbook/ADIF.h\"" }, { "line": 10, "text": "#include \"JS8_Main/Bands.h\"" }, { "line": 11, "text": "#include \"JS8_Main/DriftingDateTime.h\"" }, { "line": 12, "text": "#include \"JS8_Main/JS8MessageBox.h\"" }, { "line": 27, "text": "Q_DECLARE_LOGGING_CATEGORY(logqso_js8)" } ] }, { "path": "JS8_Mainwindow/initializeGroupMessage.cpp", "score": 202, "hits": { "js8": 16, "message": 9, "filename:message": 1 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 26, "text": "cmd.submode = Varicode::JS8CallNormal;" }, { "line": 40, "text": "cmd1.submode = Varicode::JS8CallNormal;" }, { "line": 52, "text": "cmd2.submode = Varicode::JS8CallNormal;" }, { "line": 60, "text": "qCDebug(mainwindow_js8) << \"Testing group messaging\";" }, { "line": 61, "text": "qCDebug(mainwindow_js8) << \"Test message ID: \" << mid;" } ] }, { "path": "JS8_UI/About.cpp", "score": 192, "hits": { "js8": 19, "message": 1 }, "sample_lines": [ { "line": 7, "text": "#include \"JS8_Main/revision_utils.h\"" }, { "line": 14, "text": "setWindowTitle(\"About JS8Call\");" }, { "line": 18, "text": "\"

About the JS8Call Development Team

\"" }, { "line": 19, "text": "\"

JS8Call is now being developed by the team that \"" }, { "line": 21, "text": "\"js8call starting in late 2024.
This team includes:
Chris \"" }, { "line": 25, "text": "\"The JS8Call code can be downloaded at \"" } ] }, { "path": "JS8_Mainwindow/processRxActivity.cpp", "score": 187, "hits": { "js8": 13, "snr": 5, "message": 21 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 17, "text": "qCDebug(mainwindow_js8)" }, { "line": 41, "text": "abs(d.offset - freqOffset) <= JS8::Submode::rxThreshold(d.submode);" }, { "line": 53, "text": "// qCDebug(mainwindow_js8) << \"should display compound too" }, { "line": 84, "text": "if ((d.bits & Varicode::JS8CallFirst) == Varicode::JS8CallFirst &&" }, { "line": 116, "text": "(d.bits & Varicode::JS8CallFirst) == Varicode::JS8CallFirst;" } ] }, { "path": "JS8_Transceiver/HamlibTransceiver.cpp", "score": 186, "hits": { "js8": 15, "fsk": 4, "message": 8 }, "sample_lines": [ { "line": 23, "text": "Q_DECLARE_LOGGING_CATEGORY(hamlibtransceiver_js8)" }, { "line": 53, "text": "qCCritical(hamlibtransceiver_js8, fmt, message.toLocal8Bit().data());" }, { "line": 57, "text": "qCWarning(hamlibtransceiver_js8, fmt, message.toLocal8Bit().data());" }, { "line": 61, "text": "qCDebug(hamlibtransceiver_js8, fmt, message.toLocal8Bit().data());" }, { "line": 167, "text": "if (hamlibtransceiver_js8().isDebugEnabled())" }, { "line": 169, "text": "else if (hamlibtransceiver_js8().isInfoEnabled())" } ] }, { "path": "vendor/Eigen/src/Core/arch/NEON/PacketMath.h", "score": 182, "hits": { "unpack": 26 }, "sample_lines": [ { "line": 129, "text": "EIGEN_STRONG_INLINE Packet4f vec4f_unpacklo(const Packet4f& a, const Packet4f& b)" }, { "line": 133, "text": "EIGEN_STRONG_INLINE Packet4f vec4f_unpackhi(const Packet4f& a, const Packet4f& b)" }, { "line": 458, "text": "template<> struct unpacket_traits" }, { "line": 472, "text": "template<> struct unpacket_traits" }, { "line": 486, "text": "template<> struct unpacket_traits" }, { "line": 499, "text": "template<> struct unpacket_traits" } ] }, { "path": "JS8_Main/Inbox.cpp", "score": 180, "hits": { "js8": 10, "message": 40 }, "sample_lines": [ { "line": 12, "text": "Q_DECLARE_LOGGING_CATEGORY(inbox_js8)" }, { "line": 148, "text": "// qCDebug(inbox_js8) << \"exec\" << sqlite3_expanded_sql(stmt);" }, { "line": 324, "text": "// qCDebug(inbox_js8) << \"exec \" << sqlite3_expanded_sql(stmt);" }, { "line": 400, "text": "// qCDebug(inbox_js8) << \"exec \" << sqlite3_expanded_sql(stmt);" }, { "line": 509, "text": "// qCDebug(inbox_js8) << \"exec \" << sqlite3_expanded_sql(stmt);" }, { "line": 582, "text": "// qCDebug(inbox_js8) << \"exec \" << sqlite3_expanded_sql(stmt);" } ] }, { "path": "vendor/Eigen/src/KLUSupport/KLUSupport.h", "score": 175, "hits": { "symbol": 35 }, "sample_lines": [] }, { "path": "JS8_Mainwindow/displayBandActivity.cpp", "score": 173, "hits": { "js8": 8, "snr": 31 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 104, "text": "if (lhsSubmode == Varicode::JS8CallSlow)" }, { "line": 106, "text": "if (rhsSubmode == Varicode::JS8CallSlow)" }, { "line": 206, "text": "if ((item.bits & Varicode::JS8CallLast) ==" }, { "line": 207, "text": "Varicode::JS8CallLast) {" }, { "line": 256, "text": "auto name = JS8::Submode::name(submode);" } ] }, { "path": "JS8_Main/MessageClient.cpp", "score": 170, "hits": { "js8": 5, "message": 48, "filename:message": 1 }, "sample_lines": [ { "line": 9, "text": "#include \"JS8_Include/pimpl_impl.h\"" }, { "line": 24, "text": "Q_DECLARE_LOGGING_CATEGORY(messageclient_js8)" }, { "line": 161, "text": "qCDebug(messageclient_js8)" }, { "line": 265, "text": "Q_LOGGING_CATEGORY(messageclient_js8, \"messageclient.js8\", QtWarningMsg)" } ] }, { "path": "JS8_Main/AprsInboundRelay.cpp", "score": 170, "hits": { "js8": 8, "message": 45 }, "sample_lines": [ { "line": 9, "text": "* When function is enabled in settings JS8Call will listen for APRS messages" }, { "line": 15, "text": "#include \"JS8_Main/DriftingDateTime.h\"" }, { "line": 16, "text": "#include \"JS8_Main/Radio.h\"" }, { "line": 17, "text": "#include \"JS8_UI/Configuration.h\"" }, { "line": 26, "text": "Q_DECLARE_LOGGING_CATEGORY(mainwindow_js8)" }, { "line": 102, "text": "qCDebug(mainwindow_js8)" } ] }, { "path": "vendor/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h", "score": 161, "hits": { "unpack": 23 }, "sample_lines": [ { "line": 31, "text": "typedef typename unpacket_traits::type Scalar;" }, { "line": 32, "text": "typedef typename unpacket_traits::integer_packet PacketI;" }, { "line": 41, "text": "typedef typename unpacket_traits::type Scalar;" }, { "line": 108, "text": "typedef typename unpacket_traits::integer_packet PacketI;" }, { "line": 109, "text": "typedef typename unpacket_traits::type Scalar;" }, { "line": 110, "text": "typedef typename unpacket_traits::type ScalarI;" } ] }, { "path": "JS8_Main/FrequencyList.cpp", "score": 156, "hits": { "js8": 15, "ft8": 1 }, "sample_lines": [ { "line": 3, "text": "* @brief Implementation of the JS8 standard operating frequencies" }, { "line": 7, "text": "#include \"JS8_Include/pimpl_impl.h\"" }, { "line": 8, "text": "#include \"JS8_Main/Bands.h\"" }, { "line": 31, "text": "{1843500, Modes::JS8, IARURegions::ALL, \"\"}, // 3.5 above" }, { "line": 32, "text": "{3578000, Modes::JS8, IARURegions::ALL, \"\"}, // 5 above" }, { "line": 33, "text": "{5363000, Modes::JS8," } ] }, { "path": "JS8_Main/MultiSettings.cpp", "score": 152, "hits": { "js8": 9, "sync": 6, "message": 10 }, "sample_lines": [ { "line": 7, "text": "#include \"JS8MessageBox.h\"" }, { "line": 8, "text": "#include \"JS8_Include/SettingsGroup.h\"" }, { "line": 9, "text": "#include \"JS8_Include/pimpl_impl.h\"" }, { "line": 338, "text": "settings_.sync();" }, { "line": 388, "text": "settings_.sync();" }, { "line": 544, "text": "settings_.sync();" } ] }, { "path": "JS8_Mainwindow/processBufferedActivity.cpp", "score": 148, "hits": { "js8": 8, "message": 34 }, "sample_lines": [ { "line": 7, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 33, "text": "buffer.msgs.last().bits |= Varicode::JS8CallLast;" }, { "line": 49, "text": "if ((buffer.msgs.last().bits & Varicode::JS8CallLast) !=" }, { "line": 50, "text": "Varicode::JS8CallLast) {" }, { "line": 85, "text": "buffer.cmd.bits |= Varicode::JS8CallLast;" }, { "line": 90, "text": "qCDebug(mainwindow_js8)" } ] }, { "path": "JS8_Mainwindow/confirmThenEnqueueMessage.cpp", "score": 147, "hits": { "js8": 1, "decode": 2, "decoder": 2, "sync": 1, "message": 37, "filename:message": 1 }, "sample_lines": [ { "line": 6, "text": "* kept in sync on pending autoreply transmissions." }, { "line": 10, "text": "#include \"../JS8_UI/mainwindow.h\"" }, { "line": 15, "text": "* Called from the decoder thread; all Qt and network operations are marshalled" }, { "line": 37, "text": "// CRITICAL: called from decoder thread → QTimer/sendNetworkMessage must run in GUI thread" } ] }, { "path": "JS8_Mainwindow/buildQueryMenu.cpp", "score": 146, "hits": { "js8": 1, "snr": 12, "message": 50 }, "sample_lines": [ { "line": 7, "text": "#include \"JS8_UI/mainwindow.h\"" } ] }, { "path": "JS8_Transceiver/HRDTransceiver.cpp", "score": 144, "hits": { "js8": 8, "fsk": 4, "message": 22 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_Network/NetworkServerLookup.h\"" }, { "line": 19, "text": "Q_DECLARE_LOGGING_CATEGORY(hrdtransceiver_js8)" }, { "line": 891, "text": "bool quiet{hrdtransceiver_js8().isDebugEnabled()};" }, { "line": 893, "text": "qCDebug(hrdtransceiver_js8) << \"+++++++ poll dump +++++++\";" }, { "line": 894, "text": "qCDebug(hrdtransceiver_js8) << \"reversed:\" << reversed_;" }, { "line": 920, "text": "qCDebug(hrdtransceiver_js8) << \"------- poll dump -------\";" } ] }, { "path": "JS8_Mainwindow/dataSink.cpp", "score": 142, "hits": { "js8": 11, "decode": 3, "decoder": 1 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 80, "text": "constexpr int NMAX = JS8_NTMAX * 12000;" }, { "line": 92, "text": "m_ihsym = int((float)frames / (float)JS8_NSPS) * 2;" }, { "line": 97, "text": "// qCDebug(mainwindow_js8) << \"k\" << k << \"k0\" << k0 << \"delta\" << k-k0;" }, { "line": 104, "text": "int const cycle = JS8::Submode::computeCycleForDecode(m_nSubMode, k);" }, { "line": 107, "text": "qCDebug(decoder_js8) << \"period loop, resetting ssum\";" } ] }, { "path": "vendor/Eigen/src/Core/util/IndexedViewHelper.h", "score": 140, "hits": { "symbol": 28 }, "sample_lines": [] }, { "path": "JS8_Main/Message.cpp", "score": 130, "hits": { "message": 53, "filename:message": 1 }, "sample_lines": [] }, { "path": "JS8_UI/WideGraph.h", "score": 129, "hits": { "js8": 2, "decode": 4, "sync": 11 }, "sample_lines": [ { "line": 5, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 6, "text": "#include \"JS8_Main/WF.h\"" }, { "line": 45, "text": "bool isAutoSyncEnabled() const;" }, { "line": 47, "text": "bool shouldDisplayDecodeAttempts() const;" }, { "line": 48, "text": "bool shouldAutoSyncSubmode(int) const;" }, { "line": 54, "text": "void drawDecodeLine(QColor const &, int, int);" } ] }, { "path": "CMake/Modules/GetPrerequisites.cmake", "score": 124, "hits": { "soft": 7, "message": 48 }, "sample_lines": [] }, { "path": "JS8_Mainwindow/displayCallActivity.cpp", "score": 124, "hits": { "js8": 6, "snr": 16, "message": 8 }, "sample_lines": [ { "line": 8, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 143, "text": "if (lhs == Varicode::JS8CallSlow)" }, { "line": 145, "text": "if (rhs == Varicode::JS8CallSlow)" }, { "line": 295, "text": "auto name = JS8::Submode::name(d.submode);" }, { "line": 296, "text": "auto modeItem = (name == \"JS8 40\" || name == \"JS8 60\")" } ] } ], "next_action": "Inspect top ranked files for the smallest RX-only WAV-to-message path; do not use GUI/API/TX code." } [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260527T084314Z_clone-audit.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260527T084314Z_clone-audit_manifest.json [webftr-js8-lab] audit exit_code=0 ========== FULL-AUDIT STEP 3/4: FOCUSED RX SOURCE MAP ========== [webftr-js8-lab] command=source-map [webftr-js8-lab] root=/decoders/js8_decoder [webftr-js8-lab] log=/decoders/js8_decoder/logs/20260527T085141Z_source-map.log [webftr-js8-lab] manifest=/decoders/js8_decoder/logs/20260527T085141Z_source-map_manifest.json [webftr-js8-lab] utc=20260527T085141Z [webftr-js8-lab] rx-only guard: no TX / no PTT / no Tune / no Send [webftr-js8-lab] focused RX source-map source: /decoders/js8_decoder/runtime/src/JS8Call-improved [webftr-js8-lab] JSON output: /decoders/js8_decoder/logs/20260527T085141Z_source_map_output.json [webftr-js8-lab] JSON timeout guard: 180s { "ok": true, "source_dir": "/decoders/js8_decoder/runtime/src/JS8Call-improved", "scanned_files": 542, "source_map_version": "step48-source-decoder-path-audit", "rx_only_guard": { "tx": false, "ptt": false, "tune": false, "send": false, "js8call_runtime_control": false }, "audit_conclusion": { "smallest_likely_rx_core": [ "JS8_Mode/JS8.cpp", "JS8_Mode/JS8.h", "JS8_Mode/Decoder.cpp", "JS8_Mode/Decoder.h", "JS8_Mode/DecodedText.cpp", "JS8_Mode/DecodedText.h", "JS8_Mode/JS8Submode.cpp", "JS8_Mode/JS8Submode.h", "JS8_Mode/soft_combiner.h", "JS8_Mode/ldpc_feedback.h", "JS8_Mode/whitening_processor.h", "JS8_Include/commons.h", "JS8_Main/Varicode.cpp", "JS8_Main/Varicode.h", "JS8_JSC/JSC_map.cpp", "JS8_JSC/JSC_list.cpp" ], "missing_expected_files": [], "excluded_by_design": [ "vendor/", "JS8_UI/", "JS8_Mainwindow/", "JS8_UDP/", "JS8_Network/", "JS8_Transceiver/" ], "note": "This is a source-map for a future RX-only decoder extraction/reimplementation. It does not compile or link JS8Call and does not start JS8Call." }, "proposed_build_order": [ { "phase": "audio_ingest", "purpose": "read mono 12 kHz WAV blocks and expose stable sample windows", "local_lab_files": [ "wav_inspect.py", "decode_js8_lab.py" ], "reference_files": [ "JS8_Include/commons.h" ] }, { "phase": "sync_and_symbol_candidates", "purpose": "locate JS8 frames and extract soft symbol metrics without GUI/runtime", "reference_files": [ "JS8_Mode/JS8.cpp", "JS8_Mode/Decoder.cpp", "JS8_Mode/JS8Submode.cpp" ] }, { "phase": "fec_soft_decode", "purpose": "LDPC/FEC path and soft-combining needed before text messages exist", "reference_files": [ "JS8_Mode/ldpc_feedback.h", "JS8_Mode/soft_combiner.h", "JS8_Mode/whitening_processor.h" ] }, { "phase": "message_unpack", "purpose": "turn decoded bits into JS8 text and WebFTR decodes[] rows", "reference_files": [ "JS8_Main/Varicode.cpp", "JS8_Main/Varicode.h", "JS8_Mode/DecodedText.cpp", "JS8_Mode/DecodedText.h", "JS8_JSC/JSC_map.cpp", "JS8_JSC/JSC_list.cpp" ] } ], "core_files": [ { "path": "JS8_Mode/JS8.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 1608, "hits": { "decode": 142, "decoder": 36, "sync": 120, "ldpc": 23, "soft": 8, "symbol": 37, "snr": 14, "js8": 111 }, "tx_risk_terms": { "tx": 24, "send": 2, "rig": 6, "cat": 13 }, "includes": [ "JS8.h", "JS8_Include/commons.h", "JS8_Mode/FrequencyTracker.h", "JS8_Mode/whitening_processor.h", "ldpc_feedback.h", "soft_combiner.h", "QDebug", "QLoggingCategory", "QtGlobal", "algorithm", "atomic", "boost/crc.hpp", "boost/math/ccmath/round.hpp", "boost/multi_index/key.hpp", "boost/multi_index/ordered_index.hpp", "boost/multi_index/ranked_index.hpp", "boost/multi_index_container.hpp", "chrono", "cmath", "complex", "concepts", "cstddef", "cstdint", "cstdlib", "fftw3.h", "initializer_list", "limits", "memory", "mutex", "numbers", "numeric", "optional", "sstream", "stdexcept", "string_view", "unordered_map", "utility", "vector", "vendor/Eigen/Dense", "JS8.moc" ], "interesting_symbols": [ { "line": 8, "text": "#include \"JS8.h\"" }, { "line": 9, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 10, "text": "#include \"JS8_Mode/FrequencyTracker.h\"" }, { "line": 11, "text": "#include \"JS8_Mode/whitening_processor.h\"" }, { "line": 12, "text": "#include \"ldpc_feedback.h\"" }, { "line": 50, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);" }, { "line": 187, "text": "constexpr int NS = 21; // Sync symbols (3 @ Costas 7x7)" }, { "line": 189, "text": "constexpr float ASYNCMIN = 1.5f; // Minimum sync" }, { "line": 215, "text": "/* A MODE DECODER */" }, { "line": 219, "text": "inline static constexpr int NSUBMODE = 0;" } ] }, { "path": "JS8_Mode/JS8.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 256, "hits": { "decode": 13, "decoder": 2, "sync": 5, "snr": 1, "js8": 5 }, "tx_risk_terms": { "rig": 2 }, "includes": [ "QObject", "QSemaphore", "QThread", "array", "functional", "string", "variant" ], "interesting_symbols": [ { "line": 1, "text": "#ifndef __JS8" }, { "line": 2, "text": "#define __JS8" }, { "line": 12, "text": "namespace JS8 {" }, { "line": 43, "text": "struct DecodeStarted {" }, { "line": 44, "text": "int submodes;" }, { "line": 47, "text": "struct SyncStart {" }, { "line": 52, "text": "struct SyncState {" }, { "line": 53, "text": "enum class Type { CANDIDATE, DECODED } type;" }, { "line": 59, "text": "float decoded;" }, { "line": 60, "text": "} sync;" } ] }, { "path": "JS8_Mode/Decoder.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 392, "hits": { "decode": 32, "decoder": 32, "js8": 8 }, "tx_risk_terms": { "rig": 1, "cat": 3 }, "includes": [ "Decoder.h", "JS8_Include/commons.h", "QLoggingCategory", "QTimer" ], "interesting_symbols": [ { "line": 7, "text": "#include \"Decoder.h\"" }, { "line": 8, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 13, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8)" }, { "line": 18, "text": "Decoder::Decoder(QObject * parent)" }, { "line": 21, "text": "Decoder::~Decoder() {}" }, { "line": 24, "text": "void Decoder::lock() {" }, { "line": 29, "text": "void Decoder::unlock() {" }, { "line": 34, "text": "Worker *Decoder::createWorker() {" }, { "line": 38, "text": "connect(this, &Decoder::startWorker, worker, &Worker::start);" }, { "line": 39, "text": "connect(this, &Decoder::quitWorker, worker, &Worker::quit);" } ] }, { "path": "JS8_Mode/Decoder.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 225, "hits": { "decode": 7, "decoder": 7, "js8": 2 }, "tx_risk_terms": { "rig": 1, "cat": 2 }, "includes": [ "JS8_Main/ProcessThread.h", "QByteArray", "QLoggingCategory", "QPointer", "QProcess" ], "interesting_symbols": [ { "line": 1, "text": "#ifndef DECODER_H" }, { "line": 2, "text": "#define DECODER_H" }, { "line": 8, "text": "#include \"JS8_Main/ProcessThread.h\"" }, { "line": 37, "text": "class Decoder : public QObject {" }, { "line": 40, "text": "Decoder(QObject *parent = nullptr);" }, { "line": 41, "text": "~Decoder();" }, { "line": 88, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8)" }, { "line": 90, "text": "#endif // DECODER_H" } ] }, { "path": "JS8_Mode/DecodedText.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 447, "hits": { "decode": 42, "decoder": 2, "unpack": 22, "snr": 7, "js8": 20 }, "tx_risk_terms": { "tx": 3, "rig": 8, "cat": 1 }, "includes": [ "DecodedText.h", "JS8_Include/commons.h", "JS8_Main/Varicode.h", "QStringBuilder" ], "interesting_symbols": [ { "line": 6, "text": "#include \"DecodedText.h\"" }, { "line": 7, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 8, "text": "#include " }, { "line": 33, "text": "QChar submodeChar(int const submode) {" }, { "line": 34, "text": "switch (submode) {" }, { "line": 35, "text": "case Varicode::SubmodeType::JS8CallNormal:" }, { "line": 37, "text": "case Varicode::SubmodeType::JS8CallFast:" }, { "line": 39, "text": "case Varicode::SubmodeType::JS8CallTurbo:" }, { "line": 41, "text": "case Varicode::SubmodeType::JS8CallSlow:" }, { "line": 43, "text": "case Varicode::SubmodeType::JS8CallUltra:" } ] }, { "path": "JS8_Mode/DecodedText.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 282, "hits": { "decode": 15, "decoder": 1, "unpack": 12, "snr": 4, "js8": 2 }, "tx_risk_terms": {}, "includes": [ "JS8.h", "QString", "QStringList" ], "interesting_symbols": [ { "line": 8, "text": "#ifndef DECODEDTEXT_H" }, { "line": 9, "text": "#define DECODEDTEXT_H" }, { "line": 11, "text": "#include \"JS8.h\"" }, { "line": 16, "text": "class DecodedText {" }, { "line": 20, "text": "explicit DecodedText(JS8::Event::Decoded const &);" }, { "line": 21, "text": "explicit DecodedText(QString const &frame, int bits, int submode);" }, { "line": 40, "text": "int submode() const { return submode_; }" }, { "line": 53, "text": "bool tryUnpackFastData(QString const &);" }, { "line": 54, "text": "bool tryUnpackData(QString const &);" }, { "line": 55, "text": "bool tryUnpackHeartbeat(QString const &);" } ] }, { "path": "JS8_Mode/JS8Submode.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 458, "hits": { "decode": 6, "symbol": 32, "snr": 11, "js8": 51 }, "tx_risk_terms": { "tx": 13, "transmit": 1, "rig": 4, "cat": 4 }, "includes": [ "JS8Submode.h", "JS8_Include/commons.h", "JS8_Main/Varicode.h", "QLoggingCategory", "concepts" ], "interesting_symbols": [ { "line": 5, "text": "#include \"JS8Submode.h\"" }, { "line": 6, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 7, "text": "#include \"JS8_Main/Varicode.h\"" }, { "line": 17, "text": "Q_DECLARE_LOGGING_CATEGORY(js8submode_js8)" }, { "line": 19, "text": "namespace JS8::Submode {" }, { "line": 66, "text": "m_samplesForSymbols(JS8_NUM_SYMBOLS * samplesForOneSymbol)," }, { "line": 67, "text": "m_bandwidth(8 * JS8_RX_SAMPLE_RATE / samplesForOneSymbol)," }, { "line": 68, "text": "m_samplesPerPeriod(JS8_RX_SAMPLE_RATE * period)," }, { "line": 69, "text": "m_toneSpacing(JS8_RX_SAMPLE_RATE / (double)samplesForOneSymbol)," }, { "line": 72, "text": "(0.5 + startDelayMS / 1000.0) * JS8_RX_SAMPLE_RATE))," } ] }, { "path": "JS8_Mode/JS8Submode.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 255, "hits": { "decode": 2, "symbol": 10, "snr": 1, "js8": 14 }, "tx_risk_terms": { "tx": 3, "transmit": 2, "send": 1 }, "includes": [ "JS8_Mode/JS8.h", "QString", "stdexcept" ], "interesting_symbols": [ { "line": 1, "text": "#ifndef JS8_SUBMODE_HPP_" }, { "line": 2, "text": "#define JS8_SUBMODE_HPP_" }, { "line": 4, "text": "#include \"JS8_Mode/JS8.h\"" }, { "line": 10, "text": "namespace JS8::Submode {" }, { "line": 33, "text": "/** Name of the submode, in all uppercase letters. */" }, { "line": 97, "text": "int computeCycleForDecode(int, int);" }, { "line": 98, "text": "int computeAltCycleForDecode(int, int, int);" }, { "line": 100, "text": "} // namespace JS8::Submode" }, { "line": 102, "text": "#endif // JS8_SUBMODE_HPP_" } ] }, { "path": "JS8_Mode/soft_combiner.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 277, "hits": { "decode": 8, "decoder": 5, "soft": 11, "js8": 9 }, "tx_risk_terms": { "cat": 2 }, "includes": [ "QDebug", "QLoggingCategory", "QtGlobal", "algorithm", "array", "chrono", "cmath", "cstdint", "mutex", "optional", "unordered_map", "utility", "vector" ], "interesting_symbols": [ { "line": 18, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);" }, { "line": 20, "text": "namespace js8 {" }, { "line": 58, "text": "qCDebug(decoder_js8)" }, { "line": 59, "text": "<< \"soft-combining disabled (JS8_SOFT_COMBINING=0)\";" }, { "line": 97, "text": "qCDebug(decoder_js8)" }, { "line": 104, "text": "void markDecoded(Key const &key) {" }, { "line": 200, "text": "int value = qEnvironmentVariableIntValue(\"JS8_SOFT_COMBINING\", &ok);" }, { "line": 231, "text": "if (!qEnvironmentVariableIsSet(\"JS8_SOFT_COMBINING_TEST\"))" }, { "line": 275, "text": "qCDebug(decoder_js8)" }, { "line": 294, "text": "} // namespace js8" } ] }, { "path": "JS8_Mode/ldpc_feedback.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 250, "hits": { "decode": 3, "decoder": 1, "ldpc": 12, "js8": 8 }, "tx_risk_terms": { "cat": 2 }, "includes": [ "QDebug", "QLoggingCategory", "QtGlobal", "algorithm", "array", "cmath", "cstdint", "cstdlib", "optional" ], "interesting_symbols": [ { "line": 14, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);" }, { "line": 16, "text": "namespace js8 {" }, { "line": 31, "text": "constexpr int LDPC_FEEDBACK_MAX_PASSES_DEFAULT = 8;" }, { "line": 36, "text": "if (auto const env = std::getenv(\"JS8_LLR_ERASURE_THRESH\"); env) {" }, { "line": 46, "text": "std::getenv(\"JS8_DISABLE_ERASURE_THRESHOLDING\")) {" }, { "line": 53, "text": "inline bool ldpcFeedbackEnabled() {" }, { "line": 55, "text": "int value = qEnvironmentVariableIntValue(\"JS8_LDPC_FEEDBACK\", &ok);" }, { "line": 59, "text": "inline int ldpcFeedbackMaxPasses() {" }, { "line": 61, "text": "int value = qEnvironmentVariableIntValue(\"JS8_LDPC_MAX_PASSES\", &ok);" }, { "line": 64, "text": "return LDPC_FEEDBACK_MAX_PASSES_DEFAULT;" } ] }, { "path": "JS8_Mode/whitening_processor.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 295, "hits": { "decode": 5, "decoder": 5, "symbol": 20, "js8": 9 }, "tx_risk_terms": { "cat": 2 }, "includes": [ "QDebug", "QLoggingCategory", "algorithm", "array", "cmath", "cstdlib", "numeric", "optional", "sstream", "vector" ], "interesting_symbols": [ { "line": 15, "text": "Q_DECLARE_LOGGING_CATEGORY(decoder_js8);" }, { "line": 17, "text": "namespace js8 {" }, { "line": 102, "text": "qCDebug(decoder_js8).noquote() << oss.str().c_str();" }, { "line": 139, "text": "qCDebug(decoder_js8)" }, { "line": 146, "text": "std::getenv(\"JS8_DISABLE_WHITENING\") != nullptr;" }, { "line": 246, "text": "qCDebug(decoder_js8) << \"LLR whitening applied\"" }, { "line": 259, "text": "} // namespace js8" } ] }, { "path": "JS8_Include/commons.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 379, "hits": { "decode": 18, "sync": 4, "symbol": 6, "js8": 40 }, "tx_risk_terms": { "tx": 5 }, "includes": [ "cstdint", "mutex" ], "interesting_symbols": [ { "line": 11, "text": "#define JS8_NSPS 6192" }, { "line": 12, "text": "#define JS8_NSMAX 6827" }, { "line": 13, "text": "#define JS8_NTMAX 60" }, { "line": 14, "text": "#define JS8_RX_SAMPLE_RATE 12000" }, { "line": 15, "text": "#define JS8_RX_SAMPLE_SIZE (JS8_NTMAX * JS8_RX_SAMPLE_RATE)" }, { "line": 17, "text": "#define JS8_RING_BUFFER 1 // use a ring buffer instead of clearing the decode frames" }, { "line": 18, "text": "#define JS8_DECODE_THREAD 1 // use a separate thread for decode process handling" }, { "line": 19, "text": "#define JS8_ALLOW_EXTENDED 1 // allow extended latin-1 capital charset" }, { "line": 20, "text": "#define JS8_AUTO_SYNC 1 // enable the experimental auto sync feature" }, { "line": 22, "text": "#define JS8_NUM_SYMBOLS 79" } ] }, { "path": "JS8_Main/Varicode.cpp", "exists": true, "category": "message_unpack_candidate", "focused_rx_score": 654, "hits": { "decode": 8, "unpack": 76, "snr": 34, "js8": 55 }, "tx_risk_terms": { "transmit": 5, "send": 16, "rig": 7, "cat": 17 }, "includes": [ "Varicode.h", "JS8_JSC/JSC.h", "JS8_Mode/DecodedText.h", "QLoggingCategory", "QMap", "QSet", "boost/format.hpp", "vendor/CRCpp/CRC.h", "cmath", "stdexcept" ], "interesting_symbols": [ { "line": 8, "text": "#include \"Varicode.h\"" }, { "line": 9, "text": "#include \"JS8_JSC/JSC.h\"" }, { "line": 10, "text": "#include \"JS8_Mode/DecodedText.h\"" }, { "line": 24, "text": "Q_DECLARE_LOGGING_CATEGORY(varicode_js8)" }, { "line": 221, "text": "{\"@JS8NET\", nbasecall + 3}, // JS8NET group" }, { "line": 265, "text": "{\"@JS8\", nbasecall + 35}, // JS8 GROUP" }, { "line": 359, "text": "QString Varicode::extendedChars() {" }, { "line": 372, "text": "QString Varicode::escape(const QString &text) {" }, { "line": 382, "text": "#if JS8_USE_ESCAPE_SUB_CHAR" }, { "line": 394, "text": "QString Varicode::unescape(const QString &text) {" } ] }, { "path": "JS8_Main/Varicode.h", "exists": true, "category": "message_unpack_candidate", "focused_rx_score": 274, "hits": { "decode": 3, "unpack": 17, "snr": 3, "js8": 9 }, "tx_risk_terms": { "transmit": 1, "rig": 1 }, "includes": [ "QBitArray", "QRegularExpression", "QString", "QThread", "QVector" ], "interesting_symbols": [ { "line": 1, "text": "#ifndef VARICODE_H" }, { "line": 2, "text": "#define VARICODE_H" }, { "line": 14, "text": "class Varicode {" }, { "line": 24, "text": "enum SubmodeType {" }, { "line": 25, "text": "JS8CallNormal = 0," }, { "line": 26, "text": "JS8CallFast = 1," }, { "line": 27, "text": "JS8CallTurbo = 2," }, { "line": 28, "text": "JS8CallSlow = 4," }, { "line": 29, "text": "JS8CallUltra = 8" }, { "line": 34, "text": "JS8Call = 0, // [000] <- any other frame of the message" } ] }, { "path": "JS8_JSC/JSC_map.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": -539, "hits": { "decode": 6, "decoder": 2, "sync": 73, "ldpc": 1, "soft": 168, "symbol": 21, "unpack": 5, "snr": 5, "js8": 6 }, "tx_risk_terms": { "tx": 47, "transmit": 15, "ptt": 10, "tune": 33, "send": 49, "rig": 416, "hamlib": 1, "cat": 1009 }, "includes": [ "JSC.h" ], "interesting_symbols": [ { "line": 95, "text": "{\"\\\\\", 1, 68}, // FYI: this used to be FT8 in JS8 1.0" }, { "line": 96, "text": "{\"\\n\", 1, 69}, // FYI: this used to be \"\\\" in JS8 1.0" }, { "line": 97, "text": "{\"JS8\", 3, 70}," }, { "line": 98, "text": "{\"JS8CALL\", 7, 71}," }, { "line": 100, "text": "72}, // FYI: this used to be JSQSO in JS8 1.0, it is now a substitute flag" }, { "line": 32911, "text": "{\"SYNC\", 4, 32883}," }, { "line": 40361, "text": "{\"SYNCHRONIZATION\", 15, 40333}," }, { "line": 43476, "text": "{\"DECODER\", 7, 43448}," }, { "line": 47164, "text": "{\"ASYNCHRONOUS\", 12, 47136}," }, { "line": 48994, "text": "{\"SYNCHRONOUS\", 11, 48966}," } ] }, { "path": "JS8_JSC/JSC_list.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": -539, "hits": { "decode": 6, "decoder": 2, "sync": 73, "ldpc": 1, "soft": 168, "symbol": 21, "unpack": 5, "snr": 5, "js8": 6 }, "tx_risk_terms": { "tx": 47, "transmit": 15, "ptt": 10, "tune": 33, "send": 49, "rig": 416, "hamlib": 1, "cat": 1009 }, "includes": [ "JSC.h" ], "interesting_symbols": [ { "line": 16249, "text": "{\"VSYNC\", 5, 146064}," }, { "line": 21073, "text": "{\"UUDECODE\", 8, 212134}," }, { "line": 23617, "text": "{\"UNPACKS\", 7, 238679}," }, { "line": 23618, "text": "{\"UNPACKING\", 9, 69270}," }, { "line": 23619, "text": "{\"UNPACKED\", 8, 92955}," }, { "line": 23620, "text": "{\"UNPACKAGED\", 10, 179051}," }, { "line": 23621, "text": "{\"UNPACK\", 6, 69093}," }, { "line": 39192, "text": "{\"SYNCYTIAL\", 9, 132486}," }, { "line": 39193, "text": "{\"SYNCTEST\", 8, 246773}," }, { "line": 39194, "text": "{\"SYNCS\", 5, 143059}," } ] } ], "additional_candidates": [ { "path": "CMakeLists.txt", "exists": true, "category": "support_or_unknown", "focused_rx_score": 349, "hits": { "decode": 2, "soft": 1, "symbol": 1, "js8": 125 }, "tx_risk_terms": { "tx": 4, "transmit": 2, "rig": 15, "hamlib": 9, "cat": 8 }, "includes": [], "interesting_symbols": [ { "line": 4, "text": "# JS8Call Build:" }, { "line": 38, "text": "set(CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/../js8libs)" }, { "line": 60, "text": "JS8Call" }, { "line": 68, "text": "set(PROJECT_HOMEPAGE https://groups.io/g/js8call)" }, { "line": 91, "text": "# define in js8call_config.h.in, which makes them available to the C/C++" }, { "line": 220, "text": "JS8CALL_VERSION=\\\"${PROJECT_VERSION}\\\"" }, { "line": 229, "text": "\"${CMAKE_CURRENT_SOURCE_DIR}/JS8_Include/js8call_config.h.in\"" }, { "line": 230, "text": "\"${CMAKE_CURRENT_BINARY_DIR}/js8call_config.h\"" }, { "line": 235, "text": "${CMAKE_CURRENT_BINARY_DIR}/js8call_config.h" }, { "line": 245, "text": "JS8_Audio/AudioDevice.cpp" } ] }, { "path": "tools/tracking_diag.cpp", "exists": true, "category": "diagnostic_harness_reference", "focused_rx_score": 273, "hits": { "decode": 36, "decoder": 13, "sync": 1, "symbol": 1, "snr": 19, "js8": 25 }, "tx_risk_terms": { "tx": 6, "cat": 6 }, "includes": [ "cmath", "cstring", "optional", "random", "sstream", "vector", "iostream", "mutex", "thread", "cstdlib", "QCoreApplication", "QEventLoop", "QLoggingCategory", "QThread", "JS8_Include/commons.h", "JS8_Mode/JS8.h", "../JS8_Mode/JS8.cpp" ], "interesting_symbols": [ { "line": 30, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 31, "text": "#include \"JS8_Mode/JS8.h\"" }, { "line": 38, "text": "Q_LOGGING_CATEGORY(decoder_js8, \"decoder.js8\", QtWarningMsg)" }, { "line": 41, "text": "#include \"../JS8_Mode/JS8.cpp\"" }, { "line": 47, "text": "struct DecodeMetrics" }, { "line": 49, "text": "bool decoded = false;" }, { "line": 50, "text": "int decodedCount = 0;" }, { "line": 70, "text": "JS8::encode(0, Costas, message, tones);" }, { "line": 103, "text": "auto const count = std::min(samples.size(), std::size_t(JS8_RX_SAMPLE_SIZE));" }, { "line": 112, "text": "dec_data.params.nsubmodes = 1 << 0; // ModeA only." } ] }, { "path": "tools/whitening_diag.cpp", "exists": true, "category": "diagnostic_harness_reference", "focused_rx_score": 203, "hits": { "decode": 26, "decoder": 11, "sync": 1, "snr": 12, "js8": 19 }, "tx_risk_terms": { "cat": 4 }, "includes": [ "cmath", "cstring", "random", "vector", "iostream", "mutex", "thread", "cstdlib", "QCoreApplication", "QEventLoop", "QLoggingCategory", "QThread", "JS8_Include/commons.h", "JS8_Mode/JS8.h", "../JS8_Mode/JS8.cpp" ], "interesting_symbols": [ { "line": 25, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 26, "text": "#include \"JS8_Mode/JS8.h\"" }, { "line": 33, "text": "Q_LOGGING_CATEGORY(decoder_js8, \"decoder.js8\", QtWarningMsg)" }, { "line": 36, "text": "#include \"../JS8_Mode/JS8.cpp\"" }, { "line": 48, "text": "JS8::encode(0, Costas, message, tones);" }, { "line": 76, "text": "auto const count = std::min(samples.size(), std::size_t(JS8_RX_SAMPLE_SIZE));" }, { "line": 85, "text": "dec_data.params.nsubmodes = 1 << 0; // ModeA only." }, { "line": 89, "text": "dec_data.params.syncStats = false;" }, { "line": 101, "text": "bool decoded = false;" }, { "line": 107, "text": "run_decode(bool disableWhitening)" } ] }, { "path": "JS8_Mode/Modulator.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 134, "hits": { "sync": 4, "symbol": 6, "js8": 22 }, "tx_risk_terms": { "tx": 9, "transmit": 3, "tune": 1, "send": 6, "cat": 3 }, "includes": [ "Modulator.h", "JS8Submode.h", "JS8_Audio/SoundOutput.h", "JS8_Include/commons.h", "JS8_Main/DriftingDateTime.h", "JS8_UI/mainwindow.h", "QDateTime", "QLoggingCategory", "QtMath", "limits", "numbers", "moc_Modulator.cpp" ], "interesting_symbols": [ { "line": 6, "text": "#include \"JS8Submode.h\"" }, { "line": 7, "text": "#include \"JS8_Audio/SoundOutput.h\"" }, { "line": 8, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 9, "text": "#include \"JS8_Main/DriftingDateTime.h\"" }, { "line": 10, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 21, "text": "Q_DECLARE_LOGGING_CATEGORY(modulator_js8)" }, { "line": 38, "text": "void Modulator::start(double const frequency, int const submode," }, { "line": 45, "text": "qCDebug(modulator_js8)" }, { "line": 48, "text": ": current_state == State::Synchronizing ? \"Synchronizing\"" }, { "line": 57, "text": "m_nsps = JS8::Submode::samplesForOneSymbol(submode);" } ] }, { "path": "JS8_Mode/Detector.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 93, "hits": { "decode": 1, "decoder": 1, "js8": 10 }, "tx_risk_terms": { "cat": 3 }, "includes": [ "Detector.h", "JS8_Include/commons.h", "JS8_Main/DriftingDateTime.h", "QDateTime", "QLoggingCategory", "QMutexLocker", "QtAlgorithms", "algorithm", "cmath", "moc_Detector.cpp" ], "interesting_symbols": [ { "line": 8, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 9, "text": "#include \"JS8_Main/DriftingDateTime.h\"" }, { "line": 56, "text": "Q_DECLARE_LOGGING_CATEGORY(detector_js8)" }, { "line": 97, "text": "#if JS8_RING_BUFFER" }, { "line": 130, "text": "qCDebug(detector_js8) << \"advancing detector buffer from\" << prevKin << \"to\"" }, { "line": 152, "text": "qCDebug(detector_js8) << \"clearing detector buffer content\";" }, { "line": 187, "text": "qCDebug(detector_js8)" }, { "line": 204, "text": "static_cast(JS8_NTMAX * 12000 - m_samplesPerFFT)) {" }, { "line": 237, "text": "Q_LOGGING_CATEGORY(detector_js8, \"detector.js8\", QtWarningMsg)" } ] }, { "path": "JS8_JSC/JSC_checker.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 89, "hits": { "soft": 2, "js8": 9 }, "tx_risk_terms": { "rig": 1, "cat": 3 }, "includes": [ "JSC_checker.h", "JS8_Main/Varicode.h", "JSC.h", "QLoggingCategory", "QTextBlock", "QTextCursor", "QTextDocument", "QTextEdit", "QTextLayout" ], "interesting_symbols": [ { "line": 24, "text": "#include \"JS8_Main/Varicode.h\"" }, { "line": 34, "text": "Q_DECLARE_LOGGING_CATEGORY(jsc_checker_js8)" }, { "line": 162, "text": "correct = Varicode::isValidCallsign(word, nullptr);" }, { "line": 310, "text": "Q_LOGGING_CATEGORY(jsc_checker_js8, \"jsc_checker.js8\", QtWarningMsg)" } ] }, { "path": "JS8_Mode/FrequencyTracker.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 81, "hits": { "decode": 2, "symbol": 1, "js8": 4 }, "tx_risk_terms": {}, "includes": [ "complex", "numbers" ], "interesting_symbols": [ { "line": 6, "text": "namespace js8 {" }, { "line": 75, "text": "} // namespace js8" } ] }, { "path": "JS8_JSC/JSC.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 71, "hits": { "soft": 2, "js8": 2 }, "tx_risk_terms": { "rig": 1 }, "includes": [ "JSC.h", "JS8_Main/Varicode.h", "QCache", "QDebug", "cmath" ], "interesting_symbols": [ { "line": 24, "text": "#include \"JS8_Main/Varicode.h\"" }, { "line": 48, "text": "out.prepend(Varicode::intToBits(v, bytesize + 1));" }, { "line": 53, "text": "out.prepend(Varicode::intToBits((x % c) + s, bytesize));" }, { "line": 154, "text": "quint64 byte = Varicode::bitsToInt(b);" } ] }, { "path": "JS8_Mode/FrequencyTracker.cpp", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 69, "hits": { "js8": 3 }, "tx_risk_terms": {}, "includes": [ "FrequencyTracker.h", "algorithm", "cmath" ], "interesting_symbols": [ { "line": 14, "text": "namespace js8 {" }, { "line": 184, "text": "} // namespace js8" } ] }, { "path": "JS8_Main/JS8MessageBox.cpp", "exists": true, "category": "support_or_unknown", "focused_rx_score": 66, "hits": { "js8": 23 }, "tx_risk_terms": { "cat": 3 }, "includes": [ "JS8MessageBox.h", "revision_utils.h", "QCoreApplication", "QDialogButtonBox", "QPushButton" ], "interesting_symbols": [ { "line": 6, "text": "#include \"JS8MessageBox.h\"" }, { "line": 13, "text": "JS8MessageBox::JS8MessageBox(QWidget *parent) : QMessageBox{parent} {" }, { "line": 17, "text": "JS8MessageBox::JS8MessageBox(Icon icon, QString const &text," }, { "line": 24, "text": "void JS8MessageBox::about_message(QWidget *parent, QString const &text) {" }, { "line": 28, "text": "void JS8MessageBox::about_Qt_message(QWidget *parent) {" }, { "line": 34, "text": "show_it(QWidget *parent, JS8MessageBox::Icon icon, QString const &text," }, { "line": 36, "text": "JS8MessageBox::StandardButtons buttons," }, { "line": 37, "text": "JS8MessageBox::StandardButton default_button) {" }, { "line": 38, "text": "JS8MessageBox mb{icon, text, JS8MessageBox::NoButton, parent};" }, { "line": 42, "text": "uint mask = JS8MessageBox::FirstButton;" } ] }, { "path": "JS8_Mode/Modulator.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 64, "hits": { "sync": 1, "js8": 1 }, "tx_risk_terms": { "tx": 1, "tune": 1 }, "includes": [ "JS8_Audio/AudioDevice.h", "QAudio", "QPointer" ], "interesting_symbols": [ { "line": 4, "text": "#include \"JS8_Audio/AudioDevice.h\"" }, { "line": 24, "text": "enum class State { Synchronizing, Active, Idle };" }, { "line": 55, "text": "Q_SLOT void start(double audioFrequency, int submode, double tx_delay," } ] }, { "path": "JS8_Mode/Detector.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 63, "hits": { "js8": 1 }, "tx_risk_terms": {}, "includes": [ "JS8_Audio/AudioDevice.h", "QMutex", "vendor/Eigen/Dense", "array" ], "interesting_symbols": [ { "line": 4, "text": "#include \"JS8_Audio/AudioDevice.h\"" } ] }, { "path": "JS8_Include/Maidenhead.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 63, "hits": { "soft": 1 }, "tx_risk_terms": {}, "includes": [ "QString", "QStringView", "QValidator" ], "interesting_symbols": [] }, { "path": "JS8_Include/sleep.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 60, "hits": {}, "tx_risk_terms": {}, "includes": [ "qthread.h" ], "interesting_symbols": [] }, { "path": "JS8_Include/pimpl_h.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 60, "hits": {}, "tx_risk_terms": {}, "includes": [ "memory" ], "interesting_symbols": [] }, { "path": "JS8_Include/pimpl_impl.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 60, "hits": {}, "tx_risk_terms": {}, "includes": [ "utility" ], "interesting_symbols": [] }, { "path": "JS8_Include/EventFilter.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 60, "hits": {}, "tx_risk_terms": {}, "includes": [ "QEvent", "QKeyEvent", "QMouseEvent", "QObject", "functional" ], "interesting_symbols": [] }, { "path": "JS8_Include/SettingsGroup.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 60, "hits": {}, "tx_risk_terms": {}, "includes": [ "QSettings", "QString" ], "interesting_symbols": [] }, { "path": "JS8_Include/eclipse.txt", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 60, "hits": {}, "tx_risk_terms": {}, "includes": [], "interesting_symbols": [] }, { "path": "JS8_JSC/JSC_checker.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 59, "hits": {}, "tx_risk_terms": { "rig": 1 }, "includes": [ "QObject" ], "interesting_symbols": [] }, { "path": "JS8_JSC/JSC.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 59, "hits": {}, "tx_risk_terms": { "rig": 1 }, "includes": [ "QList", "QMap", "QPair", "QStringList", "QTextStream", "QVector" ], "interesting_symbols": [] }, { "path": "JS8_Main/APRSISClient.cpp", "exists": true, "category": "support_or_unknown", "focused_rx_score": 51, "hits": { "sync": 1, "js8": 21 }, "tx_risk_terms": { "send": 3, "rig": 1, "cat": 11 }, "includes": [ "APRSISClient.h", "DriftingDateTime.h", "Varicode.h", "QLoggingCategory", "QRandomGenerator", "cmath" ], "interesting_symbols": [ { "line": 7, "text": "#include \"Varicode.h\"" }, { "line": 14, "text": "Q_DECLARE_LOGGING_CATEGORY(aprsisclient_js8)" }, { "line": 105, "text": "loginFrame = loginFrame.arg(\"JS8Call\");" }, { "line": 319, "text": "qCDebug(aprsisclient_js8)" }, { "line": 354, "text": "auto spotFrame = QString(\"%1>APJ8CL,qAS,%2:=%3/%4G#JS8 %5\\n\");" }, { "line": 427, "text": "qCDebug(aprsisclient_js8)" }, { "line": 446, "text": "qCDebug(aprsisclient_js8)" }, { "line": 468, "text": "qCDebug(aprsisclient_js8)" }, { "line": 478, "text": "qCDebug(aprsisclient_js8)" }, { "line": 486, "text": "qCDebug(aprsisclient_js8)" } ] }, { "path": "JS8_Main/main.cpp", "exists": true, "category": "support_or_unknown", "focused_rx_score": 51, "hits": { "js8": 29 }, "tx_risk_terms": { "rig": 9, "cat": 27 }, "includes": [ "DriftingDateTime.h", "FrequencyList.h", "JS8MessageBox.h", "JS8_Include/SettingsGroup.h", "JS8_Include/commons.h", "JS8_UI/mainwindow.h", "JS8_UI/styles.h", "MetaDataRegistry.h", "MultiSettings.h", "Radio.h", "TraceFile.h", "revision_utils.h", "QApplication", "QDateTime", "QDir", "QLibraryInfo", "QLockFile", "QLoggingCategory", "QObject", "QRegularExpression", "QSettings", "QStack", "QStandardPaths", "QStringList", "QSysInfo", "fftw3.h", "locale.h", "exception", "iostream", "stdexcept", "string", "QCommandLineOption", "QCommandLineParser" ], "interesting_symbols": [ { "line": 8, "text": "#include \"JS8MessageBox.h\"" }, { "line": 9, "text": "#include \"JS8_Include/SettingsGroup.h\"" }, { "line": 10, "text": "#include \"JS8_Include/commons.h\"" }, { "line": 11, "text": "#include \"JS8_UI/mainwindow.h\"" }, { "line": 12, "text": "#include \"JS8_UI/styles.h\"" }, { "line": 45, "text": "Q_DECLARE_LOGGING_CATEGORY(main_js8)" }, { "line": 91, "text": "a.setApplicationName(\"JS8Call\");" }, { "line": 183, "text": "switch (JS8MessageBox::query_message(" }, { "line": 188, "text": "JS8MessageBox::Yes | JS8MessageBox::Retry |" }, { "line": 189, "text": "JS8MessageBox::No," } ] }, { "path": "JS8_Include/qpriorityqueue.h", "exists": true, "category": "rx_core_candidate", "focused_rx_score": 45, "hits": { "soft": 1 }, "tx_risk_terms": { "tx": 1, "rig": 17 }, "includes": [ "QtCore/qalgorithms.h", "queue", "vector" ], "interesting_symbols": [] }, { "path": "JS8_Main/FrequencyList.cpp", "exists": true, "category": "support_or_unknown", "focused_rx_score": 42, "hits": { "js8": 15 }, "tx_risk_terms": { "rig": 2, "cat": 1 }, "includes": [ "FrequencyList.h", "JS8_Include/pimpl_impl.h", "JS8_Main/Bands.h", "Radio.h", "QAbstractTableModel", "QByteArray", "QDataStream", "QDebugStateSaver", "QList", "QListIterator", "QMetaType", "QMimeData", "QString", "QStringList", "QVector", "cstdlib", "limits", "utility", "moc_FrequencyList.cpp" ], "interesting_symbols": [ { "line": 7, "text": "#include \"JS8_Include/pimpl_impl.h\"" }, { "line": 8, "text": "#include \"JS8_Main/Bands.h\"" }, { "line": 31, "text": "{1843500, Modes::JS8, IARURegions::ALL, \"\"}, // 3.5 above" }, { "line": 32, "text": "{3578000, Modes::JS8, IARURegions::ALL, \"\"}, // 5 above" }, { "line": 33, "text": "{5363000, Modes::JS8," }, { "line": 35, "text": "{7078000, Modes::JS8, IARURegions::ALL, \"\"}, // 4 above" }, { "line": 36, "text": "{10130000, Modes::JS8, IARURegions::ALL, \"\"}, // 6 below" }, { "line": 37, "text": "{14078000, Modes::JS8, IARURegions::ALL, \"\"}, // 4 above" }, { "line": 38, "text": "{18104000, Modes::JS8, IARURegions::ALL, \"\"}, // 4 above" }, { "line": 39, "text": "{21078000, Modes::JS8, IARURegions::ALL, \"\"}, // 4 above" } ] } ], "next_action": "Run sync-probe and soft-symbols on real JS8 WAVs, then continue with LDPC/FEC. Message unpack remains not implemented in this step." } [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260527T085141Z_source-map.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260527T085141Z_source-map_manifest.json [webftr-js8-lab] source-map exit_code=0 ========== FULL-AUDIT STEP 4/4: LOG BUNDLE ========== [webftr-js8-lab] collecting JS8Lab logs from /decoders/js8_decoder/logs [webftr-js8-lab] upload this JS8Lab bundle: /decoders/js8_decoder/logs/js8_decoder_lab_full_audit_20260527T084305Z.zip [webftr-js8-lab] OK [webftr-js8-lab] log file: /decoders/js8_decoder/logs/20260527T084305Z_full-audit.log [webftr-js8-lab] manifest: /decoders/js8_decoder/logs/20260527T084305Z_full-audit_manifest.json [js8.sh job] finished utc=2026-05-27T08:51:48Z exit_code=0