Funzioni di IO varie con seriale asincrona

Dependents:   Nucleo_AsyncSerialIO

Fork of IOFuncLib by Max Scordamaglia

Committer:
MaxScorda
Date:
Fri Sep 04 22:13:56 2015 +0000
Revision:
12:0df187b0bfad
Parent:
11:7c7848b76f06
Child:
13:7871bb60d370
Async

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MaxScorda 2:8e723d99838e 1 #include "config.h"
MaxScorda 0:f401aa69861a 2 #include "IOFuncLib.h"
MaxScorda 12:0df187b0bfad 3 #include "BufferedSerial.h"
MaxScorda 0:f401aa69861a 4 #include "mbed.h"
MaxScorda 0:f401aa69861a 5
MaxScorda 1:58f3784ad68e 6 // FLASHER
MaxScorda 0:f401aa69861a 7 Flasher::Flasher(PinName pin) : _pin(pin)
MaxScorda 0:f401aa69861a 8 {
MaxScorda 0:f401aa69861a 9 _pin = 0;
MaxScorda 0:f401aa69861a 10 }
MaxScorda 0:f401aa69861a 11
MaxScorda 0:f401aa69861a 12 void Flasher::flash(int n)
MaxScorda 0:f401aa69861a 13 {
MaxScorda 0:f401aa69861a 14 for(int i=0; i<n*2; i++) {
MaxScorda 0:f401aa69861a 15 _pin = !_pin;
MaxScorda 0:f401aa69861a 16 wait_ms(50);
MaxScorda 0:f401aa69861a 17 }
MaxScorda 0:f401aa69861a 18 }
MaxScorda 0:f401aa69861a 19
MaxScorda 0:f401aa69861a 20 void Flasher::onOff(bool n)
MaxScorda 0:f401aa69861a 21 {
MaxScorda 0:f401aa69861a 22 _pin=n;
MaxScorda 0:f401aa69861a 23 }
MaxScorda 0:f401aa69861a 24
MaxScorda 0:f401aa69861a 25 void Flasher::notPin()
MaxScorda 0:f401aa69861a 26 {
MaxScorda 0:f401aa69861a 27 _pin = !_pin;
MaxScorda 1:58f3784ad68e 28 }
MaxScorda 1:58f3784ad68e 29
MaxScorda 12:0df187b0bfad 30
MaxScorda 12:0df187b0bfad 31
MaxScorda 12:0df187b0bfad 32
MaxScorda 1:58f3784ad68e 33 // Screen
MaxScorda 1:58f3784ad68e 34 Screen::Screen(Serial* ps)
MaxScorda 1:58f3784ad68e 35 {
MaxScorda 1:58f3784ad68e 36 _ps=ps;
MaxScorda 1:58f3784ad68e 37 }
MaxScorda 1:58f3784ad68e 38
MaxScorda 1:58f3784ad68e 39 void Screen::banner()
MaxScorda 1:58f3784ad68e 40 {
MaxScorda 4:eae942db86db 41 genFunctions fA;
MaxScorda 4:eae942db86db 42 writeScreen("_____ Boot screen _____\n",25,1);
MaxScorda 4:eae942db86db 43 writeScreen("___ Nucleo Scorda IO Test ___\n",22,2);
MaxScorda 4:eae942db86db 44 writeScreen(fA.string2char(fA.padstr("-\n",78,'-')),1,5); //azzo funziona...
MaxScorda 4:eae942db86db 45 writeScreen("Parsing \n",2,5);
MaxScorda 4:eae942db86db 46 writeScreen("Funzione\n",2,7);
MaxScorda 4:eae942db86db 47 writeScreen("Numero\n",22,7);
MaxScorda 4:eae942db86db 48 writeScreen("Parametro\n",42,7);
MaxScorda 4:eae942db86db 49 writeScreen(fA.string2char(fA.padstr("-\n",78,'-')),1,11); //azzo funziona...
MaxScorda 4:eae942db86db 50 writeScreen("Status \n",2,11);
MaxScorda 4:eae942db86db 51 writeScreen("Led 1 \n",2,13);
MaxScorda 4:eae942db86db 52 writeScreen("Virtual Led \n",22,13);
MaxScorda 5:0dd768073f59 53 writeScreen("Other Commands \n",42,13);
MaxScorda 11:7c7848b76f06 54 writeScreen("Real Out Serial\n",62,13);
MaxScorda 4:eae942db86db 55 writeScreen("Input string\n",2,19);
MaxScorda 4:eae942db86db 56 writeScreen("Result\n",42,19);
MaxScorda 2:8e723d99838e 57 commitScreen();
MaxScorda 1:58f3784ad68e 58 }
MaxScorda 1:58f3784ad68e 59
MaxScorda 1:58f3784ad68e 60 void Screen::pressed()
MaxScorda 1:58f3784ad68e 61 {
MaxScorda 2:8e723d99838e 62 //_ps->printf("\f");
MaxScorda 2:8e723d99838e 63 // _ps->printf("*** Reset Screen ***\n\r\n");
MaxScorda 2:8e723d99838e 64 writeScreen("*** Reset Screen ***\n",1,1);
MaxScorda 2:8e723d99838e 65 commitScreen();
MaxScorda 2:8e723d99838e 66 }
MaxScorda 2:8e723d99838e 67
MaxScorda 2:8e723d99838e 68 void Screen::commitScreen()
MaxScorda 2:8e723d99838e 69 {
MaxScorda 1:58f3784ad68e 70 _ps->printf("\f");
MaxScorda 2:8e723d99838e 71 for (int j = 0; j < screenRow-2; j++) {
MaxScorda 2:8e723d99838e 72 for (int i = 0; i < screenColumn; i++) {
MaxScorda 2:8e723d99838e 73 _ps->printf("%c",svec[i][j]);
MaxScorda 2:8e723d99838e 74 }
MaxScorda 2:8e723d99838e 75 _ps->printf("\n\r");
MaxScorda 2:8e723d99838e 76 }
MaxScorda 2:8e723d99838e 77 }
MaxScorda 2:8e723d99838e 78
MaxScorda 4:eae942db86db 79 void Screen::writeScreen(char sstr[], char xx, char yy, int padb)
MaxScorda 2:8e723d99838e 80 {
MaxScorda 2:8e723d99838e 81 char i=0;
MaxScorda 3:6c6446382bb2 82 while ((sstr[i]!='\n') && (i<(screenColumn-xx+1))) {
MaxScorda 2:8e723d99838e 83 // _ps->printf((char*) sstr[i]);
MaxScorda 2:8e723d99838e 84 svec[xx+i][yy]=sstr[i];
MaxScorda 2:8e723d99838e 85 i++;
MaxScorda 2:8e723d99838e 86 }
MaxScorda 4:eae942db86db 87 //prosegui col pad
MaxScorda 4:eae942db86db 88 while ((padb>0) && (i<(screenColumn-xx-1))) {
MaxScorda 4:eae942db86db 89 svec[xx+i][yy]=' ';
MaxScorda 4:eae942db86db 90 i++;
MaxScorda 4:eae942db86db 91 padb--;
MaxScorda 4:eae942db86db 92 }
MaxScorda 2:8e723d99838e 93
MaxScorda 1:58f3784ad68e 94 }
MaxScorda 2:8e723d99838e 95
MaxScorda 2:8e723d99838e 96 void Screen::emptyFrame()
MaxScorda 2:8e723d99838e 97 {
MaxScorda 2:8e723d99838e 98 char car;
MaxScorda 2:8e723d99838e 99 for (int j = 0; j < screenRow-2; j++) {
MaxScorda 2:8e723d99838e 100 if ((j==0) || (j==screenRow-3)) car='-';
MaxScorda 2:8e723d99838e 101 else car=' ';
MaxScorda 2:8e723d99838e 102 for (int i = 1; i < screenColumn-1; i++) {
MaxScorda 2:8e723d99838e 103 svec[i][j]=car;
MaxScorda 2:8e723d99838e 104 }
MaxScorda 2:8e723d99838e 105 svec[0][j]='|';
MaxScorda 2:8e723d99838e 106 svec[screenColumn-1][j]='|';
MaxScorda 2:8e723d99838e 107 }
MaxScorda 2:8e723d99838e 108 }
MaxScorda 2:8e723d99838e 109
MaxScorda 2:8e723d99838e 110 void Screen::clearScreen(char upperx, char uppery, char loverx, char lowery)
MaxScorda 2:8e723d99838e 111 {
MaxScorda 2:8e723d99838e 112 //controllare margini
MaxScorda 2:8e723d99838e 113 for (int j = uppery; j <= lowery; j++) {
MaxScorda 2:8e723d99838e 114 for (int i = upperx; i <= loverx; i++) {
MaxScorda 2:8e723d99838e 115 svec[i][j]=' ' ;
MaxScorda 2:8e723d99838e 116 }
MaxScorda 2:8e723d99838e 117 }
MaxScorda 3:6c6446382bb2 118 }
MaxScorda 3:6c6446382bb2 119
MaxScorda 12:0df187b0bfad 120 // ScreenAsync
MaxScorda 12:0df187b0bfad 121 ScreenAsync::ScreenAsync(BufferedSerial* bps) : Screen(Serial* ps)
MaxScorda 12:0df187b0bfad 122 {
MaxScorda 12:0df187b0bfad 123 _bps=bps;
MaxScorda 12:0df187b0bfad 124 }
MaxScorda 12:0df187b0bfad 125
MaxScorda 12:0df187b0bfad 126
MaxScorda 12:0df187b0bfad 127
MaxScorda 3:6c6446382bb2 128 // general
MaxScorda 3:6c6446382bb2 129
MaxScorda 4:eae942db86db 130 char* genFunctions::subchar(char* arr, int begin, int len)
MaxScorda 3:6c6446382bb2 131 {
MaxScorda 4:eae942db86db 132 //non funziona
MaxScorda 3:6c6446382bb2 133 char* res = new char[len];
MaxScorda 3:6c6446382bb2 134 for (int i = 0; i < len; i++)
MaxScorda 3:6c6446382bb2 135 res[i] = *(arr + begin + i);
MaxScorda 3:6c6446382bb2 136 res[len] = 0;
MaxScorda 3:6c6446382bb2 137 return res;
MaxScorda 3:6c6446382bb2 138 }
MaxScorda 3:6c6446382bb2 139
MaxScorda 4:eae942db86db 140 string genFunctions::padstr(string sttde, int maxlen, char fillchar)
MaxScorda 4:eae942db86db 141 {
MaxScorda 4:eae942db86db 142 bool flagEOS=false;
MaxScorda 4:eae942db86db 143 string ret=sttde;
MaxScorda 4:eae942db86db 144 if (ret.size()>0) {
MaxScorda 4:eae942db86db 145 //se ha EOS lo tolgo
MaxScorda 4:eae942db86db 146 if (ret.substr(ret.size()-1,1) == EOS) {
MaxScorda 4:eae942db86db 147 ret=ret.substr(0,ret.size()-1);
MaxScorda 4:eae942db86db 148 flagEOS=true;
MaxScorda 4:eae942db86db 149 }
MaxScorda 4:eae942db86db 150 //pad
MaxScorda 4:eae942db86db 151 if (maxlen> ret.size()) ret.insert(ret.size(), maxlen - ret.size(), fillchar);
MaxScorda 4:eae942db86db 152 //se aveva EOS, lo rimetto
MaxScorda 4:eae942db86db 153 if (flagEOS==true) ret=addEOS(ret);
MaxScorda 4:eae942db86db 154 }
MaxScorda 4:eae942db86db 155 return ret;
MaxScorda 4:eae942db86db 156 }
MaxScorda 4:eae942db86db 157
MaxScorda 3:6c6446382bb2 158 string genFunctions::addEOS(string sttde)
MaxScorda 3:6c6446382bb2 159 {
MaxScorda 3:6c6446382bb2 160 string ret=sttde;
MaxScorda 3:6c6446382bb2 161 if (sttde.substr(sttde.size()-1,1) != "\n") ret=sttde+"\n";
MaxScorda 3:6c6446382bb2 162 return ret;
MaxScorda 3:6c6446382bb2 163 }
MaxScorda 3:6c6446382bb2 164
MaxScorda 3:6c6446382bb2 165 string genFunctions::subEOS(string sttde)
MaxScorda 3:6c6446382bb2 166 {
MaxScorda 3:6c6446382bb2 167 string ret=sttde;
MaxScorda 3:6c6446382bb2 168 if (sttde.substr(sttde.size()-1,1) == "\n") ret=sttde.substr(0,sttde.size()-2);
MaxScorda 3:6c6446382bb2 169 return ret;
MaxScorda 3:6c6446382bb2 170 }
MaxScorda 3:6c6446382bb2 171
MaxScorda 3:6c6446382bb2 172 char* genFunctions::string2char(string sttde)
MaxScorda 3:6c6446382bb2 173 {
MaxScorda 3:6c6446382bb2 174 //ora aggiunge comunque l'EOS. Decidere se parametrizzare
MaxScorda 3:6c6446382bb2 175 sttde=addEOS(sttde);
MaxScorda 3:6c6446382bb2 176 char *cstr = new char[sttde.length() + 1];
MaxScorda 3:6c6446382bb2 177 strcpy(cstr, sttde.c_str());
MaxScorda 4:eae942db86db 178 // delete [] cstr;
MaxScorda 3:6c6446382bb2 179 return cstr;
MaxScorda 4:eae942db86db 180 }
MaxScorda 4:eae942db86db 181
MaxScorda 11:7c7848b76f06 182 int genFunctions::constrain(int amt, int low, int high)
MaxScorda 11:7c7848b76f06 183 {
MaxScorda 5:0dd768073f59 184 return ((amt)<(low)?(low):((amt)>(high)?(high):(amt)));
MaxScorda 11:7c7848b76f06 185 }
MaxScorda 11:7c7848b76f06 186
MaxScorda 11:7c7848b76f06 187 int genFunctions::min(int a, int b)
MaxScorda 11:7c7848b76f06 188 {
MaxScorda 11:7c7848b76f06 189 return ((a)<(b)?(a):(b));
MaxScorda 11:7c7848b76f06 190 }
MaxScorda 11:7c7848b76f06 191
MaxScorda 11:7c7848b76f06 192 int genFunctions::max(int a, int b)
MaxScorda 11:7c7848b76f06 193 {
MaxScorda 5:0dd768073f59 194 return ((a)>(b)?(a):(b));
MaxScorda 11:7c7848b76f06 195 }
MaxScorda 11:7c7848b76f06 196
MaxScorda 11:7c7848b76f06 197 int genFunctions::abs(int x)
MaxScorda 11:7c7848b76f06 198 {
MaxScorda 5:0dd768073f59 199 return ((x)>0?(x):-(x));
MaxScorda 11:7c7848b76f06 200 }