Fork to see if I can get working

Dependencies:   BufferedSerial OneWire WinbondSPIFlash libxDot-dev-mbed5-deprecated

Fork of xDotBridge_update_test20180823 by Matt Briggs

Files at this revision

API Documentation at this revision

Comitter:
Matt Briggs
Date:
Mon Feb 27 14:06:54 2017 -0700
Parent:
55:79ab0bbc5008
Child:
57:bdac7dd17af2
Commit message:
Updated test BBIO to v3. Added some sanity checks for LRR if on a new board.

Changed in this revision

xDotBridge/config.h Show annotated file Show diff for this revision Revisions of this file
xDotBridge/inc/BaseboardIO.h Show annotated file Show diff for this revision Revisions of this file
xDotBridge/inc/DS2408.h Show annotated file Show diff for this revision Revisions of this file
xDotBridge/manualTest/testBaseboardIO/testBaseboardIO.cpp Show annotated file Show diff for this revision Revisions of this file
xDotBridge/src/BaseboardIO.cpp Show annotated file Show diff for this revision Revisions of this file
xDotBridge/src/DS2408.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/xDotBridge/config.h	Mon Feb 27 08:06:36 2017 -0700
+++ b/xDotBridge/config.h	Mon Feb 27 14:06:54 2017 -0700
@@ -5,7 +5,7 @@
 #ifndef CONFIG_H_
 #define CONFIG_H_
 
-#define __TEST__ 1 // Comment out for main application
+//#define __TEST__ 1 // Comment out for main application
 
 // Manual test.  Comment out for main application.  Or comment for individual test.
 //#define __TEST_BBIO__
--- a/xDotBridge/inc/BaseboardIO.h	Mon Feb 27 08:06:36 2017 -0700
+++ b/xDotBridge/inc/BaseboardIO.h	Mon Feb 27 14:06:54 2017 -0700
@@ -86,7 +86,11 @@
     *
     * @return CmdResult
     */
-    CmdResult init();
+    CmdResult init()
+    {
+        return init(false);  // By default do not overwrite NVM
+    }
+    CmdResult init(bool overwriteNvm);
 
     ////////////////////////////////
     // Registering for interrupts //
--- a/xDotBridge/inc/DS2408.h	Mon Feb 27 08:06:36 2017 -0700
+++ b/xDotBridge/inc/DS2408.h	Mon Feb 27 14:06:54 2017 -0700
@@ -72,6 +72,8 @@
     */
     CmdResult registerRead(uint8_t addr, uint8_t &val);
 
