Funzioni di IO varie con seriale asincrona

Dependents:   Nucleo_AsyncSerialIO

Fork of IOFuncLib by Max Scordamaglia

Committer:
MaxScorda
Date:
Sun Dec 27 23:15:16 2015 +0000
Revision:
20:46de8943071a
Parent:
19:93274a65f664
Min var

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 17:9a7f30cb244d 4
MaxScorda 0:f401aa69861a 5 #include "mbed.h"
MaxScorda 0:f401aa69861a 6
MaxScorda 1:58f3784ad68e 7 // FLASHER
MaxScorda 0:f401aa69861a 8 Flasher::Flasher(PinName pin) : _pin(pin)
MaxScorda 0:f401aa69861a 9 {
MaxScorda 16:e2a2e0dd6c1b 10 _pin = 0;
MaxScorda 0:f401aa69861a 11 }
MaxScorda 0:f401aa69861a 12
MaxScorda 0:f401aa69861a 13 void Flasher::flash(int n)
MaxScorda 0:f401aa69861a 14 {
MaxScorda 0:f401aa69861a 15 for(int i=0; i<n*2; i++) {
MaxScorda 0:f401aa69861a 16 _pin = !_pin;
MaxScorda 15:a97e5d4fe3d9 17 wait(0.05f);
MaxScorda 18:149091052948 18 // wait_ms(50);
MaxScorda 0:f401aa69861a 19 }
MaxScorda 0:f401aa69861a 20 }
MaxScorda 0:f401aa69861a 21
MaxScorda 0:f401aa69861a 22 void Flasher::onOff(bool n)
MaxScorda 0:f401aa69861a 23 {
MaxScorda 0:f401aa69861a 24 _pin=n;
MaxScorda 0:f401aa69861a 25 }
MaxScorda 0:f401aa69861a 26
MaxScorda 16:e2a2e0dd6c1b 27 void Flasher::notPin(void)
MaxScorda 0:f401aa69861a 28 {
MaxScorda 0:f401aa69861a 29 _pin = !_pin;
MaxScorda 1:58f3784ad68e 30 }
MaxScorda 1:58f3784ad68e 31
MaxScorda 12:0df187b0bfad 32
MaxScorda 12:0df187b0bfad 33
MaxScorda 1:58f3784ad68e 34 // Screen
MaxScorda 13:7871bb60d370 35 Screen::Screen(BufferedSerial* ps)
MaxScorda 1:58f3784ad68e 36 {
MaxScorda 1:58f3784ad68e 37 _ps=ps;
MaxScorda 1:58f3784ad68e 38 }
MaxScorda 1:58f3784ad68e 39
MaxScorda 1:58f3784ad68e 40 void Screen::banner()
MaxScorda 1:58f3784ad68e 41 {
MaxScorda 4:eae942db86db 42 genFunctions fA;
MaxScorda 4:eae942db86db 43 writeScreen("_____ Boot screen _____\n",25,1);
MaxScorda 4:eae942db86db 44 writeScreen("___ Nucleo Scorda IO Test ___\n",22,2);
MaxScorda 4:eae942db86db 45 writeScreen(fA.string2char(fA.padstr("-\n",78,'-')),1,5); //azzo funziona...
MaxScorda 4:eae942db86db 46 writeScreen("Parsing \n",2,5);
MaxScorda 4:eae942db86db 47 writeScreen("Funzione\n",2,7);
MaxScorda 4:eae942db86db 48 writeScreen("Numero\n",22,7);
MaxScorda 4:eae942db86db 49 writeScreen("Parametro\n",42,7);
MaxScorda 14:69aa07aec21f 50 writeScreen(fA.string2char(fA.padstr("-\n",78,'-')),1,10); //azzo funziona...
MaxScorda 14:69aa07aec21f 51 writeScreen("Status \n",2,10);
MaxScorda 14:69aa07aec21f 52 writeScreen("Led 1 \n",2,12);
MaxScorda 14:69aa07aec21f 53 writeScreen("Virtual Led \n",22,12);
MaxScorda 14:69aa07aec21f 54 writeScreen("Other Commands \n",42,12);
MaxScorda 14:69aa07aec21f 55 writeScreen("Real Out Serial\n",62,12);
MaxScorda 14:69aa07aec21f 56 writeScreen("Input string\n",2,15);
MaxScorda 14:69aa07aec21f 57 writeScreen("Result\n",42,15);
MaxScorda 14:69aa07aec21f 58 writeScreen(fA.string2char(fA.padstr("-\n",78,'-')),1,18); //azzo funziona...
MaxScorda 14:69aa07aec21f 59 writeScreen("Serial Input \n",2,18);
MaxScorda 2:8e723d99838e 60 commitScreen();
MaxScorda 1:58f3784ad68e 61 }
MaxScorda 1:58f3784ad68e 62
MaxScorda 1:58f3784ad68e 63 void Screen::pressed()
MaxScorda 1:58f3784ad68e 64 {
MaxScorda 2:8e723d99838e 65 //_ps->printf("\f");
MaxScorda 2:8e723d99838e 66 // _ps->printf("*** Reset Screen ***\n\r\n");
MaxScorda 2:8e723d99838e 67 writeScreen("*** Reset Screen ***\n",1,1);
MaxScorda 2:8e723d99838e 68 commitScreen();
MaxScorda 2:8e723d99838e 69 }
MaxScorda 2:8e723d99838e 70
MaxScorda 2:8e723d99838e 71 void Screen::commitScreen()
MaxScorda 2:8e723d99838e 72 {
MaxScorda 1:58f3784ad68e 73 _ps->printf("\f");
MaxScorda 2:8e723d99838e 74 for (int j = 0; j < screenRow-2; j++) {
MaxScorda 2:8e723d99838e 75 for (int i = 0; i < screenColumn; i++) {
MaxScorda 2:8e723d99838e 76 _ps->printf("%c",svec[i][j]);
MaxScorda 2:8e723d99838e 77 }
MaxScorda 2:8e723d99838e 78 _ps->printf("\n\r");
MaxScorda 2:8e723d99838e 79 }
MaxScorda 2:8e723d99838e 80 }
MaxScorda 2:8e723d99838e 81
MaxScorda 4:eae942db86db 82 void Screen::writeScreen(char sstr[], char xx, char yy, int padb)
MaxScorda 2:8e723d99838e 83 {
MaxScorda 2:8e723d99838e 84 char i=0;
MaxScorda 3:6c6446382bb2 85 while ((sstr[i]!='\n') && (i<(screenColumn-xx+1))) {
MaxScorda 2:8e723d99838e 86 // _ps->printf((char*) sstr[i]);
MaxScorda 2:8e723d99838e 87 svec[xx+i][yy]=sstr[i];
MaxScorda 2:8e723d99838e 88 i++;
MaxScorda 2:8e723d99838e 89 }
MaxScorda 4:eae942db86db 90 //prosegui col pad
MaxScorda 4:eae942db86db 91 while ((padb>0) && (i<(screenColumn-xx-1))) {
MaxScorda 4:eae942db86db 92 svec[xx+i][yy]=' ';
MaxScorda 4:eae942db86db 93 i++;
MaxScorda 4:eae942db86db 94 padb--;
MaxScorda 4:eae942db86db 95 }
MaxScorda 2:8e723d99838e 96
MaxScorda 1:58f3784ad68e 97 }
MaxScorda 2:8e723d99838e 98
MaxScorda 2:8e723d99838e 99 void Screen::emptyFrame()
MaxScorda 2:8e723d99838e 100 {
MaxScorda 2:8e723d99838e 101 char car;
MaxScorda 2:8e723d99838e 102 for (int j = 0; j < screenRow-2; j++) {
MaxScorda 2:8e723d99838e 103 if ((j==0) || (j==screenRow-3)) car='-';
MaxScorda 2:8e723d99838e 104 else car=' ';
MaxScorda 2:8e723d99838e 105 for (int i = 1; i < screenColumn-1; i++) {
MaxScorda 2:8e723d99838e 106 svec[i][j]=car;
MaxScorda 2:8e723d99838e 107 }
MaxScorda 2:8e723d99838e 108 svec[0][j]='|';
MaxScorda 2:8e723d99838e 109 svec[screenColumn-1][j]='|';
MaxScorda 2:8e723d99838e 110 }
MaxScorda 2:8e723d99838e 111 }
MaxScorda 2:8e723d99838e 112
MaxScorda 2:8e723d99838e 113 void Screen::clearScreen(char upperx, char uppery, char loverx, char lowery)
MaxScorda 2:8e723d99838e 114 {
MaxScorda 2:8e723d99838e 115 //controllare margini
MaxScorda 2:8e723d99838e 116 for (int j = uppery; j <= lowery; j++) {
MaxScorda 2:8e723d99838e 117 for (int i = upperx; i <= loverx; i++) {
MaxScorda 2:8e723d99838e 118 svec[i][j]=' ' ;
MaxScorda 2:8e723d99838e 119 }
MaxScorda 2:8e723d99838e 120 }
MaxScorda 3:6c6446382bb2 121 }
MaxScorda 3:6c6446382bb2 122
MaxScorda 12:0df187b0bfad 123
MaxScorda 3:6c6446382bb2 124 // general
MaxScorda 3:6c6446382bb2 125
MaxScorda 4:eae942db86db 126 char* genFunctions::subchar(char* arr, int begin, int len)
MaxScorda 3:6c6446382bb2 127 {
MaxScorda 4:eae942db86db 128 //non funziona
MaxScorda 3:6c6446382bb2 129 char* res = new char[len];
MaxScorda 3:6c6446382bb2 130 for (int i = 0; i < len; i++)
MaxScorda 3:6c6446382bb2 131 res[i] = *(arr + begin + i);
MaxScorda 3:6c6446382bb2 132 res[len] = 0;
MaxScorda 3:6c6446382bb2 133 return res;
MaxScorda 3:6c6446382bb2 134 }
MaxScorda 3:6c6446382bb2 135
MaxScorda 4:eae942db86db 136 string genFunctions::padstr(string sttde, int maxlen, char fillchar)
MaxScorda 4:eae942db86db 137 {
MaxScorda 4:eae942db86db 138 bool flagEOS=false;
MaxScorda 4:eae942db86db 139 string ret=sttde;
MaxScorda 4:eae942db86db 140 if (ret.size()>0) {
MaxScorda 4:eae942db86db 141 //se ha EOS lo tolgo
MaxScorda 4:eae942db86db 142 if (ret.substr(ret.size()-1,1) == EOS) {
MaxScorda 4:eae942db86db 143 ret=ret.substr(0,ret.size()-1);
MaxScorda 4:eae942db86db 144 flagEOS=true;
MaxScorda 4:eae942db86db 145 }
MaxScorda 4:eae942db86db 146 //pad
MaxScorda 4:eae942db86db 147 if (maxlen> ret.size()) ret.insert(ret.size(), maxlen - ret.size(), fillchar);
MaxScorda 4:eae942db86db 148 //se aveva EOS, lo rimetto
MaxScorda 4:eae942db86db 149 if (flagEOS==true) ret=addEOS(ret);
MaxScorda 4:eae942db86db 150 }
MaxScorda 4:eae942db86db 151 return ret;
MaxScorda 4:eae942db86db 152 }
MaxScorda 4:eae942db86db 153
MaxScorda 3:6c6446382bb2 154 string genFunctions::addEOS(string sttde)
MaxScorda 3:6c6446382bb2 155 {
MaxScorda 3:6c6446382bb2 156 string ret=sttde;
MaxScorda 3:6c6446382bb2 157 if (sttde.substr(sttde.size()-1,1) != "\n") ret=sttde+"\n";
MaxScorda 3:6c6446382bb2 158 return ret;
MaxScorda 3:6c6446382bb2 159 }
MaxScorda 3:6c6446382bb2 160
MaxScorda 3:6c6446382bb2 161 string genFunctions::subEOS(string sttde)
MaxScorda 3:6c6446382bb2 162 {
MaxScorda 3:6c6446382bb2 163 string ret=sttde;
MaxScorda 3:6c6446382bb2 164 if (sttde.substr(sttde.size()-1,1) == "\n") ret=sttde.substr(0,sttde.size()-2);
MaxScorda 3:6c6446382bb2 165 return ret;
MaxScorda 3:6c6446382bb2 166 }
MaxScorda 3:6c6446382bb2 167
MaxScorda 3:6c6446382bb2 168 char* genFunctions::string2char(string sttde)
MaxScorda 3:6c6446382bb2 169 {
MaxScorda 3:6c6446382bb2 170 //ora aggiunge comunque l'EOS. Decidere se parametrizzare
MaxScorda 3:6c6446382bb2 171 sttde=addEOS(sttde);
MaxScorda 3:6c6446382bb2 172 char *cstr = new char[sttde.length() + 1];
MaxScorda 3:6c6446382bb2 173 strcpy(cstr, sttde.c_str());
MaxScorda 4:eae942db86db 174 // delete [] cstr;
MaxScorda 3:6c6446382bb2 175 return cstr;
MaxScorda 4:eae942db86db 176 }
MaxScorda 4:eae942db86db 177
MaxScorda 17:9a7f30cb244d 178 int genFunctions::c2i(char sttde)
MaxScorda 17:9a7f30cb244d 179 {
MaxScorda 18:149091052948 180 // single char to integer
MaxScorda 17:9a7f30cb244d 181 return sttde-'0';;
MaxScorda 17:9a7f30cb244d 182 }
MaxScorda 17:9a7f30cb244d 183
MaxScorda 17:9a7f30cb244d 184 string genFunctions::i2s(int number)
MaxScorda 17:9a7f30cb244d 185 {
MaxScorda 18:149091052948 186 // integer to string
MaxScorda 17:9a7f30cb244d 187 if (number == 0)
MaxScorda 17:9a7f30cb244d 188 return "0";
MaxScorda 17:9a7f30cb244d 189 string temp="";
MaxScorda 17:9a7f30cb244d 190 string returnvalue="";
MaxScorda 18:149091052948 191 while (number>0) {
MaxScorda 17:9a7f30cb244d 192 temp+=number%10+48;
MaxScorda 17:9a7f30cb244d 193 number/=10;
MaxScorda 17:9a7f30cb244d 194 }
MaxScorda 18:149091052948 195 for (int i=0; i<temp.length(); i++)
MaxScorda 17:9a7f30cb244d 196 returnvalue+=temp[temp.length()-i-1];
MaxScorda 17:9a7f30cb244d 197 return returnvalue;
MaxScorda 18:149091052948 198 }
MaxScorda 18:149091052948 199
MaxScorda 18:149091052948 200
MaxScorda 18:149091052948 201
MaxScorda 18:149091052948 202
MaxScorda 18:149091052948 203 /* atof: convert string s to double */
MaxScorda 18:149091052948 204 double genFunctions::atof(char s[])
MaxScorda 18:149091052948 205 {
MaxScorda 18:149091052948 206 double val, power;
MaxScorda 18:149091052948 207 int i, sign;
MaxScorda 18:149091052948 208
MaxScorda 18:149091052948 209
MaxScorda 18:149091052948 210 for (i = 0; isspace(s[i]); i++); /* skip white space */
MaxScorda 18:149091052948 211
MaxScorda 18:149091052948 212 sign = (s[i] == '-') ? -1 : 1;
MaxScorda 18:149091052948 213 if (s[i] == '+' || s[i] == '-') i++;
MaxScorda 18:149091052948 214 for (val = 0.0; isdigit(s[i]); i++) {
MaxScorda 18:149091052948 215 val = 10.0 * val + (s[i] - '0');
MaxScorda 17:9a7f30cb244d 216 }
MaxScorda 18:149091052948 217 if (s[i] == '.') i++;
MaxScorda 18:149091052948 218 for (power = 1.0; isdigit(s[i]); i++) {
MaxScorda 18:149091052948 219 val = 10.0 * val + (s[i] - '0');
MaxScorda 18:149091052948 220 power *= 10.0;
MaxScorda 18:149091052948 221 }
MaxScorda 18:149091052948 222 return sign * val / power;
MaxScorda 18:149091052948 223 }
MaxScorda 18:149091052948 224
MaxScorda 18:149091052948 225 /* itoa: convert n to characters in s */
MaxScorda 18:149091052948 226 void genFunctions::itoa(int n, char s[])
MaxScorda 18:149091052948 227 {
MaxScorda 18:149091052948 228 int i, sign;
MaxScorda 18:149091052948 229 if ((sign = n) < 0) /* record sign */
MaxScorda 18:149091052948 230 n = -n; /* make n positive */
MaxScorda 18:149091052948 231 i = 0;
MaxScorda 18:149091052948 232 do { /* generate digits in reverse order */
MaxScorda 18:149091052948 233 s[i++] = n % 10 + '0'; /* get next digit */
MaxScorda 18:149091052948 234 } while ((n /= 10) > 0); /* delete it */
MaxScorda 18:149091052948 235 if (sign < 0) s[i++] = '-';
MaxScorda 18:149091052948 236 s[i] = '\0';
MaxScorda 18:149091052948 237 reverse(s) ;
MaxScorda 18:149091052948 238 }
MaxScorda 19:93274a65f664 239
MaxScorda 19:93274a65f664 240
MaxScorda 18:149091052948 241 /* reverse: reverse string s in place */
MaxScorda 18:149091052948 242 void genFunctions::reverse(char s[])
MaxScorda 18:149091052948 243 {
MaxScorda 18:149091052948 244 int c, i, j;
MaxScorda 18:149091052948 245 for (i = 0, j = strlen(s)-1; i < j; i++, j-- ) {
MaxScorda 18:149091052948 246 c = s[i];
MaxScorda 18:149091052948 247 s[i] = s[j];
MaxScorda 18:149091052948 248 s[j] = c;
MaxScorda 18:149091052948 249 }
MaxScorda 18:149091052948 250 }
MaxScorda 18:149091052948 251
MaxScorda 18:149091052948 252
MaxScorda 18:149091052948 253 /* atoi: convert s to integer; version 2 */
MaxScorda 18:149091052948 254 int genFunctions::atoi(char s[])
MaxScorda 18:149091052948 255 {
MaxScorda 18:149091052948 256 int i, n, sign;
MaxScorda 18:149091052948 257 for (i = 0; isspace(s[i]) ; i++) {
MaxScorda 18:149091052948 258 ; /* skip white space */
MaxScorda 18:149091052948 259 }
MaxScorda 18:149091052948 260 sign= (s[i] == '-') ? -1 : 1;
MaxScorda 18:149091052948 261 if (s[i] == '+' || s[i] == '-') i++; /* skip sign */
MaxScorda 18:149091052948 262 for (n = 0; isdigit(s[i]); i++ ) {
MaxScorda 18:149091052948 263 ;
MaxScorda 18:149091052948 264 }
MaxScorda 18:149091052948 265 n = 10 * n + (s[i] - '0');
MaxScorda 18:149091052948 266 return sign * n;
MaxScorda 18:149091052948 267 }
MaxScorda 17:9a7f30cb244d 268
MaxScorda 11:7c7848b76f06 269 int genFunctions::constrain(int amt, int low, int high)
MaxScorda 11:7c7848b76f06 270 {
MaxScorda 17:9a7f30cb244d 271 int ret=amt;
MaxScorda 17:9a7f30cb244d 272 if (amt>high) ret=high;
MaxScorda 17:9a7f30cb244d 273 else if (amt<low) ret= low;
MaxScorda 17:9a7f30cb244d 274 return ret;
MaxScorda 17:9a7f30cb244d 275 //return ((amt)<(low)?(low):((amt)>(high)?(high):(amt)));
MaxScorda 11:7c7848b76f06 276 }
MaxScorda 11:7c7848b76f06 277
MaxScorda 11:7c7848b76f06 278 int genFunctions::min(int a, int b)
MaxScorda 11:7c7848b76f06 279 {
MaxScorda 11:7c7848b76f06 280 return ((a)<(b)?(a):(b));
MaxScorda 11:7c7848b76f06 281 }
MaxScorda 11:7c7848b76f06 282
MaxScorda 11:7c7848b76f06 283 int genFunctions::max(int a, int b)
MaxScorda 11:7c7848b76f06 284 {
MaxScorda 5:0dd768073f59 285 return ((a)>(b)?(a):(b));
MaxScorda 11:7c7848b76f06 286 }
MaxScorda 11:7c7848b76f06 287
MaxScorda 11:7c7848b76f06 288 int genFunctions::abs(int x)
MaxScorda 11:7c7848b76f06 289 {
MaxScorda 5:0dd768073f59 290 return ((x)>0?(x):-(x));
MaxScorda 11:7c7848b76f06 291 }
MaxScorda 18:149091052948 292
MaxScorda 18:149091052948 293 /* trim: remove trailing blanks, tabs, newlines */
MaxScorda 18:149091052948 294 int genFunctions::trim(char s[])
MaxScorda 18:149091052948 295 {
MaxScorda 18:149091052948 296 int n;
MaxScorda 18:149091052948 297 for (n = strlen(s)-1; n >= 0; n--) {
MaxScorda 18:149091052948 298 if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n') break;
MaxScorda 18:149091052948 299 }
MaxScorda 18:149091052948 300 s[n+1] = '\0';
MaxScorda 18:149091052948 301 return n;
MaxScorda 18:149091052948 302 }