Console Serial IO con display OLED e seriale asincrona

Dependencies:   mbed BufferedSerial AserialIOFuncLib SSD1306 TerminalPlusV2

Fork of SerialIO by Max Scordamaglia

Console Serial IO con display OLED e seriale asincrona

Files at this revision

API Documentation at this revision

Comitter:
MaxScorda
Date:
Sat Jan 09 00:53:41 2016 +0000
Parent:
40:48422add4537
Child:
42:8ca8ff1ab387
Commit message:
Inizio +-

Changed in this revision

Functions.h Show annotated file Show diff for this revision Revisions of this file
choiceFunctions.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Functions.h	Sun Jan 03 14:32:39 2016 +0000
+++ b/Functions.h	Sat Jan 09 00:53:41 2016 +0000
@@ -133,16 +133,24 @@
         errp=RfuncOut(func, funcnum,param);
     }
 
-    //start DA FARE!!!!!!!!!
+    //start
     else if (strIn.substr(0,5)=="start") {
         errp=StartfuncOut();
     }
 
-    //stop DA FARE!!!!!!!!!
+    //stop
     else if (strIn.substr(0,4)=="stop") {
         errp=StopfuncOut();
     }
 
+    else if (func=="+") {
+        errp=plusOut(func,string(stringa));
+    }
+
+    else if (func=="-") {
+        errp=minusOut(func,string(stringa));
+    }
+
     // comando fuori parsing
     if (errp==1) {
         term.forgcol(1);
@@ -151,7 +159,7 @@
         ardser.printf("Bad command\n\r");
         printDisp(dispType,"** Bad command ** \n\r");
     }
-   if (errp==0) term.readypos(); //riposiziono solo solo se a 0
+    if (errp==0) term.readypos(); //riposiziono solo solo se a 0
 }
 
 
@@ -178,6 +186,10 @@
     else if (func=="f") {
         errp=functionIn(func, stringa);
     }
+    //Parametri in ingresso
+    else if (func=="g") {
+        errp=getParamIn(func, stringa);
+    }
     //start
     else if (strIn.substr(0,4)=="start") {
         errp=StartfuncIn();
@@ -188,7 +200,7 @@
     }
     //Valori funzione in input
     else if (func=="v") {
-       errp=valueIn(stringa);
+        errp=valueIn(stringa);
     }
 
 //writeLogInput( strIn{
@@ -216,7 +228,7 @@
     menu_function[0]="Z.Z";
 
     status=false; //accensione
-    randomActivate=true;
+    randomActivate=false;
     term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS("Off")),11,p16,10,1);
     term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS("True")),39,p17,10,1);
 
--- a/choiceFunctions.h	Sun Jan 03 14:32:39 2016 +0000
+++ b/choiceFunctions.h	Sat Jan 09 00:53:41 2016 +0000
@@ -41,8 +41,9 @@
 //---------------------------------------------------------------------------------------------
 }
 
-void writeFunctionVal(string strIn)
+int trovaIndiceFunzione(string strIn)
 {
+    //data la stringa di menu e funzione, restituisce l'indice
     int idx=0;
     bool trovato=false;
     //cerca valore. Per ora facciamo cosi, poi si vede se indicizzarlo
@@ -50,8 +51,16 @@
         if ((strIn.substr(0,1)==fnzAdd.i2s(function_val[idx][0])) && (strIn.substr(2,1)==fnzAdd.i2s(function_val[idx][1]))) trovato=true;
         else idx++;
     }
+    return idx;
+}
+
+
+void writeFunctionVal(string strIn)
+{
+    //scrivi a video i valori funzione
+    int idx=trovaIndiceFunzione(strIn);
     //stampo
-    if (trovato==true) { //non dovrebbe servire
+    if (idx<50) { //non dovrebbe servire
         term.formatPrintf(fnzAdd.string2char(fnzAdd.i2s(function_val[idx][2])),50,16,10); //min
         term.formatPrintf(fnzAdd.string2char(fnzAdd.i2s(function_val[idx][5])),60,16,10); //start
         term.formatPrintf(fnzAdd.string2char(fnzAdd.i2s(function_val[idx][3])),70,16,10); //max
@@ -129,11 +138,12 @@
                 bbold=0;
                 prefix=" ";
             }
-            term.formatPrintf(fnzAdd.string2char(prefix+menu_funcChoice[i]),41,4+i,38,bbold);
+            term.formatPrintf(fnzAdd.string2char(prefix+menu_funcChoice[i]),41,4+i,38,bbold); //stampo funzione in bold
         }
+        writeFunctionVal(menu_funcChoice[funcidx].substr(0,3)); //scrivo valore
     }
 
