mirror of
https://github.com/xdsopl/robot36.git
synced 2026-01-20 15:00:16 +01:00
find mode from VIS code
This commit is contained in:
parent
0a506406f8
commit
c2efb8036f
|
|
@ -94,22 +94,22 @@ public class Decoder {
|
|||
lastSyncPulseIndex = curSample;
|
||||
syncPulse5msModes = new ArrayList<>();
|
||||
syncPulse5msModes.add(RGBModes.Wraase_SC2_180(sampleRate));
|
||||
syncPulse5msModes.add(RGBModes.Martin("1", 0.146432, sampleRate));
|
||||
syncPulse5msModes.add(RGBModes.Martin("2", 0.073216, sampleRate));
|
||||
syncPulse5msModes.add(RGBModes.Martin("1", 44, 0.146432, sampleRate));
|
||||
syncPulse5msModes.add(RGBModes.Martin("2", 40, 0.073216, sampleRate));
|
||||
syncPulse9msModes = new ArrayList<>();
|
||||
syncPulse9msModes.add(robot36);
|
||||
syncPulse9msModes.add(new Robot_72_Color(sampleRate));
|
||||
syncPulse9msModes.add(RGBModes.Scottie("1", 0.138240, sampleRate));
|
||||
syncPulse9msModes.add(RGBModes.Scottie("2", 0.088064, sampleRate));
|
||||
syncPulse9msModes.add(RGBModes.Scottie("DX", 0.3456, sampleRate));
|
||||
syncPulse9msModes.add(RGBModes.Scottie("1", 60, 0.138240, sampleRate));
|
||||
syncPulse9msModes.add(RGBModes.Scottie("2", 56, 0.088064, sampleRate));
|
||||
syncPulse9msModes.add(RGBModes.Scottie("DX", 76, 0.3456, sampleRate));
|
||||
syncPulse20msModes = new ArrayList<>();
|
||||
syncPulse20msModes.add(new PaulDon("50", 320, 0.09152, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("90", 320, 0.17024, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("120", 640, 0.1216, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("160", 512, 0.195584, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("180", 640, 0.18304, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("240", 640, 0.24448, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("290", 640, 0.2288, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("50", 93, 320, 0.09152, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("90", 99, 320, 0.17024, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("120", 95, 640, 0.1216, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("160", 98, 512, 0.195584, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("180", 96, 640, 0.18304, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("240", 97, 640, 0.24448, sampleRate));
|
||||
syncPulse20msModes.add(new PaulDon("290", 94, 640, 0.2288, sampleRate));
|
||||
}
|
||||
|
||||
private void adjustSyncPulses(int[] pulses, int shift) {
|
||||
|
|
@ -154,6 +154,19 @@ public class Decoder {
|
|||
return bestMode;
|
||||
}
|
||||
|
||||
private Mode findMode(int code) {
|
||||
for (Mode mode : syncPulse5msModes)
|
||||
if (mode.getCode() == code)
|
||||
return mode;
|
||||
for (Mode mode : syncPulse9msModes)
|
||||
if (mode.getCode() == code)
|
||||
return mode;
|
||||
for (Mode mode : syncPulse20msModes)
|
||||
if (mode.getCode() == code)
|
||||
return mode;
|
||||
return rawMode;
|
||||
}
|
||||
|
||||
private void copyUnscaled() {
|
||||
for (int row = 0; row < pixelBuffer.height; ++row) {
|
||||
int line = scopeBuffer.width * scopeBuffer.line;
|
||||
|
|
@ -314,7 +327,7 @@ public class Decoder {
|
|||
}
|
||||
}
|
||||
if (detectHeader(last9msSyncPulses[last9msSyncPulses.length - 1]))
|
||||
Log.d("Robot36", "VIS code: " + visCode);
|
||||
Log.d("Robot36", "VIS mode: " + findMode(visCode).getName());
|
||||
if (lastSyncPulseIndex >= scanLineReserveSamples && curSample > lastSyncPulseIndex + (lastScanLineSamples * 5) / 4) {
|
||||
copyLines(lastMode.decodeScanLine(pixelBuffer, scratchBuffer, scanLineBuffer, scopeBuffer.width, lastSyncPulseIndex, lastScanLineSamples, lastFrequencyOffset));
|
||||
lastSyncPulseIndex += lastScanLineSamples;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ package xdsopl.robot36;
|
|||
public interface Mode {
|
||||
String getName();
|
||||
|
||||
int getCode();
|
||||
|
||||
int getScanLineSamples();
|
||||
|
||||
boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int scopeBufferWidth, int syncPulseIndex, int scanLineSamples, float frequencyOffset);
|
||||
|
|
|
|||
|
|
@ -18,10 +18,12 @@ public class PaulDon implements Mode {
|
|||
private final int yOddBeginSamples;
|
||||
private final int endSamples;
|
||||
private final String name;
|
||||
private final int code;
|
||||
|
||||
@SuppressWarnings("UnnecessaryLocalVariable")
|
||||
PaulDon(String name, int horizontalPixels, double channelSeconds, int sampleRate) {
|
||||
PaulDon(String name, int code, int horizontalPixels, double channelSeconds, int sampleRate) {
|
||||
this.name = "PD " + name;
|
||||
this.code = code;
|
||||
this.horizontalPixels = horizontalPixels;
|
||||
double syncPulseSeconds = 0.02;
|
||||
double syncPorchSeconds = 0.00208;
|
||||
|
|
@ -51,6 +53,11 @@ public class PaulDon implements Mode {
|
|||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScanLineSamples() {
|
||||
return scanLineSamples;
|
||||
|
|
|
|||
|
|
@ -19,9 +19,11 @@ public class RGBDecoder implements Mode {
|
|||
private final int blueSamples;
|
||||
private final int endSamples;
|
||||
private final String name;
|
||||
private final int code;
|
||||
|
||||
RGBDecoder(String name, int horizontalPixels, double scanLineSeconds, double beginSeconds, double redBeginSeconds, double redEndSeconds, double greenBeginSeconds, double greenEndSeconds, double blueBeginSeconds, double blueEndSeconds, double endSeconds, int sampleRate) {
|
||||
RGBDecoder(String name, int code, int horizontalPixels, double scanLineSeconds, double beginSeconds, double redBeginSeconds, double redEndSeconds, double greenBeginSeconds, double greenEndSeconds, double blueBeginSeconds, double blueEndSeconds, double endSeconds, int sampleRate) {
|
||||
this.name = name;
|
||||
this.code = code;
|
||||
this.horizontalPixels = horizontalPixels;
|
||||
scanLineSamples = (int) Math.round(scanLineSeconds * sampleRate);
|
||||
beginSamples = (int) Math.round(beginSeconds * sampleRate);
|
||||
|
|
@ -44,6 +46,11 @@ public class RGBDecoder implements Mode {
|
|||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScanLineSamples() {
|
||||
return scanLineSamples;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ package xdsopl.robot36;
|
|||
@SuppressWarnings("UnnecessaryLocalVariable")
|
||||
public final class RGBModes {
|
||||
|
||||
public static RGBDecoder Martin(String name, double channelSeconds, int sampleRate) {
|
||||
public static RGBDecoder Martin(String name, int code, double channelSeconds, int sampleRate) {
|
||||
double syncPulseSeconds = 0.004862;
|
||||
double separatorSeconds = 0.000572;
|
||||
double scanLineSeconds = syncPulseSeconds + separatorSeconds + 3 * (channelSeconds + separatorSeconds);
|
||||
|
|
@ -19,10 +19,10 @@ public final class RGBModes {
|
|||
double blueEndSeconds = blueBeginSeconds + channelSeconds;
|
||||
double redBeginSeconds = blueEndSeconds + separatorSeconds;
|
||||
double redEndSeconds = redBeginSeconds + channelSeconds;
|
||||
return new RGBDecoder("Martin " + name, 320, scanLineSeconds, greenBeginSeconds, redBeginSeconds, redEndSeconds, greenBeginSeconds, greenEndSeconds, blueBeginSeconds, blueEndSeconds, redEndSeconds, sampleRate);
|
||||
return new RGBDecoder("Martin " + name, code, 320, scanLineSeconds, greenBeginSeconds, redBeginSeconds, redEndSeconds, greenBeginSeconds, greenEndSeconds, blueBeginSeconds, blueEndSeconds, redEndSeconds, sampleRate);
|
||||
}
|
||||
|
||||
public static RGBDecoder Scottie(String name, double channelSeconds, int sampleRate) {
|
||||
public static RGBDecoder Scottie(String name, int code, double channelSeconds, int sampleRate) {
|
||||
double syncPulseSeconds = 0.009;
|
||||
double separatorSeconds = 0.0015;
|
||||
double scanLineSeconds = syncPulseSeconds + 3 * (channelSeconds + separatorSeconds);
|
||||
|
|
@ -32,7 +32,7 @@ public final class RGBModes {
|
|||
double greenBeginSeconds = greenEndSeconds - channelSeconds;
|
||||
double redBeginSeconds = separatorSeconds;
|
||||
double redEndSeconds = redBeginSeconds + channelSeconds;
|
||||
return new RGBDecoder("Scottie " + name, 320, scanLineSeconds, greenBeginSeconds, redBeginSeconds, redEndSeconds, greenBeginSeconds, greenEndSeconds, blueBeginSeconds, blueEndSeconds, redEndSeconds, sampleRate);
|
||||
return new RGBDecoder("Scottie " + name, code, 320, scanLineSeconds, greenBeginSeconds, redBeginSeconds, redEndSeconds, greenBeginSeconds, greenEndSeconds, blueBeginSeconds, blueEndSeconds, redEndSeconds, sampleRate);
|
||||
}
|
||||
|
||||
public static RGBDecoder Wraase_SC2_180(int sampleRate) {
|
||||
|
|
@ -46,6 +46,6 @@ public final class RGBModes {
|
|||
double greenEndSeconds = greenBeginSeconds + channelSeconds;
|
||||
double blueBeginSeconds = greenEndSeconds;
|
||||
double blueEndSeconds = blueBeginSeconds + channelSeconds;
|
||||
return new RGBDecoder("Wraase SC2-180", 320, scanLineSeconds, redBeginSeconds, redBeginSeconds, redEndSeconds, greenBeginSeconds, greenEndSeconds, blueBeginSeconds, blueEndSeconds, blueEndSeconds, sampleRate);
|
||||
return new RGBDecoder("Wraase SC2-180", 55, 320, scanLineSeconds, redBeginSeconds, redBeginSeconds, redEndSeconds, greenBeginSeconds, greenEndSeconds, blueBeginSeconds, blueEndSeconds, blueEndSeconds, sampleRate);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,11 @@ public class RawDecoder implements Mode {
|
|||
return "Raw";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCode() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScanLineSamples() {
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -56,6 +56,11 @@ public class Robot_36_Color implements Mode {
|
|||
return "Robot 36 Color";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCode() {
|
||||
return 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScanLineSamples() {
|
||||
return scanLineSamples;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,11 @@ public class Robot_72_Color implements Mode {
|
|||
return "Robot 72 Color";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCode() {
|
||||
return 12;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getScanLineSamples() {
|
||||
return scanLineSamples;
|
||||
|
|
|
|||
Loading…
Reference in a new issue