From e4b6e84d8b1b47b546c3aea608f60f44c9c5c143 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Tue, 30 Apr 2024 18:53:05 +0200 Subject: [PATCH] extracted header handler --- app/src/main/java/xdsopl/robot36/Decoder.java | 85 ++++++++++--------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/xdsopl/robot36/Decoder.java b/app/src/main/java/xdsopl/robot36/Decoder.java index 5235e99..93ea1f3 100644 --- a/app/src/main/java/xdsopl/robot36/Decoder.java +++ b/app/src/main/java/xdsopl/robot36/Decoder.java @@ -257,6 +257,49 @@ public class Decoder { return check; } + private boolean handleHeader(int leaderBreakIndex) { + if (!detectHeader(leaderBreakIndex)) + return false; + Mode mode; + int[] pulses; + int[] lines; + if ((mode = findMode(syncPulse5msModes, visCode)) != null) { + pulses = last5msSyncPulses; + lines = last5msScanLines; + } else if ((mode = findMode(syncPulse9msModes, visCode)) != null) { + pulses = last9msSyncPulses; + lines = last9msScanLines; + } else if ((mode = findMode(syncPulse20msModes, visCode)) != null) { + pulses = last20msSyncPulses; + lines = last20msScanLines; + } else { + drawLines(0xffff0000, 8); + return false; + } + mode.reset(); + imageBuffer.width = mode.getWidth(); + imageBuffer.height = mode.getHeight(); + imageBuffer.line = 0; + lastMode = mode; + lastSyncPulseIndex = mode.getFirstSyncPulseIndex(); + lastScanLineSamples = mode.getScanLineSamples(); + lastFrequencyOffset = leaderFreqOffset; + for (int i = 0; i < pulses.length; ++i) + pulses[i] = lastSyncPulseIndex + (i - pulses.length + 1) * lastScanLineSamples; + Arrays.fill(lines, lastScanLineSamples); + int shift = leaderBreakIndex + leaderToneSamples + visCodeSamples; + adjustSyncPulses(last5msSyncPulses, shift); + adjustSyncPulses(last9msSyncPulses, shift); + adjustSyncPulses(last20msSyncPulses, shift); + int endSample = curSample; + curSample = 0; + for (int i = shift; i < endSample; ++i) + scanLineBuffer[curSample++] = scanLineBuffer[i]; + drawLines(0xff00ff00, 8); + drawLines(0xff000000, 10); + return true; + } + private boolean processSyncPulse(ArrayList modes, float[] freqOffs, int[] pulses, int[] lines, int index) { if (Math.abs(index - pulses[pulses.length - 1]) > scanLineToleranceSamples) { for (int i = 1; i < lines.length; ++i) @@ -340,48 +383,8 @@ public class Decoder { return false; } } - int leaderBreakIndex = last9msSyncPulses[last9msSyncPulses.length - 1]; - if (detectHeader(leaderBreakIndex)) { - Mode mode; - int[] pulses = null; - int[] lines = null; - if ((mode = findMode(syncPulse5msModes, visCode)) != null) { - pulses = last5msSyncPulses; - lines = last5msScanLines; - } else if ((mode = findMode(syncPulse9msModes, visCode)) != null) { - pulses = last9msSyncPulses; - lines = last9msScanLines; - } else if ((mode = findMode(syncPulse20msModes, visCode)) != null) { - pulses = last20msSyncPulses; - lines = last20msScanLines; - } - if (mode != null && pulses != null && lines != null) { - mode.reset(); - imageBuffer.width = mode.getWidth(); - imageBuffer.height = mode.getHeight(); - imageBuffer.line = 0; - lastMode = mode; - lastSyncPulseIndex = mode.getFirstSyncPulseIndex(); - lastScanLineSamples = mode.getScanLineSamples(); - lastFrequencyOffset = leaderFreqOffset; - for (int i = 0; i < pulses.length; ++i) - pulses[i] = lastSyncPulseIndex + (i - pulses.length + 1) * lastScanLineSamples; - Arrays.fill(lines, lastScanLineSamples); - int shift = leaderBreakIndex + leaderToneSamples + visCodeSamples; - adjustSyncPulses(last5msSyncPulses, shift); - adjustSyncPulses(last9msSyncPulses, shift); - adjustSyncPulses(last20msSyncPulses, shift); - int endSample = curSample; - curSample = 0; - for (int i = shift; i < endSample; ++i) - scanLineBuffer[curSample++] = scanLineBuffer[i]; - drawLines(0xff00ff00, 8); - } else { - drawLines(0xffff0000, 8); - } - drawLines(0xff000000, 10); + if (handleHeader(last9msSyncPulses[last9msSyncPulses.length - 1])) return true; - } if (curSample > lastSyncPulseIndex + (lastScanLineSamples * 5) / 4) { copyLines(lastMode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, lastSyncPulseIndex, lastScanLineSamples, lastFrequencyOffset)); lastSyncPulseIndex += lastScanLineSamples;