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

Revision:
39:0d7165083e7a
Parent:
38:d88296cbb39c
Child:
40:48422add4537
--- a/choiceFunctions.h	Thu Dec 24 01:38:56 2015 +0000
+++ b/choiceFunctions.h	Sun Dec 27 23:15:53 2015 +0000
@@ -1,3 +1,50 @@
+// istanze di funzioni per metterle poi dove si vuole
+bool funcfromMenu(int);
+//-------------------------------------------------
+
+void choiceVideoSettings()
+{
+    string prefix;
+    //stampo menu
+    menuidx=3;
+    for (int i =  0; i<10 ; i++) {
+        if (i==menuidx) {
+            term.bold();
+            prefix="*";
+        } else {
+             term.resetattrib();
+            //term.forgcol(7);
+            prefix=" ";
+        }
+        term.formatPrintf(fnzAdd.string2char(prefix+menu_main[i]),1,4+i,19);
+    }
+    //info terminale
+    term.formatPrintf("Menu Add \n",61,p52,19,1); //p52
+    //setto asterisco
+   // term.formatPrintf("*",1,4+menuidx,1);
+    //setto funzioni e scelta
+    funcfromMenu(menuidx);
+}
+
+void writeLogInput(string strIn)
+{
+    // stampa i splitta i parametri in ingesso
+    //write param
+    string func;
+    string funcnum;
+    string param;
+    func=strIn.substr(0,1);
+    funcnum=strIn.substr(1,1);
+    param=strIn.substr(2,3);
+    term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS(func)),11,p01,10,1);       //p01
+    term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS(funcnum)),39,p02,10,1);    //p02
+    term.formatPrintf(fnzAdd.string2char(fnzAdd.addEOS(param)),61,p03,10,1);      //p03
+    //write input string
+    term.formatPrintf(fnzAdd.string2char(strIn.substr(0,17)),21,p51,10,1); //p51
+//---------------------------------------------------------------------------------------------
+}
+
+
 bool funcOut(string func, string funcnum, string param, string sstr)
 {
     //fare
@@ -17,18 +64,6 @@
     }
     return errp;
 }
-//********************* Init: chiama Arduino al boot e chiama i paramtri
-bool initFunc(string func, string funcnum, string param)
-{
-    bool errp=1;
-
-    if (funcnum=="1") {
-       // errp=menuIn("0", param);
-
-    }
-    return errp;
-}
-
 
 //********************* Led
 bool Lfunc(string func, string funcnum, string param)
