Component Test's Software to work with "Universal Controller Box" - Software is an interpreter or "compiler" for programs to be done with a .txt file and read off of the SD Card

Dependencies:   BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed

Revision:
8:e9f836163229
Parent:
7:cca801103b86
Child:
9:5a0c4c6e39c7
--- a/main.cpp	Tue Sep 23 23:44:16 2014 +0000
+++ b/main.cpp	Wed Sep 24 01:46:02 2014 +0000
@@ -1,4 +1,3 @@
-
 #include "mbed.h"
 #include "LocalPinNames.h"
 #include "BridgeDriver.h"
@@ -171,27 +170,13 @@
         if (k == numParam - 1)
             last = 1;
             
-       if (!last && (prevCondition != AND || prevCondition != OR)){
+       if (!last){
             if (paramCondition[k].op != xAND && paramCondition[k].op != xOR && paramCondition[k + 1].op != xAND && paramCondition[k + 1].op != xOR){
-                lcd.setAddress(0,3);
-                lcd.printf("Test 0.1     ");
-                wait(1);
-                
                 //AND
                 if (paramCondition[k].op == AND){
-                     lcd.setAddress(0,3);
-                    lcd.printf("Test 1.1     ");
-                    wait(1);
-                    if (!first && prevCondition != xAND && prevCondition != xOR){
-                    lcd.setAddress(0,3);
-                    lcd.printf("Test 1.11     ");
-                    wait(1);
+                    if (!first && prevCondition != xAND && prevCondition != xOR)
                         combinedCondition.back().value = combinedCondition.back().value && paramCondition[k + 1].value;
-                        }
                     else if (first || prevCondition == xAND || prevCondition == xOR){
-                        lcd.setAddress(0,3);
-                    lcd.printf("Test 1.12     ");
-                    wait(1);
                         tempCombinedCondition.value = paramCondition[k].value && paramCondition[k + 1].value; 
                         combinedCondition.push_back(tempCombinedCondition);
                         first = 0;
@@ -201,19 +186,9 @@
                 
                 //OR
                 else if (paramCondition[k].op == OR){
-                    lcd.setAddress(0,3);
-                    lcd.printf("Test 1.2     ");
-                    wait(1);
-                    if (!first && prevCondition != xAND && prevCondition != xOR){
-                        lcd.setAddress(0,3);
-                    lcd.printf("Test 1.3     ");
-                    wait(1);
+                    if (!first && prevCondition != xAND && prevCondition != xOR)
                         combinedCondition.back().value = combinedCondition.back().value || paramCondition[k + 1].value;
-                        }
                     else if (first || prevCondition == xAND || prevCondition == xOR){
-                        lcd.setAddress(0,3);
-                    lcd.printf("Test 1.4     ");
-                    wait(1);
                         tempCombinedCondition.value = paramCondition[k].value || paramCondition[k + 1].value; 
                         combinedCondition.push_back(tempCombinedCondition);
                         first = 0;
@@ -224,61 +199,58 @@
             
             // first value is something, not exclusive, but next values are exclusive
             else if (first && (paramCondition[k].op == AND || paramCondition[k].op == OR) && (paramCondition[k + 1].op == xAND || paramCondition[k + 1].op == xOR)){
-                lcd.setAddress(0,3);
-                lcd.printf("Test 1     ");
-                wait(1);
                 tempCombinedCondition.value = paramCondition[k].value;
                 tempCombinedCondition.op = paramCondition[k].op;
                 combinedCondition.push_back(tempCombinedCondition);
                 prevCondition = paramCondition[k].op;
                 first = 0;
-                lcd.setAddress(0,3);
-                lcd.printf("1cCval: %d   ", combinedCondition.back().value);
-                wait(1);
             }
             
             else{   
-                /*lcd.setAddress(0,3);
-                lcd.printf("Test 0.2     ");
-                wait(1);*/
                 //xAND
-                if (paramCondition[k].op == xAND && prevCondition == xAND){
-                        lcd.setAddress(0,3);
-                    lcd.printf("Test 2.1     ");
-                    wait(1);
-                    combinedCondition.back().value = combinedCondition.back().value && paramCondition[k + 1].value;
-                    prevCondition = xAND;
-                }
-                else if (paramCondition[k].op == xAND && prevCondition != xAND){
-                     lcd.setAddress(0,3);
-                    lcd.printf("Test 2.2    ");
-                    wait(1);
-                    tempCombinedCondition.value = paramCondition[k].value && paramCondition[k + 1].value; 
-                    combinedCondition.push_back(tempCombinedCondition);
-                    prevCondition = xAND;
+                if (paramCondition[k].op == xAND){
+                    if (combinedCondition.size() == 0){ // No values so start a new combinedCondition
+                        tempCombinedCondition.value = paramCondition[k].value && paramCondition[k + 1].value;
+                        tempCombinedCondition.op = xAND;
+                        combinedCondition.push_back(tempCombinedCondition);
+                        prevCondition = xAND;
+                    }
+                    else{
+                         if (combinedCondition.back().op == xAND){ // AND the value to the back most combinedCondition
+                            combinedCondition.back().value = combinedCondition.back().value && paramCondition[k + 1].value;
+                            prevCondition = xAND;
+                        }
+                        else if (combinedCondition.back().op != xAND){ // Start a new combinedCondition
+                            tempCombinedCondition.value = paramCondition[k].value && paramCondition[k + 1].value; 
+                            tempCombinedCondition.op = xAND;
+                            combinedCondition.push_back(tempCombinedCondition);
+                            prevCondition = xAND;
+                        }
+                    }
+                        
                 }
                 
                 //xOR
-                else if (paramCondition[k].op == xOR && prevCondition == xOR){
-                     lcd.setAddress(0,3);
-                    lcd.printf("Test 2.3     ");
-                    wait(1);
-                    combinedCondition.back().value = combinedCondition.back().value || paramCondition[k + 1].value;
-                    prevCondition = xOR;
-                    lcd.setAddress(0,3);
-                    lcd.printf("2.3cCval: %d   ", combinedCondition.back().value);
-                    wait(1);
-                }
-                else if (paramCondition[k].op == xOR && prevCondition != xOR){
-                     lcd.setAddress(0,3);
-                    lcd.printf("Test 2.4     ");
-                    wait(1);
-                    tempCombinedCondition.value = paramCondition[k].value || paramCondition[k + 1].value; 
-                    combinedCondition.push_back(tempCombinedCondition);
-                    prevCondition = xOR;
-                    lcd.setAddress(0,3);
-                    lcd.printf("2.4cCval: %d   ", combinedCondition.back().value);
-                    wait(1);
+                else if (paramCondition[k].op == xOR){
+                    if (combinedCondition.size() == 0){ // No values so start a new combinedCondition
+                        tempCombinedCondition.value = paramCondition[k].value || paramCondition[k + 1].value; 
+                        tempCombinedCondition.op = xOR;
+                        combinedCondition.push_back(tempCombinedCondition);
+                        prevCondition = xOR;
+                    }
+                    else{
+                         if (combinedCondition.back().op == xOR){ // OR the value to the back most combinedCondition
+                            combinedCondition.back().value = combinedCondition.back().value || paramCondition[k + 1].value;
+                            prevCondition = xOR;
+                        }
+                        else if (combinedCondition.back().op != xOR){ // Start a new combinedCondition
+                            tempCombinedCondition.value = paramCondition[k].value || paramCondition[k + 1].value; 
+                            tempCombinedCondition.op = xOR;
+                            combinedCondition.push_back(tempCombinedCondition);
+                            prevCondition = xOR;
+                        }
+                    }
+                        
                 }
                 
                 // Since the k + 1 value is included in the xAND or xOR exclusively, skip checking that value, and add the appropriate AND / OR as the
@@ -290,13 +262,12 @@
                 
             }
        }
-        
-        //else if (last && (prevCondition != AND || prevCondition != OR)){
             
         
-        //the last value was not included in any combination, since directly before the last value was an xAND / xOR set that
-        // included the very last AND / OR as the set's operator
-        else if (last && (prevCondition != AND || prevCondition != OR)){
+        // the last value was not included in any combination, since directly before the last value was an xAND / xOR set that
+        // included the very last AND / OR as the set's operator, yet there is still another value that has not been combined, as it is supposed
+        // to be AND /OR to the exclusive xAND / xOR set
+        else if (last && (prevCondition == xAND || prevCondition == xOR) && (combinedCondition.back().op == AND || combinedCondition.back().op == OR)){
             tempCombinedCondition.value = paramCondition[k].value;
             tempCombinedCondition.op = NONE; 
             combinedCondition.push_back(tempCombinedCondition);
@@ -306,10 +277,6 @@
         tempCombinedCondition = ConditionOp();
     }
         
-        
-        lcd.setAddress(0,3);
-                lcd.printf("cCsize: %d   ", combinedCondition.size());
-                wait(1);
                 
     // run through all values in the combined Condition vector, AND'ing / OR'ing as appropriate
     // in the end, the last value in the array should be the final condition of the Condition statement... whether it was successful or failed
@@ -604,7 +571,7 @@
             getNextLine(selectedFile, lineData);
             int checkEnd = interpretCommand(selectedFile, lineData);   
                     
-            if (checkEnd == 0)
+            if (checkEnd == 2)
                 endOfFile = 1;
         }