diff --git a/app/src/main/java/xdsopl/robot36/ImageView.java b/app/src/main/java/xdsopl/robot36/ImageView.java index cec37fb..75d3f65 100644 --- a/app/src/main/java/xdsopl/robot36/ImageView.java +++ b/app/src/main/java/xdsopl/robot36/ImageView.java @@ -65,6 +65,7 @@ public class ImageView extends SurfaceView implements SurfaceHolder.Callback { private final int mode_scottie1 = 5; private final int mode_scottie2 = 6; private final int mode_scottieDX = 7; + private final int mode_wrasseSC2_180 = 8; private final Thread thread = new Thread() { @Override @@ -173,6 +174,11 @@ public class ImageView extends SurfaceView implements SurfaceHolder.Callback { rsDecoder.invoke_scottieDX_mode(); } } + void wrasseSC2_180_mode() { + synchronized (thread) { + rsDecoder.invoke_wrasseSC2_180_mode(); + } + } void updateTitle(int id) { activity.updateTitle(activity.getString(id)); } void switch_mode(int mode) @@ -219,6 +225,11 @@ public class ImageView extends SurfaceView implements SurfaceHolder.Callback { imageHeight = 256; updateTitle(R.string.action_scottieDX_mode); break; + case mode_wrasseSC2_180: + imageWidth = 320; + imageHeight = 256; + updateTitle(R.string.action_wrasseSC2_180_mode); + break; default: break; } diff --git a/app/src/main/java/xdsopl/robot36/MainActivity.java b/app/src/main/java/xdsopl/robot36/MainActivity.java index f6e1f59..3611aa3 100644 --- a/app/src/main/java/xdsopl/robot36/MainActivity.java +++ b/app/src/main/java/xdsopl/robot36/MainActivity.java @@ -82,6 +82,9 @@ public class MainActivity extends Activity { case R.id.action_scottieDX_mode: view.scottieDX_mode(); return true; + case R.id.action_wrasseSC2_180_mode: + view.wrasseSC2_180_mode(); + return true; case R.id.action_debug_sync: view.debug_sync(); return true; diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index f8c2d77..bed4961 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -14,6 +14,8 @@ android:orderInCategory="100" android:showAsAction="never" /> + Scottie1 Mode Scottie2 Mode ScottieDX Mode + WrasseSC2-180 Mode diff --git a/app/src/main/rs/calibration_detector.rsh b/app/src/main/rs/calibration_detector.rsh index b600f09..9b926e5 100644 --- a/app/src/main/rs/calibration_detector.rsh +++ b/app/src/main/rs/calibration_detector.rsh @@ -115,6 +115,8 @@ static int calibration_detector(float dat_value, int dat_active, int cnt_active, return mode_scottie2; case 0xcc: return mode_scottieDX; + case 0xb7: + return mode_wrasseSC2_180; default: return -1; } diff --git a/app/src/main/rs/constants.rsh b/app/src/main/rs/constants.rsh index 11d2a8b..26c6d8f 100644 --- a/app/src/main/rs/constants.rsh +++ b/app/src/main/rs/constants.rsh @@ -25,6 +25,7 @@ static const int mode_martin2 = 4; static const int mode_scottie1 = 5; static const int mode_scottie2 = 6; static const int mode_scottieDX = 7; +static const int mode_wrasseSC2_180 = 8; static const float robot36_scanline_seconds = 0.15f; static const float robot72_scanline_seconds = 0.3f; @@ -33,5 +34,6 @@ static const float martin2_scanline_seconds = 0.226798f; static const float scottie1_scanline_seconds = 0.42822f; static const float scottie2_scanline_seconds = 0.277692f; static const float scottieDX_scanline_seconds = 1.0503f; +static const float wrasseSC2_180_scanline_seconds = 0.7110225f; #endif \ No newline at end of file diff --git a/app/src/main/rs/decoder.rs b/app/src/main/rs/decoder.rs index 2e951b0..62047d7 100644 --- a/app/src/main/rs/decoder.rs +++ b/app/src/main/rs/decoder.rs @@ -177,6 +177,7 @@ void decode(int samples) { case mode_scottie1: case mode_scottie2: case mode_scottieDX: + case mode_wrasseSC2_180: rgb_decoder(); break; default: diff --git a/app/src/main/rs/initialization.rsh b/app/src/main/rs/initialization.rsh index 1fb1e74..5871433 100644 --- a/app/src/main/rs/initialization.rsh +++ b/app/src/main/rs/initialization.rsh @@ -43,6 +43,7 @@ void initialize(float rate, int length, int width, int height) scottie1_scanline_length = scottie1_scanline_seconds * sample_rate; scottie2_scanline_length = scottie2_scanline_seconds * sample_rate; scottieDX_scanline_length = scottieDX_scanline_seconds * sample_rate; + wrasseSC2_180_scanline_length = wrasseSC2_180_scanline_seconds * sample_rate; const float pairwise_minimum_of_scanline_time_distances = 0.018226f; float deviation = 0.5f * pairwise_minimum_of_scanline_time_distances * sample_rate; diff --git a/app/src/main/rs/modes.rsh b/app/src/main/rs/modes.rsh index 8f010be..6c286c3 100644 --- a/app/src/main/rs/modes.rsh +++ b/app/src/main/rs/modes.rsh @@ -218,6 +218,25 @@ void scottieDX_mode() scanline_length = scottieDX_scanline_length; maximum_length = scanline_length + sync_porch_seconds * sample_rate; } +void wrasseSC2_180_mode() +{ + save_cnt = 0; + save_dat = 1; + *current_mode = mode_wrasseSC2_180; + const float tolerance = 0.5f; + const float sync_seconds = 0.0055225f; + const float sync_porch_seconds = 0.0005f; + const float rgb_scan_seconds = 0.235f; + sync_length = tolerance * sync_seconds * sample_rate; + r_begin = 0; + r_end = r_begin + rgb_scan_seconds * sample_rate; + g_begin = r_end; + g_end = g_begin + rgb_scan_seconds * sample_rate; + b_begin = g_end; + b_end = b_begin + rgb_scan_seconds * sample_rate; + scanline_length = wrasseSC2_180_scanline_length; + maximum_length = scanline_length + sync_porch_seconds * sample_rate; +} static void switch_mode(int new_mode) { @@ -245,6 +264,9 @@ static void switch_mode(int new_mode) case mode_scottieDX: scottieDX_mode(); break; + case mode_wrasseSC2_180: + wrasseSC2_180_mode(); + break; default: return; } diff --git a/app/src/main/rs/scanline_estimator.rsh b/app/src/main/rs/scanline_estimator.rsh index 361aac5..33c108b 100644 --- a/app/src/main/rs/scanline_estimator.rsh +++ b/app/src/main/rs/scanline_estimator.rsh @@ -63,6 +63,12 @@ static float scottieDX_estimator(int length) float deviation = length - scottieDX_scanline_length; return filter(&variance, deviation * deviation); } +static float wrasseSC2_180_estimator(int length) +{ + static ema_t variance = { 0.0f, ema_estimator_a }; + float deviation = length - wrasseSC2_180_scanline_length; + return filter(&variance, deviation * deviation); +} static int scanline_estimator(int sync_level) { @@ -83,11 +89,18 @@ static int scanline_estimator(int sync_level) float scottie1_var = scottie1_estimator(scanline_counter); float scottie2_var = scottie2_estimator(scanline_counter); float scottieDX_var = scottieDX_estimator(scanline_counter); + float wrasseSC2_180_var = wrasseSC2_180_estimator(scanline_counter); scanline_counter = 0; - float min_var = min(min(min(robot36_var, robot72_var), - min(martin1_var, martin2_var)), - min(min(scottie1_var, scottie2_var), scottieDX_var)); + float min_var = min( + min( + min(robot36_var, robot72_var), + min(martin1_var, martin2_var) + ), min( + min(scottie1_var, scottie2_var), + min(scottieDX_var, wrasseSC2_180_var) + ) + ); if (min_var > maximum_variance) return -1; @@ -105,6 +118,8 @@ static int scanline_estimator(int sync_level) return mode_scottie2; else if (min_var == scottieDX_var) return mode_scottieDX; + else if (min_var == wrasseSC2_180_var) + return mode_wrasseSC2_180; return -1; } diff --git a/app/src/main/rs/state.rsh b/app/src/main/rs/state.rsh index c318c4b..a695c44 100644 --- a/app/src/main/rs/state.rsh +++ b/app/src/main/rs/state.rsh @@ -40,5 +40,6 @@ static int martin2_scanline_length; static int scottie1_scanline_length; static int scottie2_scanline_length; static int scottieDX_scanline_length; +static int wrasseSC2_180_scanline_length; #endif \ No newline at end of file