Funzioni di IO varie con seriale asincrona
Dependents: Nucleo_AsyncSerialIO
Fork of IOFuncLib by
IOFuncLib.cpp
- Committer:
- MaxScorda
- Date:
- 2015-09-06
- Revision:
- 13:7871bb60d370
- Parent:
- 12:0df187b0bfad
- Child:
- 14:69aa07aec21f
File content as of revision 13:7871bb60d370:
#include "config.h" #include "IOFuncLib.h" #include "BufferedSerial.h" #include "mbed.h" // FLASHER Flasher::Flasher(PinName pin) : _pin(pin) { _pin = 0; } void Flasher::flash(int n) { for(int i=0; i<n*2; i++) { _pin = !_pin; wait_ms(50); } } void Flasher::onOff(bool n) { _pin=n; } void Flasher::notPin() { _pin = !_pin; } // Screen Screen::Screen(BufferedSerial* ps) { _ps=ps; } void Screen::banner() { genFunctions fA; writeScreen("_____ Boot screen _____\n",25,1); writeScreen("___ Nucleo Scorda IO Test ___\n",22,2); writeScreen(fA.string2char(fA.padstr("-\n",78,'-')),1,5); //azzo funziona... writeScreen("Parsing \n",2,5); writeScreen("Funzione\n",2,7); writeScreen("Numero\n",22,7); writeScreen("Parametro\n",42,7); writeScreen(fA.string2char(fA.padstr("-\n",78,'-')),1,11); //azzo funziona... writeScreen("Status \n",2,11); writeScreen("Led 1 \n",2,13); writeScreen("Virtual Led \n",22,13); writeScreen("Other Commands \n",42,13); writeScreen("Real Out Serial\n",62,13); writeScreen("Input string\n",2,19); writeScreen("Result\n",42,19); commitScreen(); } void Screen::pressed() { //_ps->printf("\f"); // _ps->printf("*** Reset Screen ***\n\r\n"); writeScreen("*** Reset Screen ***\n",1,1); commitScreen(); } void Screen::commitScreen() { _ps->printf("\f"); for (int j = 0; j < screenRow-2; j++) { for (int i = 0; i < screenColumn; i++) { _ps->printf("%c",svec[i][j]); } _ps->printf("\n\r"); } } void Screen::writeScreen(char sstr[], char xx, char yy, int padb) { char i=0; while ((sstr[i]!='\n') && (i<(screenColumn-xx+1))) { // _ps->printf((char*) sstr[i]); svec[xx+i][yy]=sstr[i]; i++; } //prosegui col pad while ((padb>0) && (i<(screenColumn-xx-1))) { svec[xx+i][yy]=' '; i++; padb--; } } void Screen::emptyFrame() { char car; for (int j = 0; j < screenRow-2; j++) { if ((j==0) || (j==screenRow-3)) car='-'; else car=' '; for (int i = 1; i < screenColumn-1; i++) { svec[i][j]=car; } svec[0][j]='|'; svec[screenColumn-1][j]='|'; } } void Screen::clearScreen(char upperx, char uppery, char loverx, char lowery) { //controllare margini for (int j = uppery; j <= lowery; j++) { for (int i = upperx; i <= loverx; i++) { svec[i][j]=' ' ; } } } // general char* genFunctions::subchar(char* arr, int begin, int len) { //non funziona char* res = new char[len]; for (int i = 0; i < len; i++) res[i] = *(arr + begin + i); res[len] = 0; return res; } string genFunctions::padstr(string sttde, int maxlen, char fillchar) { bool flagEOS=false; string ret=sttde; if (ret.size()>0) { //se ha EOS lo tolgo if (ret.substr(ret.size()-1,1) == EOS) { ret=ret.substr(0,ret.size()-1); flagEOS=true; } //pad if (maxlen> ret.size()) ret.insert(ret.size(), maxlen - ret.size(), fillchar); //se aveva EOS, lo rimetto if (flagEOS==true) ret=addEOS(ret); } return ret; } string genFunctions::addEOS(string sttde) { string ret=sttde; if (sttde.substr(sttde.size()-1,1) != "\n") ret=sttde+"\n"; return ret; } string genFunctions::subEOS(string sttde) { string ret=sttde; if (sttde.substr(sttde.size()-1,1) == "\n") ret=sttde.substr(0,sttde.size()-2); return ret; } char* genFunctions::string2char(string sttde) { //ora aggiunge comunque l'EOS. Decidere se parametrizzare sttde=addEOS(sttde); char *cstr = new char[sttde.length() + 1]; strcpy(cstr, sttde.c_str()); // delete [] cstr; return cstr; } int genFunctions::constrain(int amt, int low, int high) { return ((amt)<(low)?(low):((amt)>(high)?(high):(amt))); } int genFunctions::min(int a, int b) { return ((a)<(b)?(a):(b)); } int genFunctions::max(int a, int b) { return ((a)>(b)?(a):(b)); } int genFunctions::abs(int x) { return ((x)>0?(x):-(x)); }