Console Serial IO con display OLED e seriale asincrona
Dependencies: mbed BufferedSerial AserialIOFuncLib SSD1306 TerminalPlusV2
Fork of SerialIO by
Console Serial IO con display OLED e seriale asincrona
Diff: choiceFunctions.h
- Revision:
- 40:48422add4537
- Parent:
- 39:0d7165083e7a
- Child:
- 41:fb612a3936fb
diff -r 0d7165083e7a -r 48422add4537 choiceFunctions.h --- a/choiceFunctions.h Sun Dec 27 23:15:53 2015 +0000 +++ b/choiceFunctions.h Sun Jan 03 14:32:39 2016 +0000 @@ -1,35 +1,32 @@ // istanze di funzioni per metterle poi dove si vuole bool funcfromMenu(int); +int contaMenuFunc(); //------------------------------------------------- void choiceVideoSettings() { string prefix; + bool bbold; //stampo menu - menuidx=3; for (int i = 0; i<10 ; i++) { if (i==menuidx) { - term.bold(); + bbold=1; prefix="*"; } else { - term.resetattrib(); - //term.forgcol(7); + bbold=0; prefix=" "; } - term.formatPrintf(fnzAdd.string2char(prefix+menu_main[i]),1,4+i,19); + term.formatPrintf(fnzAdd.string2char(prefix+menu_main[i]),1,4+i,19,bbold); } //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; @@ -44,26 +41,24 @@ //--------------------------------------------------------------------------------------------- } - -bool funcOut(string func, string funcnum, string param, string sstr) +void writeFunctionVal(string strIn) { - //fare - bool errp=1; - char funcc; - int tempcc=0; - funcc=*fnzAdd.string2char(fnzAdd.addEOS(funcnum)); + int idx=0; + bool trovato=false; + //cerca valore. Per ora facciamo cosi, poi si vede se indicizzarlo + while ((trovato==false) && (idx<50)) { + 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++; + } + //stampo + if (trovato==true) { //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 + term.formatPrintf(fnzAdd.string2char(fnzAdd.i2s(function_val[idx][6])),70,4+funcidx,10); //valore attuale di fianco alla riga + } +} - if ((funcnum>="0") && (funcnum<="9")) { - while (menu_funcChoice[tempcc]!="z") { - tempcc++; - } - if (menu_funcChoice[tempcc]=="z") tempcc--; - funcidx=tempcc; - - errp=0; - } - return errp; -} //********************* Led bool Lfunc(string func, string funcnum, string param) @@ -91,7 +86,6 @@ //********************** cambio menu - bool funcfromMenu(int funcnum) { // funzione di load funzioni da menu scelto @@ -99,7 +93,11 @@ int tempm; int ccmenu=0; //indice vettore funzioni selezionate int ccfun=0; //indice vettore funzione principale + int contoldfun, contonewfun; //conta le voci di menu prima di sostituirlo string funzionen; + string prefix; //prefisso asterisco per voci selezionate + bool bbold=0; //postfisso bold per righe selezionate + contoldfun=contaMenuFunc(); //filtro vettore funzioni in base la menu funzionen=menu_function[ccmenu]; while ((funzionen.substr(0,1)!="Z") && (ccmenu<=99)) { @@ -114,37 +112,80 @@ funzionen=menu_function[ccmenu]; //assegna la stringa del menu } menu_funcChoice[ccfun]="Z.Z"; //setto lo stop + contonewfun=contaMenuFunc(); + // menu fatti, ora funzioni 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); + for (int i = contonewfun+1; i <=contoldfun ; i++) { + term.formatPrintf(fnzAdd.string2char(fnzAdd.padstr(" ",38,' ')),41,4+i); } - //scrico dalla prima allo scelto + //scrivo dalla prima allo scelto + funcidx=0; for (int i = 0; i <ccfun ; i++) { - term.formatPrintf(fnzAdd.string2char(menu_funcChoice[i]),42,4+i,38); + if (i==funcidx) { + bbold=1; + prefix="*"; + } else { + bbold=0; + prefix=" "; + } + term.formatPrintf(fnzAdd.string2char(prefix+menu_funcChoice[i]),41,4+i,38,bbold); } } - funcidx=0; - 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; } - -bool menuOut(string func, string funcnum, string param, string sstr) +bool funcOut(string func, string sstr) { + //setta la funzione in uso bool errp=1; - char funcc; - funcc=*fnzAdd.string2char(fnzAdd.addEOS(funcnum)); - if ((funcnum>="0") && (funcnum<="9")) { + string funcc; + int contoldfun=0; //conta le voci di menu prima di sostituirlo + contoldfun=contaMenuFunc(); + funcc=sstr.substr(1,1); + if ((funcc>="0") && (funcc<="9")) { + contoldfun=fnzAdd.min(contoldfun,atoi(fnzAdd.string2char(funcc))); //assegno il minimo //azzero - term.formatPrintf(" \n",2,4+menuidx,1); + term.resetattrib(); + term.formatPrintf(fnzAdd.string2char(" "+menu_funcChoice[funcidx]),41,4+funcidx,38); + // scrivo in console + term.bold(); + funcidx=contoldfun; + term.formatPrintf(fnzAdd.string2char("*"+menu_funcChoice[funcidx]),41,4+funcidx,38); + term.resetattrib(); + // 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 + return errp; +} + +bool menuOut(string func, string sstr) +{ + //setta il menu in uso + bool errp=1; + string funcc; + funcc=sstr.substr(1,1); + if ((funcc>="0") && (funcc<="9")) { + //azzero + term.resetattrib(); + term.formatPrintf(fnzAdd.string2char(" "+menu_main[menuidx]),1,4+menuidx,19); // scrivo - 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(menuidx); //ritorna sempre 0 (e va bene cosi) - } + term.bold(); + menuidx=atoi(fnzAdd.string2char(funcc)); + term.formatPrintf(fnzAdd.string2char("*"+menu_main[menuidx]),1,4+menuidx,19); + term.resetattrib(); + //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 return errp; } @@ -172,8 +213,6 @@ return errp; } - - //********************* Start bool StartfuncOut() { @@ -222,9 +261,10 @@ //display printDisp(dispType,"Menu Add \n\r"); printDisp(dispType,fnzAdd.string2char(fnzAdd.addEOS(" "+sstr.substr(0,3)+"\r"))); - errp=0; + } if (funcc=="9") { + errp=0; // writeLogInput( sstr); //solo al 9 stampo il log. Ha poi senso? } return errp; @@ -239,21 +279,19 @@ if (funcc!="Z") { //assegno menu al vettore 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? + writeLogInput(sstr); //solo allo z stampo il log. Ha poi senso? //set default video choiceVideoSettings(); + errp=0; } return errp; } @@ -276,16 +314,38 @@ return 1; } +//********************* Value Functions In +bool valueIn(string sstr) +{ + /* valore funzioni in ingresso + Formato: viimftxxxx + v-prefisso sempre v + ii-indice + m-menu + f-funzione + t-tipo n:min, x:max, s:step, v:valstart, a:valore attuale + xxxx-valore + */ + bool errp=1; + 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 + 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; - int funcn; 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 - funcn=fnzAdd.c2i(arr[2]+arr[3]); 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"); @@ -305,4 +365,16 @@ term.formatPrintf("Arduino Boot\n",61,p52,99,1); //p52 ardser.printf("rl\r"); return 1; +} + +int contaMenuFunc() +{ + //funzione che conta le voci di menu in essere + int ret=0; + //conta gli elemnti del vecchio menu per la cancellazione. Si potrebbe usare una variabile globale ricordando il conteggio precedente ma cosi' non dovrebbe perdere troppo tempo + while (menu_funcChoice[ret].substr(0,1)!="Z") { + ret++; + } + if (ret>0) ret--; //per rirportare indietro il contatore + return ret; } \ No newline at end of file