-   // errp=0; //per ora non fa nulla, vedere se tenere a uso futuro
+    // errp=0; //per ora non fa nulla, vedere se tenere a uso futuro
     return errp;
 }
 
@@ -155,13 +165,16 @@
         funcidx=contoldfun;
         term.formatPrintf(fnzAdd.string2char("*"+menu_funcChoice[funcidx]),41,4+funcidx,38);
         term.resetattrib();
+        //invio ad arduino
+        //ardser.printf(fnzAdd.string2char("f"+fnzAdd.padstr(fnzAdd.i2s(trovaIndiceFunzione(menu_funcChoice[funcidx])),2,' ')+"\r")); // no, questa passa il valore dell'indice
+        ardser.printf(fnzAdd.string2char("f"+funcc+"\r"));
         // scrivo valori della funzione a video
         writeFunctionVal(menu_funcChoice[funcidx].substr(0,3));
         //display
         term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS("Set Funzione "+funcc+"\n")),61,p52,99,1); //p52
         printDisp(dispType,fnzAdd.string2char(fnzAdd.addEOS("Set Funzione "+funcc+"\r")));
-        //errp=0;
-    } else errp=0; //stampo solo all'ultimo
+        errp=0;
+    }
     return errp;
 }
 
@@ -180,12 +193,15 @@
         menuidx=atoi(fnzAdd.string2char(funcc));
         term.formatPrintf(fnzAdd.string2char("*"+menu_main[menuidx]),1,4+menuidx,19);
         term.resetattrib();
+        //invio ad arduino
+        ardser.printf(fnzAdd.string2char("m"+funcc+"\r"));
         //setto funzioni
         funcfromMenu(menuidx);
         //display
         term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS("Set Menu "+funcc+"\n")),61,p52,99,1); //p52
         printDisp(dispType,fnzAdd.string2char(fnzAdd.addEOS("Set Menu "+funcc+"\r")));
-    } else errp=0; //stampo solo all'ultimo
+        errp=0;
+    }
     return errp;
 }
 
@@ -216,6 +232,8 @@
 //********************* Start
 bool StartfuncOut()
 {
+    status=true;
+    term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS("On")),11,p16,10,1);
     term.formatPrintf("Start\n",21,p51,8,1); //p51
     term.formatPrintf("Start H-Ard\n",61,p52,99,1);   //p52
     ardser.printf("start\r");
@@ -226,6 +244,8 @@
 //********************* Stop
 bool StopfuncOut()
 {
+    status=false;
+    term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS("Off")),11,p16,10,1);
     term.formatPrintf("Stop\n",21,p51,8,1); //p51
     term.formatPrintf("Stop H-Ard\n",61,p52,99,1);   //p52
     ardser.printf("stop\r");
@@ -233,6 +253,31 @@
     return 0;
 }
 
+//********************* Plus
+bool plusOut(string func, string sstr)
+{
+    //aumenta la funzione
+    bool errp=1;
+    string funcc;
+    funcc=sstr.substr(1,1);
+    if ((funcc>="0") && (funcc<="9")) {
+        errp=0;
+    }
+    return errp;
+}
+
+//********************* Minus
+bool minusOut(string func, string sstr)
+{
+    //aumenta la funzione
+    bool errp=1;
+    string funcc;
+    funcc=sstr.substr(1,1);
+    if ((funcc>="0") && (funcc<="9")) {
+        errp=0;
+    }
+    return errp;
+}
 
 /************************ IN Function *****************************/
 /******************************************************************/
@@ -250,6 +295,7 @@
     if ((funcc>="0") && (funcc<="9")) {
         //trasformo in intero
         funcn=atoi(fnzAdd.string2char(funcc));
+        menuidx=funcn;
         //assegno menu al vettore
         menu_main[funcn]=fnzAdd.addEOS(sstr.substr(3,20));
         //*** tolti in attesa di regolare la sincronizzazione
@@ -296,7 +342,35 @@
     return errp;
 }
 