+    CmdResult registerReadReliable(uint8_t addr, uint8_t &val);
+
     /**
     * @brief pioLogicRead()
     *
--- a/xDotBridge/manualTest/testBaseboardIO/testBaseboardIO.cpp	Mon Feb 27 08:06:36 2017 -0700
+++ b/xDotBridge/manualTest/testBaseboardIO/testBaseboardIO.cpp	Mon Feb 27 14:06:54 2017 -0700
@@ -2,12 +2,14 @@
 #include <string>
 #include "../../config.h"
 #include "BaseboardIO.h"
-#include "MTSLog.h"
+//#include "MTSLog.h"
+#include "dot_util.h"
 
 #ifdef __TEST_BBIO__
+mDot* dot = NULL; // Used by dot-utils
 Serial pc(USBTX, USBRX); // Externally defined
 
-const int VERSION = 2;
+const int VERSION = 3;
 
 char* bool2Str(bool in) {
     if (in) {
@@ -150,7 +152,8 @@
     pc.printf("= Baseboard Constructor Finished              =\r\n");
 
     pc.printf("= Baseboard Init Starting                     =\r\n");
-    result = bbio.init();
+    result = bbio.init(true); // Overwrite current NVM
+//    result = bbio.init(false);
     if (result == cmdSuccess) {
         pc.printf("= Baseboard Init Finished Successfully    =\r\n");
     }
--- a/xDotBridge/src/BaseboardIO.cpp	Mon Feb 27 08:06:36 2017 -0700
+++ b/xDotBridge/src/BaseboardIO.cpp	Mon Feb 27 14:06:54 2017 -0700
@@ -53,10 +53,12 @@
     mPortEx0 = NULL;
     mPortEx1 = NULL;
 }
-CmdResult BaseboardIO::init()
+CmdResult BaseboardIO::init(bool overwriteNvm)
 {
+    bool storedROMsGood = false;
+    uint8_t val;
     // Setup port expanders
-    if (readInfoFromNVM() == cmdSuccess) {
+    if (readInfoFromNVM() == cmdSuccess && !overwriteNvm) {
         logInfo("Stored ROM0 Addr: %02x:%02x:%02x:%02x:%02x:%02x:%02x%02x found.",
                 mNvmObj.mPortExpanderROM0[7],
                 mNvmObj.mPortExpanderROM0[6],
@@ -76,8 +78,25 @@
                 mNvmObj.mPortExpanderROM1[1],
                 mNvmObj.mPortExpanderROM1[0]);
         logInfo("BaseboardIO parameters successfully loaded from NVM");
+        // Check that the ROM Addresses are correct and valid
+        uint8_t portEx0Ctrl, portEx1Ctrl;
+        mPortEx0 = new DS2408(&mOWMaster, mNvmObj.mPortExpanderROM0);
+        mPortEx0->registerReadReliable(0x8D, portEx0Ctrl);
+        // Gets 0xFF if it is not the correct address
+        logInfo("PortEx0 Control register reads %02X", portEx0Ctrl);
+
+        mPortEx1 = new DS2408(&mOWMaster, mNvmObj.mPortExpanderROM1);
+        mPortEx1->registerReadReliable(0x8D, portEx1Ctrl);
+        logInfo("PortEx1 Control register reads %02X", portEx1Ctrl);
+        if ((portEx0Ctrl == 0xFF) || (portEx1Ctrl == 0xFF)) {
+            logError("Stored port expander ROM check failed.  Set EEPROM to defaults.");
+        }
+        else {
+            storedROMsGood = true;
+        }
     }
-    else { // EEPROM values not there or corrupt.  Should only happen in factory.
+    if (!storedROMsGood)
+    { // EEPROM values not there or corrupt.  Should only happen in factory.
         mNvmObj.setDefaults();
         // Find ROM address and test which one is which.  Requires user
         // switches to be in known state.
@@ -91,9 +110,14 @@
         else {
             logError("Baseboard config failed to save to NVM");
         }
+        mPortEx0 = new DS2408(&mOWMaster, mNvmObj.mPortExpanderROM0);
+        mPortEx0->registerReadReliable(0x8D, val);
+        // Gets 0xFF if it is not the correct address
+        logInfo("PortEx0 Control register reads %02X", val);
+        mPortEx1 = new DS2408(&mOWMaster, mNvmObj.mPortExpanderROM1);
+        mPortEx1->registerReadReliable(0x8D, val);
+        logInfo("PortEx1 Control register reads %02X", val);
     }
-    mPortEx0 = new DS2408(&mOWMaster, mNvmObj.mPortExpanderROM0);
-    mPortEx1 = new DS2408(&mOWMaster, mNvmObj.mPortExpanderROM1);
 
     // Put relay in known state
     if (relayNormal() != cmdSuccess) {
--- a/xDotBridge/src/DS2408.cpp	Mon Feb 27 08:06:36 2017 -0700
+++ b/xDotBridge/src/DS2408.cpp	Mon Feb 27 14:06:54 2017 -0700
@@ -19,6 +19,29 @@
     return cmdSuccess;
 }
 
+CmdResult DS2408::registerReadReliable(uint8_t addr, uint8_t &val)
+{
+    uint8_t result = 0;
+    uint8_t result1 = 0xFF;
+    uint8_t cmdResult;
+    cmdResult = registerRead(addr, result);
+    for (int i=0; i < DS2408_NRETRIES; i++) {
+        cmdResult = registerRead(addr, result1);
+        if (cmdResult != cmdSuccess) {
+            continue;
+        }
+        // Check they match
+        if (result == result1) {
+            val = result;
+            return cmdSuccess;
+        }
+        else {
+            result = result1;
+        }
+    }
+    return cmdTimeout;
+}
+
 CmdResult DS2408::registerRead(uint8_t addr, uint8_t &val)
 {
     uint8_t addrArray[] = {0x00, 0x00};
@@ -39,25 +62,7 @@
 
 CmdResult DS2408::pioLogicReliableRead(uint8_t &val)
 {
-    uint8_t result = 0;
-    uint8_t result1 = 0xFF;
-    uint8_t cmdResult;
-    cmdResult = pioLogicRead(result);
-    for (int i=0; i < DS2408_NRETRIES; i++) {
-        cmdResult = pioLogicRead(result1);
-        if (cmdResult != cmdSuccess) {
-            continue;
-        }
-        // Check they match
-        if (result == result1) {
-            val = result;
-            return cmdSuccess;
-        }
-        else {
-            result = result1;
-        }
-    }
-    return cmdTimeout;
+    return registerReadReliable(pioLogicStateReg, val);
 }
 
 CmdResult DS2408::pioLogicWrite(uint8_t val)