From e2d84e10a93643e23780776b0a414d147e0eb3ef Mon Sep 17 00:00:00 2001
From: Andrew Tridgell <tridge@samba.org>
Date: Sat, 29 Sep 2012 09:47:36 +1000
Subject: [PATCH] APM_OBC: cope with half frames on failsafe board

---
 .../APM_OBC/Failsafe_Board/Failsafe_Board.pde    | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/libraries/APM_OBC/Failsafe_Board/Failsafe_Board.pde b/libraries/APM_OBC/Failsafe_Board/Failsafe_Board.pde
index 403107e92..384dc0a90 100644
--- a/libraries/APM_OBC/Failsafe_Board/Failsafe_Board.pde
+++ b/libraries/APM_OBC/Failsafe_Board/Failsafe_Board.pde
@@ -125,7 +125,7 @@ static void set_servos_terminate(uint8_t obc_mode)
 {
 	set_mux_mode(MUX_MODE_MICRO);
 	if (obc_mode) {
-		set_servos(1000, 2000, 1000, 1000);
+		set_servos(1100, 1824, 1040, 1131);
 	} else {
 		set_servos(1500, 1500, 1200, 1500);
 	}
@@ -165,6 +165,7 @@ void loop()
 	static uint8_t led_state;
 	static bool has_terminated = false;
 	static uint8_t termination_counter;
+	static uint8_t max_termination_counter;
 	static uint16_t loop_counter;
 
 	loop_counter++;
@@ -185,11 +186,11 @@ void loop()
 	static uint8_t last_mode_manual;
 	if (!receiver_fail) {
 		if (manual_mode) {
-			if (last_mode_manual < 255) {
+			if (last_mode_manual < 32) {
 				last_mode_manual++;
 			}
-		} else {
-			last_mode_manual = 0;
+		} else if (last_mode_manual > 0) {
+			last_mode_manual--;
 		}
 	}
 
@@ -210,6 +211,9 @@ void loop()
 		Serial.print(" TERM1:"); Serial.print(terminate_primary);
 		Serial.print(" TERM2:"); Serial.print(terminate_backup);
 		Serial.print(" RFAIL:"); Serial.print(receiver_fail);
+		Serial.print(" TC:"); Serial.print(termination_counter);
+		Serial.print(" MTC:"); Serial.print(max_termination_counter);
+		Serial.print(" LMM:"); Serial.print(last_mode_manual);
 		Serial.print(" TERMINATED:"); Serial.print(has_terminated);
 		Serial.print(" LOOP:"); Serial.print(loop_counter);
 		Serial.println();
@@ -229,6 +233,7 @@ void loop()
 			has_terminated = false;
 			termination_counter = 0;
 			last_mode_manual = 0;
+			max_termination_counter = 0;
 		}
 	}
 
@@ -260,6 +265,9 @@ void loop()
 	} else {
 		termination_counter = 0;
 	}
+	if (termination_counter > max_termination_counter) {
+		max_termination_counter = termination_counter;
+	}
 
 	// use the termination counter to debounce the termination
 	// pins
-- 
GitLab