From 256c06290b0db37a54eac70a39fb8ac58ac46e9f Mon Sep 17 00:00:00 2001
From: "Michael D. M. Dryden" <mdryden@chem.utoronto.ca>
Date: Wed, 20 Jan 2016 18:12:47 -0500
Subject: [PATCH] Fix TCS driver to detect unconnected module.

---
 DSTAT/src/config/conf_board.h |  2 +-
 DSTAT/src/experiment.c        | 12 +++++++-----
 DSTAT/src/settings.c          |  4 ++--
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/DSTAT/src/config/conf_board.h b/DSTAT/src/config/conf_board.h
index a57fbf6..4d91cab 100644
--- a/DSTAT/src/config/conf_board.h
+++ b/DSTAT/src/config/conf_board.h
@@ -14,7 +14,7 @@
 
 // Default Settings (only used if EEPROM is empty)
 #define SETTINGS_MAX5443_OFFSET 0
-#define SETTINGS_TCS_ENABLED 0
+#define SETTINGS_TCS_ENABLED 1
 #define SETTINGS_TCS_CLEAR_THRESHOLD 10000U
 #define SETTINGS_R100_TRIM 0
 #define SETTINGS_R3k_TRIM 0
diff --git a/DSTAT/src/experiment.c b/DSTAT/src/experiment.c
index e2dde88..3da1d45 100644
--- a/DSTAT/src/experiment.c
+++ b/DSTAT/src/experiment.c
@@ -140,16 +140,18 @@ void experiment_handler(char command){
                 if (settings.settings.tcs_enabled > 0){
                     tcs_readvalues(tcs_data);
                     delay_ms(25);
-                    tcs_readvalues(tcs_data1); // If sensor disconnected, second measurement should be exactly the same
+                    tcs_readvalues(tcs_data1); // If sensor disconnected, second measurement should be exactly the same (unless 0 or saturated)
+                    if (tcs_data[3] == tcs_data1[3]){
+                        if (!(tcs_data[3] == 0 || tcs_data[3] == 65535)) {
+                            printf("#ERR: Ambient light sensor seems to be disconnected \n\r");
+                            return;
+                        }
+                    }
                     if (tcs_data[0] > settings.settings.tcs_clear_threshold){
                         printf("#ERR: Ambient light exceeds threshold %u\n\r", tcs_data[0]);
                         printf("#INFO: TCS—%u %u %u %u\n\r", tcs_data[0], tcs_data[1], tcs_data[2], tcs_data[3]);
                         return;
                     }
-                    else if (tcs_data[3] == tcs_data1[3]){
-                        printf("#ERR: Ambient light sensor seems to be disconnected \n\r");
-                        return;
-                    }
                 }
                 else {
                     printf("#ERR: Ambient light sensor disabled.\n\r");
diff --git a/DSTAT/src/settings.c b/DSTAT/src/settings.c
index b68b37c..ac6e6ad 100644
--- a/DSTAT/src/settings.c
+++ b/DSTAT/src/settings.c
@@ -51,8 +51,8 @@ void settings_read_eeprom(void){
         settings_restore_defaults();
     }
     printf("#INFO: max5443_offset = %u\n\r", settings.settings.max5443_offset);
-    printf("#INFO: tls_enabled = %u\n\r", settings.settings.tcs_enabled);
-    printf("#INFO: tls_clear_threshold = %u\n\r", settings.settings.tcs_clear_threshold);
+    printf("#INFO: tcs_enabled = %u\n\r", settings.settings.tcs_enabled);
+    printf("#INFO: tcs_clear_threshold = %u\n\r", settings.settings.tcs_clear_threshold);
     printf("#INFO: r100_trim = %i\n\r", settings.settings.r100_trim);
     printf("#INFO: r3k_trim = %i\n\r", settings.settings.r3k_trim);
     printf("#INFO: r30k_trim = %i\n\r", settings.settings.r30k_trim);
-- 
GitLab