main_imu, MPU6050 , racolta_dati sono per il funzionamento dell' accelerometro. my_img_sd è una libreria per gestire i dati su un sd sulla quale vengono forniti solamente le funzioni di lettura e scrittura a blocchi i file trasmetti sono la definizione e implementazione delle funzioni del protoccolo per la gestione dell' invio dei dati con il relativo formato

Dependencies:   mbed

trasmetti.cpp

Committer:
rattokiller
Date:
2017-11-05
Revision:
0:a9753886e1e0

File content as of revision 0:a9753886e1e0:

#define tra_cpp
#include "trasmetti.h"
#include <cstring>
//#include <iostream>

namespace mydati{



bool trasmetti::ins_in_testa(pacco* d,char priorita){
    coda* app;
    app =new coda;
    if(!app)return false;
    app->dato=d;
    app->priorita=priorita;
    n++;
    app->suc=testa;
    testa=app;
    delete [] d->txt;
    return true;
    
}
bool trasmetti::ins_in_coda(pacco* d,char priorita){

    coda* app;
    app =new coda;
    if(!app)return false;
 //   pc.printf("funzione ins coda 1 \r\n");
 
    app->dato=d;
 
    /*
    app->dato=new pacco;
    app->dato->n=d->n;
    app->dato->txt=new char[d->n];
    strcpy(app->dato->txt,d->txt);
    delete [] d->txt;
    */

    if(!n){testa=fine=app;  n++;return true;}
//pc.printf("funzione ins coda 3 \r\n");
        fine->suc=app;
        fine=app;
        fine->suc=0;
        n++;
        return true; 
};
bool trasmetti::ins_priorita(pacco* d,char priorita){

    coda* app;
    app =new coda;
    if(!app)return false;
    app->dato=d;

    app->priorita=priorita;

    if(!n){app->suc=0;testa=fine=app;   n++;return true;}
    if(testa->priorita<priorita){n++;app->suc=testa; testa=app;return true;}
    
    coda* cerca = testa;
    if(n!=1){   bool tr =true;
    while(cerca->suc->suc!=0&&tr)
        if(cerca->suc->priorita>=priorita)
        {
        cerca=cerca->suc;       
        }
        else tr=false;
        
    app->suc=cerca->suc;
    cerca->suc=app;
    n++;
    return true;
    }
        fine->suc=app;
        fine=app;
        fine->suc=0;
        n++;
        return true; 
};

bool trasmetti::invio(){ // iovio i dati!
  
 if(!n)return false;
 pacco* app;
 extract(&app); 

if(!pc_trasmisione(app->n,app->txt))return false;
 delete [] app->txt;
 delete app;

 return true;
}
void trasmetti::extract(pacco** d){
    if(n!=0){
    
    coda* app=testa;
    *d=testa->dato;
    testa=testa->suc;
    n--;

    delete app;
    }
    
}
bool dati_imu::invia(char p){
    //da agiungere una stringa per il protocolla dei tipo dei dati... 
    //es #nomeclasse@dati
    pacco* app;
    app= new pacco;
    app->n=nb_classe;
    app->txt=new char[nb_classe+1];
    sprintf(app->txt,"A%03.0f%03.0f%03.0f%04.0f%04.0f%04.0f#%d",1000*ax+off_set_a,1000*ay+off_set_a,1000*az+off_set_a,10*gx+off_set_g,10*gy+off_set_g,10*gz+off_set_g,number());
    
    
    //app->txt=buffer;
    /*
    app->txt=new char[strlen(buffer)+1];
    //printf("ximu %d X \n",strlen(buffer));
    strcpy(app->txt,buffer);
   */ 
    //*funzione se si vuole usare la trasmisione binaria
    //memcpy((void*)app->txt,(void*)this,nb_classe);
    
    
    
    return telemetria.ins_in_coda(app,p);
}




bool  estensimetro::invia(char p){
    pacco* app;
    app= new pacco;
    app->n=nb_classe;
    app->txt=new char[nb_classe+1];
    sprintf(app->txt,"B%04.0f%04.0f%04.0f%04.0f#%d",ad,as,pd,ps,number());
     
    
    
    return telemetria.ins_in_coda(app,p);
}

bool  ruota_fonica::invia(char p){
    pacco* app;
    app= new pacco;
    app->n=nb_classe;
     app->txt=new char[nb_classe+1];
     
    sprintf(app->txt,"C%04.0f%04.0f%04.0f%04.0f#%d",ad,as,pd,ps,number());
    //sprintf(app->txt,"C%04.0f%04.0f#%d",ad,as,pd,ps,number());
    
    
    return telemetria.ins_in_coda(app,p);
}

bool  motore::invia(char p){
    pacco* app;
    app= new pacco;
    app->n=nb_classe;
    //char buffer[50];
    app->txt=new char[nb_classe+1];
    
   
    if(P_olio>10){pc.printf("errore olio troppo alto");P_olio=9.9;}
    
    if(velocita>10000){pc.printf("errore velocita troppo alta!");velocita=9999;}
    //D 2000 7700 80800 9400 22 5#2
    sprintf(app->txt,"D%03d%03d%05.0f%04.0f%02.0f%d#%d",T_acqua,T_olio,RMP,velocita,10*P_olio,marcia,number());
  //  pc.printf("funzione motore.invia \r\n");
    return telemetria.ins_in_coda(app,p);
}
bool allert::invia(const char* s){
    
    
    pacco* app;
    app= new pacco;
    app->n=strlen(s+1);
    //app->txt=new char[app->n+1];
    app->txt=(char*)s;
    
    return telemetria.ins_in_testa(app);
    }
}