Fork to see if I can get working
Dependencies: BufferedSerial OneWire WinbondSPIFlash libxDot-dev-mbed5-deprecated
Fork of xDotBridge_update_test20180823 by
Revision 56:40b454c952cc, committed 2017-02-27
- 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
--- 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)