@@ -38,14 +73,14 @@
     if (funcnum=="1") {
         if (param=="on ") {
             term.formatPrintf("Led ACCESO \n",61,p52,99,1); //p52
-            if (realExtraSerial==false)  ardser.printf("\nLed ACCESO \n\r");
+            ardser.printf("\nLed ACCESO \n\r");
             printDisp(dispType,"Led ACCESO \n\r");
             led.onOff(1); //Accende il led
             errp=0;
         }
         if (param=="off") {
             term.formatPrintf("Led SPENTO! \n",61,p52,99,1); //p52
-            if (realExtraSerial==false)  ardser.printf("\nLed SPENTO! \n\r");
+            ardser.printf("\nLed SPENTO! \n\r");
             printDisp(dispType,"Led SPENTO \n\r");
             led.onOff(0); //Spegne il led
             errp=0;
@@ -57,38 +92,39 @@
 
 //********************** cambio menu
 
-bool funcfromMenu(string func, string funcnum, string param, string sstr)
+bool funcfromMenu(int funcnum)
 {
 // funzione di load funzioni da menu scelto
     bool errp=1;
-    char funcc;
-    char tempm;
-    int ccmenu=0;
-    int ccfun=0;
+    int tempm;
+    int ccmenu=0; //indice vettore funzioni selezionate
+    int ccfun=0; //indice vettore funzione principale
     string funzionen;
-    funcc=*fnzAdd.string2char(fnzAdd.addEOS(funcnum));
-
     //filtro vettore funzioni in base la menu
-    do {
+    funzionen=menu_function[ccmenu];
+    while ((funzionen.substr(0,1)!="Z") && (ccmenu<=99)) {
         // confronto il primo carattere dell vettore funzioni col primo carattere del menu
-        funzionen=menu_function[ccmenu];
-        tempm=*fnzAdd.string2char(funzionen.substr(0,1));
+        tempm=atoi(fnzAdd.string2char(funzionen.substr(0,1)));
         // se = metto il valore del vettore funzioni nel vettore funzioni scelte
-        if (tempm==funcc) {
+        if (menuidx==tempm) {
             menu_funcChoice[ccfun]=menu_function[ccmenu];
             ccfun++;
         }
         ccmenu++;
-    } while ((ccmenu<10) && (funcc!='z')) ;
+        funzionen=menu_function[ccmenu];  //assegna la stringa del menu
+    }
+    menu_funcChoice[ccfun]="Z.Z"; //setto lo stop
+    if (ccfun>0) { //non dovrebbe avvenire diversamente perche' 1 ci deve esere ma e' da trappare
+        //azzero da dove sono in giu'
+        for (int i =  funcidx+1; i <ccfun ; i++) {
+            term.formatPrintf("*",42,4+i,38);
+        }
+        //scrico dalla prima allo scelto
+        for (int i =  0; i <ccfun ; i++) {
+            term.formatPrintf(fnzAdd.string2char(menu_funcChoice[i]),42,4+i,38);
+        }
+    }
     funcidx=0;
-    //azzero da dove sono in giu'
-    for (int i =  fnzAdd.c2i(funcc)+1; i <=funcidx ; i++) {
-        term.formatPrintf("\n",42,4+i,38);
-    }
-    //scrico dalla prima allo scelto
-    for (int i =  0; i <=fnzAdd.c2i(funcc) ; i++) {
-        term.formatPrintf(fnzAdd.string2char(menu_funcChoice[i]),42,4+i,38);
-    }
     errp=0; //per ora non fa nulla, vedere se tenere a uso futuro
     return errp;
 }
@@ -106,8 +142,8 @@
         menuidx= fnzAdd.c2i(funcc);
         term.formatPrintf("*\n",2,4+menuidx,1);
         printDisp(dispType,fnzAdd.string2char(fnzAdd.addEOS("Menu "+funcnum+"\r")));
-              //chiama la cernita delle funzioni
-        errp=funcfromMenu(func,  funcnum,  param,  sstr); //ritorna sempre 0 (e va bene cosi)
+        //chiama la cernita delle funzioni
+        errp=funcfromMenu(menuidx); //ritorna sempre 0 (e va bene cosi)
     }
     return errp;
 }
@@ -168,22 +204,29 @@
 bool menuIn(string func, string sstr)
 {
     bool errp=1;
-    int funcn;
-    // char funcc=fnzAdd.string2char(sstr.substr(2,1));
-    char funcc;
-    funcc=*fnzAdd.string2char(fnzAdd.addEOS(sstr.substr(2,1)));
-    if (funcc!='z') {
+    int funcn=0;
+    string funcc;
+    funcc=sstr.substr(3,1);
+
+    if ((funcc>="0") && (funcc<="9")) {
         //trasformo in intero
-        funcn=fnzAdd.c2i(funcc);
+        funcn=atoi(fnzAdd.string2char(funcc));
         //assegno menu al vettore
-        menu_main[funcn]=fnzAdd.addEOS(sstr);
+        menu_main[funcn]=fnzAdd.addEOS(sstr.substr(3,20));
+        //*** tolti in attesa di regolare la sincronizzazione
         //stampo in posizione
-        term.formatPrintf(fnzAdd.string2char(menu_main[funcn]),2,4+funcn,38);
+        ///term.formatPrintf(fnzAdd.string2char(menu_main[funcn]),2,4+funcn,38);
+        //info terminale
+        ///term.formatPrintf("Menu Add \n",61,p52,99,1); //p52
+        //******
         //display
-        printDisp(dispType,"Menu In \n\r");
+        printDisp(dispType,"Menu Add \n\r");
         printDisp(dispType,fnzAdd.string2char(fnzAdd.addEOS("  "+sstr.substr(0,3)+"\r")));
         errp=0;
     }
+    if (funcc=="9") {
+        // writeLogInput( sstr); //solo al 9 stampo il log. Ha poi senso?
+    }
     return errp;
 }
 
@@ -191,18 +234,26 @@
 bool functionIn(string func, string sstr)
 {
     bool errp=1;
-    int funcn;
-    char funcc= *fnzAdd.string2char(sstr.substr(2,1));
-
-    if (funcc!='z') {
-        //trasformo in intero
-        funcn=fnzAdd.c2i(funcc);
+    string funcc;
+    funcc=sstr.substr(3,1);
+    if (funcc!="Z") {
         //assegno menu al vettore
-        menu_function[funcn]=fnzAdd.addEOS(sstr.substr(2,1)); //??? sicuri?
+        menu_function[funccontidx]=fnzAdd.addEOS(sstr.substr(1,20));
+        //stampo in posizione
+        //term.formatPrintf(fnzAdd.string2char( menu_function[funccontidx]),42,4+(funccontidx%20),38);
+        //info terminale
+        term.formatPrintf("Function In \n",61,p52,99,1); //p52
         //display
         printDisp(dispType,"Function In \n\r");
         printDisp(dispType,fnzAdd.string2char(fnzAdd.addEOS("  "+sstr.substr(0,3)+"\r")));
+        funccontidx++; //incremento il contatore generale delle funzioni
         errp=0;
+    } else {
+        menu_function[funccontidx]="Z.Z"; //carico lo stop
+        funccontidx=0; //azzero il contatore generale delle funzioni
+        writeLogInput( sstr); //solo allo z stampo il log. Ha poi senso?
+        //set default video
+        choiceVideoSettings();
     }
     return errp;
 }
@@ -226,7 +277,7 @@
 }
 
 
-//********************* Synth Note
+//********************* ?????????????????????????????
 bool NfuncIn(string func, string funcnum, string param, char* arr)
 {
     bool errp=1;