Funzioni di IO varie con seriale asincrona

Dependents:   Nucleo_AsyncSerialIO

Fork of IOFuncLib by Max Scordamaglia

IOFuncLib.cpp

Committer:
MaxScorda
Date:
2015-09-04
Revision:
12:0df187b0bfad
Parent:
11:7c7848b76f06
Child:
13:7871bb60d370

File content as of revision 12:0df187b0bfad:

#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(Serial* 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]=' ' ;
        }
    }
}

// ScreenAsync
ScreenAsync::ScreenAsync(BufferedSerial* bps) : Screen(Serial* ps)
{
 _bps=bps;
}



// 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));
}