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