Fork to see if I can get working

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

Fork of xDotBridge_update_test20180823 by Matt Briggs

Revision:
53:a1563574a980
Parent:
52:64a2c71c7c49
Child:
54:c04d7b6fa075
--- a/xDotBridge/src/main.cpp	Tue Feb 21 15:33:57 2017 -0700
+++ b/xDotBridge/src/main.cpp	Wed Feb 22 10:45:56 2017 -0700
@@ -31,6 +31,8 @@
 
 
 int main() {
+    CommProtocolPeerBrute *protocol = new CommProtocolPeerBrute();
+    BaseboardIO *bbio = new BaseboardIO();
     CmdResult result;
     ccIntFlag = false;
     tamperIntFlag = false;
@@ -53,7 +55,19 @@
     dot->setLogLevel(mts::MTSLog::INFO_LEVEL);
 
     // attach the custom events handler
-    dot->setEvents(&events);  // Little bonus event debug information
+//    dot->setEvents(&events);  // Little bonus event debug information
+
+    // Finish radio init
+    protocol->init();
+
+    // save changes to configuration
+//    logInfo("saving configuration");
+//    core_util_critical_section_enter();
+//    bool dotConfigSaved = dot->saveConfig();
+//    core_util_critical_section_exit();
+//    if (!dotConfigSaved) {
+//        logError("failed to save configuration");
+//    }
 
     // Setup programmable voltage detector
     // PVD_LEVEL0 Falling 1.85
@@ -72,20 +86,14 @@
 //    logInfo("Programmable Voltage Detector set for level: %d", pvdConfig.PVDLevel);
 //    // HAL_PWR_PVDCallback need to define this I think this will override the current implementation
 
-//    dot->setWakePin(WAKE);
+    dot->setWakePin(GPIO3);
 
-    // save changes to configuration
-    logInfo("saving configuration");
-    if (!dot->saveConfig()) {
-        logError("failed to save configuration");
-    }
 
     // display configuration
-    display_config();
-    CommProtocolPeerBrute protocol;
-    BaseboardIO bbio;
+//    display_config();
 
-    result = bbio.init();
+    pc.printf("= Baseboard Init Starting                     =\r\n");
+    result = bbio->init();
     if (result == cmdSuccess) {
         pc.printf("= Baseboard Init Finished Successfully    =\r\n");
     }
@@ -97,74 +105,88 @@
     Callback<void()> ccInIntObj (&ccInIntCallback);
     Callback<void()> tamperIntObj (&tamperIntCallback);
     Callback<void()> pairBtnIntObj (&pairBtnIntCallback);
-    bbio.regCCInInt(ccInIntObj);
-    bbio.regTamperInt(tamperIntObj);
-    bbio.regPairBtnInt(pairBtnIntObj);
 
-    bbio.sampleUserSwitches();
-    bbio.relayNormal(); // Always force relay in known state
+    bbio->sampleUserSwitches();
+    bbio->relayNormal(); // Always force relay in known state
 
+    unsigned int intCnt = 0; // Just a quick temp varaible to keep track of ints
     /**
      * Main Loop
      */
     while (true) {
         std::vector<uint8_t> data;
-        bbio.ledOff();
+        bbio->ledOff();
 
         // Sample IO and update any configuration
-        bool prevCCNormallyOpen = bbio.isCCNO();
-        bbio.sampleUserSwitches();
-        if (prevCCNormallyOpen == bbio.isCCNO()) { // Only activate the coil if the DIP SW has changed
-            bbio.relayNormal();
+        bool prevCCNormallyOpen = bbio->isCCNO();
+        bbio->sampleUserSwitches();
+        if (prevCCNormallyOpen == bbio->isCCNO()) { // Only activate the coil if the DIP SW has changed
+            bbio->regCCInInt(ccInIntObj);
+            bbio->regTamperInt(tamperIntObj);
+            bbio->regPairBtnInt(pairBtnIntObj);
+            bbio->relayNormal();
         }
-        if (bbio.isTx()) {
-            protocol.setTx(true);
+        if (bbio->isTx()) {
+            protocol->setTx(true);
         }
         else { // RX
-            protocol.setTx(false);
+            protocol->setTx(false);
         }
         // End sample and update
 
-		if (protocol.isTx()) {
+		if (protocol->isTx()) {
+            logInfo("Got int #%d. CCFlag %d, TamperFlag %d, PairBtnFlag %d",
+                    intCnt, ccIntFlag, tamperIntFlag, pairBtnIntFlag);
+            // TODO add tamper
+            if (pairBtnIntFlag) { // Wait up to 1 second for short button hit
+                for (int i=0; i<10;i++) {
+                    if (bbio->isPairBtn() == false){ // Button released
+                        break;
+                    }
+                    wait(0.1);
+                }
+            }
 		    if (ccIntFlag || // If contact closure in
-		       (tamperIntFlag && (bbio.isPairBtn() == false))) { // If short pair btn hit
+		       (pairBtnIntFlag && (bbio->isPairBtn() == false))) { // If short pair btn hit
 
                 ccIntFlag = false;
                 tamperIntFlag = false;
+                pairBtnIntFlag = false;
                 #if LED_FEEDBACK
-                bbio.ledOn();
+                bbio->ledOn();
                 #endif
 
                 data.push_back((seqNum >> 8) & 0xFF);
                 data.push_back(seqNum & 0xFF);
-                protocol.send(data);
+                protocol->send(data);
                 seqNum++;
                 wait(0.5); // Leave the LED on so a person can see it.
 		    }
 
-            bbio.ledOff();
+            bbio->ledOff();
 //            sleep_save_io();
 //            sleep_configure_io();
             dot->sleep(0, mDot::INTERRUPT, false);  // Go to sleep until wake button
-            sleep_restore_io();
+//            sleep_restore_io();
 		}
 
-		if (protocol.isRx()) {
+		if (protocol->isRx()) {
 		    bool msgPending;
-		    protocol.listen(msgPending);
+		    protocol->listen(msgPending);
+		    logInfo("Listening.");
 		    if (msgPending) {
-		        protocol.recv(data);
+		        protocol->recv(data);
                 std::string dataStr(data.begin(), data.end());
                 logInfo("Got msg num: %d, payload: %s", seqNum, dataStr.c_str());
-                bbio.relayAlert();
+                bbio->relayAlert();
                 seqNum++;
                 #if LED_FEEDBACK
-                bbio.ledOn();
+                bbio->ledOn();
                 #endif
                 wait(0.5); // TODO this should be configurable
 		    }
-            bbio.ledOff();
-            bbio.relayNormal();
+            bbio->ledOff();
+            bbio->relayNormal();
             logInfo("Sleeping.  Time %d", us_ticker_read());
 //            sleep_save_io();
 //            sleep_configure_io();
@@ -180,6 +202,7 @@
         // Need to re-implement some of these sleep functions
 //		sleep_save_io();
 //		sleep_configure_io();
+        intCnt++;
     }
 
     return 0;