From 9392c8cae2f1c24d7ea7455fe23fbeb3fd5bcf30 Mon Sep 17 00:00:00 2001
From: rmackay9 <rmackay9@yahoo.com>
Date: Thu, 18 Oct 2012 17:04:44 +0900
Subject: [PATCH] ArduCopter: added spi_semaphore to stop conflicts between
 dataflash and optical flow sensor on APM1

---
 ArduCopter/ArduCopter.pde | 9 +++++----
 ArduCopter/sensors.pde    | 2 +-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/ArduCopter/ArduCopter.pde b/ArduCopter/ArduCopter.pde
index 48c149fb7..bdb646c6b 100644
--- a/ArduCopter/ArduCopter.pde
+++ b/ArduCopter/ArduCopter.pde
@@ -171,11 +171,12 @@ APM_RC_APM1 APM_RC;
 ////////////////////////////////////////////////////////////////////////////////
 // Dataflash
 ////////////////////////////////////////////////////////////////////////////////
-#if CONFIG_APM_HARDWARE == APM_HARDWARE_APM2
+AP_Semaphore spi_semaphore;
 AP_Semaphore spi3_semaphore;
+#if CONFIG_APM_HARDWARE == APM_HARDWARE_APM2
 DataFlash_APM2 DataFlash(&spi3_semaphore);
 #else
-DataFlash_APM1 DataFlash;
+DataFlash_APM1 DataFlash(&spi_semaphore);
 #endif
 
 
@@ -227,9 +228,9 @@ AP_Compass_HMC5843 compass;
 
  #ifdef OPTFLOW_ENABLED
   #if CONFIG_APM_HARDWARE == APM_HARDWARE_APM2
-AP_OpticalFlow_ADNS3080 optflow(&spi3_semaphore,OPTFLOW_CS_PIN);
+AP_OpticalFlow_ADNS3080 optflow(OPTFLOW_CS_PIN);
   #else
-AP_OpticalFlow_ADNS3080 optflow(NULL,OPTFLOW_CS_PIN);
+AP_OpticalFlow_ADNS3080 optflow(OPTFLOW_CS_PIN);
   #endif
  #else
 AP_OpticalFlow optflow;
diff --git a/ArduCopter/sensors.pde b/ArduCopter/sensors.pde
index e708d0f4a..64cdbd2ed 100644
--- a/ArduCopter/sensors.pde
+++ b/ArduCopter/sensors.pde
@@ -51,7 +51,7 @@ static void init_compass()
 static void init_optflow()
 {
 #ifdef OPTFLOW_ENABLED
-    if( optflow.init(false, &timer_scheduler) == false ) {
+    if( optflow.init(false, &timer_scheduler, &spi_semaphore, &spi3_semaphore) == false ) {
         g.optflow_enabled = false;
         SendDebug("\nFailed to Init OptFlow ");
     }
-- 
GitLab