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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers trasmetti.cpp Source File

trasmetti.cpp

00001 #define tra_cpp
00002 #include "trasmetti.h"
00003 #include <cstring>
00004 //#include <iostream>
00005 
00006 namespace mydati{
00007 
00008 
00009 
00010 bool trasmetti::ins_in_testa(pacco* d,char priorita){
00011     coda* app;
00012     app =new coda;
00013     if(!app)return false;
00014     app->dato=d;
00015     app->priorita=priorita;
00016     n++;
00017     app->suc=testa;
00018     testa=app;
00019     delete [] d->txt;
00020     return true;
00021     
00022 }
00023 bool trasmetti::ins_in_coda(pacco* d,char priorita){
00024 
00025     coda* app;
00026     app =new coda;
00027     if(!app)return false;
00028  //   pc.printf("funzione ins coda 1 \r\n");
00029  
00030     app->dato=d;
00031  
00032     /*
00033     app->dato=new pacco;
00034     app->dato->n=d->n;
00035     app->dato->txt=new char[d->n];
00036     strcpy(app->dato->txt,d->txt);
00037     delete [] d->txt;
00038     */
00039 
00040     if(!n){testa=fine=app;  n++;return true;}
00041 //pc.printf("funzione ins coda 3 \r\n");
00042         fine->suc=app;
00043         fine=app;
00044         fine->suc=0;
00045         n++;
00046         return true; 
00047 };
00048 bool trasmetti::ins_priorita(pacco* d,char priorita){
00049 
00050     coda* app;
00051     app =new coda;
00052     if(!app)return false;
00053     app->dato=d;
00054 
00055     app->priorita=priorita;
00056 
00057     if(!n){app->suc=0;testa=fine=app;   n++;return true;}
00058     if(testa->priorita<priorita){n++;app->suc=testa; testa=app;return true;}
00059     
00060     coda* cerca = testa;
00061     if(n!=1){   bool tr =true;
00062     while(cerca->suc->suc!=0&&tr)
00063         if(cerca->suc->priorita>=priorita)
00064         {
00065         cerca=cerca->suc;       
00066         }
00067         else tr=false;
00068         
00069     app->suc=cerca->suc;
00070     cerca->suc=app;
00071     n++;
00072     return true;
00073     }
00074         fine->suc=app;
00075         fine=app;
00076         fine->suc=0;
00077         n++;
00078         return true; 
00079 };
00080 
00081 bool trasmetti::invio(){ // iovio i dati!
00082   
00083  if(!n)return false;
00084  pacco* app;
00085  extract(&app); 
00086 
00087 if(!pc_trasmisione(app->n,app->txt))return false;
00088  delete [] app->txt;
00089  delete app;
00090 
00091  return true;
00092 }
00093 void trasmetti::extract(pacco** d){
00094     if(n!=0){
00095     
00096     coda* app=testa;
00097     *d=testa->dato;
00098     testa=testa->suc;
00099     n--;
00100 
00101     delete app;
00102     }
00103     
00104 }
00105 bool dati_imu::invia(char p){
00106     //da agiungere una stringa per il protocolla dei tipo dei dati... 
00107     //es #nomeclasse@dati
00108     pacco* app;
00109     app= new pacco;
00110     app->n=nb_classe;
00111     app->txt=new char[nb_classe+1];
00112     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());
00113     
00114     
00115     //app->txt=buffer;
00116     /*
00117     app->txt=new char[strlen(buffer)+1];
00118     //printf("ximu %d X \n",strlen(buffer));
00119     strcpy(app->txt,buffer);
00120    */ 
00121     //*funzione se si vuole usare la trasmisione binaria
00122     //memcpy((void*)app->txt,(void*)this,nb_classe);
00123     
00124     
00125     
00126     return telemetria.ins_in_coda(app,p);
00127 }
00128 
00129 
00130 
00131 
00132 bool  estensimetro::invia(char p){
00133     pacco* app;
00134     app= new pacco;
00135     app->n=nb_classe;
00136     app->txt=new char[nb_classe+1];
00137     sprintf(app->txt,"B%04.0f%04.0f%04.0f%04.0f#%d",ad,as,pd,ps,number());
00138      
00139     
00140     
00141     return telemetria.ins_in_coda(app,p);
00142 }
00143 
00144 bool  ruota_fonica::invia(char p){
00145     pacco* app;
00146     app= new pacco;
00147     app->n=nb_classe;
00148      app->txt=new char[nb_classe+1];
00149      
00150     sprintf(app->txt,"C%04.0f%04.0f%04.0f%04.0f#%d",ad,as,pd,ps,number());
00151     //sprintf(app->txt,"C%04.0f%04.0f#%d",ad,as,pd,ps,number());
00152     
00153     
00154     return telemetria.ins_in_coda(app,p);
00155 }
00156 
00157 bool  motore::invia(char p){
00158     pacco* app;
00159     app= new pacco;
00160     app->n=nb_classe;
00161     //char buffer[50];
00162     app->txt=new char[nb_classe+1];
00163     
00164    
00165     if(P_olio>10){pc.printf("errore olio troppo alto");P_olio=9.9;}
00166     
00167     if(velocita>10000){pc.printf("errore velocita troppo alta!");velocita=9999;}
00168     //D 2000 7700 80800 9400 22 5#2
00169     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());
00170   //  pc.printf("funzione motore.invia \r\n");
00171     return telemetria.ins_in_coda(app,p);
00172 }
00173 bool allert::invia(const char* s){
00174     
00175     
00176     pacco* app;
00177     app= new pacco;
00178     app->n=strlen(s+1);
00179     //app->txt=new char[app->n+1];
00180     app->txt=(char*)s;
00181     
00182     return telemetria.ins_in_testa(app);
00183     }
00184 }
00185