-//********************* Start
+//********************** Parametri in ingresso
+bool getParamIn(string func, string sstr)
+{
+    //Sintassi: gpx
+    //G:costante
+    //P:0-menu 1-funzione 2-onoff 3-random
+    //X:valore
+    bool errp=1;
+    int ttype=atoi(fnzAdd.string2char(sstr.substr(1,1)));
+    switch (ttype) {
+        case 0: //menu
+            menuOut("m", "m"+sstr.substr(2,1));
+            break;
+        case 1: //function
+            funcOut("f", "f"+sstr.substr(2,1));
+            break;
+        case 22: //onoff
+            if (sstr.substr(2,1)=="1") StartfuncOut();
+            else  StopfuncOut();
+            break;
+        case 3:
+            //////////// fare random!!!!
+            break;
+    }
+    errp=0;
+    return errp;
+}
+
+//********************* Start //!!!!!!!!!!da fare
 bool StartfuncIn()
 {
     term.formatPrintf("*\n",26,p51,8,1); //p51
@@ -305,7 +379,7 @@
     return 1;
 }
 
-//********************* Start
+//********************* Start //!!!!!!!!!!!!!!!!da fare
 bool StopfuncIn()
 {
     term.formatPrintf("*\n",26,p51,8,1); //p51
@@ -327,46 +401,23 @@
     xxxx-valore
     */
     bool errp=1;
+    int vval=atoi(fnzAdd.string2char(sstr.substr(6,4)));
     int idx=atoi(fnzAdd.string2char(sstr.substr(1,2)));
-    int vval=atoi(fnzAdd.string2char(sstr.substr(6,4)));
-    // term.formatPrintf(fnzAdd.string2char("*"+fnzAdd.i2s(idx)),50,16,10);
     if (sstr.substr(0,1)=="v") {
-        function_val[idx][0]=atoi(fnzAdd.string2char(sstr.substr(3,1))); //MENU
-        function_val[idx][1]=atoi(fnzAdd.string2char(sstr.substr(4,1))); //FUNZIONE
+        if (idx!=99) { //se l'indice passato e' ignoto perche' e' un update, cercalo, se un primo giro crealo
+            function_val[idx][0]=atoi(fnzAdd.string2char(sstr.substr(3,1))); //MENU
+            function_val[idx][1]=atoi(fnzAdd.string2char(sstr.substr(4,1))); //FUNZIONE
+        } else {
+            //cerca valore. Per ora facciamo cosi, poi si vede se indicizzarlo
+            idx=trovaIndiceFunzione(sstr.substr(3,1)+"."+sstr.substr(4,1));
+        }
         function_val[idx][2+atoi(fnzAdd.string2char(sstr.substr(5,1)))] =vval; //tipo
         //errp=0;
     }
     return errp;
 }
 
-//********************* ?????????????????????????????
-bool NfuncIn(string func, string funcnum, string param, char* arr)
-{
-    bool errp=1;
-    if ((funcnum>="0") && (funcnum<="9")) {
-        term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS(param)),21,p51,8,1); //p51
-        // vale la pena creare una funzione di parametri da formalizzare
-        for (int i = 0; i < 6; i++) term.formatPrintf(" ",23+(i*4),12,1,1);
-        term.formatPrintf(fnzAdd.string2char(param.substr(0,2)+"*"),21+(fnzAdd.c2i(arr[1])*4),12,1,1); //p11 //p12 //p21
-        printDisp(dispType,"NFuncIn\n\r");
-        printDisp(dispType,fnzAdd.string2char(fnzAdd.addEOS("  "+func+funcnum+param+"\r")));
-        //ardser.printf(fnzAdd.string2char(fnzAdd.addEOS(func+"-"+funcnum+"-"+param)));
-        errp=0;
-        //    }
-    }
-    return errp;
-}
-
-//********************* Boot
-bool bootfuncIn()
-{
-    term.formatPrintf("*\n",26,p51,8,1); //p51
-    term.formatPrintf("boot\n",21,p51,8,1); //p51
-    term.formatPrintf("Arduino Boot\n",61,p52,99,1);   //p52
-    ardser.printf("rl\r");
-    return 1;
-}
-
+//**************************************** altre
 int contaMenuFunc()
 {
     //funzione che conta le voci di menu in essere
--- a/main.cpp	Sun Jan 03 14:32:39 2016 +0000
+++ b/main.cpp	Sat Jan 09 00:53:41 2016 +0000
@@ -22,7 +22,7 @@
 int cont=0;
 int dispType=0; //0:oled  1:lcd
 bool status=false; //accensione
-bool randomActivate=true; //se true attiva sul sequencer il cambio di valori casuali
+bool randomActivate=false; //se true attiva sul sequencer il cambio di valori casuali
 
 string menu_main[10];
 string menu_funcChoice[10];