Index: branch/Ndong_Yaye_Oumy/sp4a12/main.c
===================================================================
--- branch/Ndong_Yaye_Oumy/sp4a12/main.c	(revision 328)
+++ branch/Ndong_Yaye_Oumy/sp4a12/main.c	(revision 329)
@@ -15,6 +15,13 @@
                     "$GPZDA,141914.00,01,02,2006,00,00*69",
                     0};
 
+
+typedef struct {
+float latitude;
+float longitude;
+}Position ;
+
+
  int trame_cmp(char* trame,char *type){ // fonction qui renvoie 1 si la trame commence par la chaîne de caractère type et zéro dans les autres cas
 	int i, ok =1 ;
 	for(i=0 ;i<=4 ;i=i+1){
@@ -36,6 +43,7 @@
 }
 
 
+
 int decode_nombre (char *ch,int n){ // fonction qui renvoie qui renvoie la valeur décimale des n premiers caractères de la chaîne ch
 
     int i,s=0;
@@ -45,6 +53,7 @@
     return s;
 }
 
+
 float conv_lat_flottant(char * ch) {  // fonction qui convertit les latitudes en flottant
     float latitude;
     int val_degree,valEnt_min,valDec_min;
@@ -55,6 +64,7 @@
     return latitude;
 }
 
+
 float conv_long_flottant(char * ch) { //e fonction convertissant la chaîne de caractère contenant la longitude en nombre flottant et son test unitaire.
     float longitude;
     int val_degree,valEnt_min,valDec_min;
@@ -65,6 +75,7 @@
     return longitude;
 }
 
+
 float conv_sexa_flottant(char * ch){ // Qui décode indifféremment une latitude ou une longitude.
     float coordonnee;
     if (ch[4]!='.'){ // si la chaine contient 5 caractères avant le point on considère que c'est une longitude
@@ -74,10 +85,43 @@
     }
     return coordonnee;
 }
+
+
+int decode_trame(char* t, Position* p){
+    int a,i;
+    char copie_lat[9];
+    char copie_long[10];
+    a=trame_cmp(t,"GPGGA");
+    if(a==1)
+    {
+        for(i=0;i<9;++i)
+        {
+            copie_lat[i]=t[27+i];
+        }
+        (*p).latitude= conv_lat_flottant(copie_lat);
+        for(i=0;i<10;++i)
+        {
+            copie_long[i]=t[29+i];
+        }
+        (*p).longitude=conv_long_flottant(copie_long);
+    }else{
+        exit(-1);
+    }
+    return a;  if(decode_nombre("5145",2)!=51){                    //test decode_nombre
+        printf ("Erreur Test unitaire trame_cmp.\n");
+         exit(-1);
+    }
+     if(decode_nombre("1234",2)!=12){
+        printf ("Erreur Test unitaire trame_cmp.\n");
+         exit(-1);
+    }
+}
+
 
 //Fonction à modifier !!!!!
 void traitement(char * trame)
 {
+
     static int cpt=0;
     cpt++;
 }
@@ -84,10 +128,17 @@
 
 //Ajouter vos tests unitaires dans cette fonction.
 void tests_unitaires(void){
+    Position a={0.0,0.0};   // on initialise 2 struxtrures afin d'effecuer les test unitaires de decode_trame
+    Position b={0.0,0.0};
+    Position* p;
+    Position* p2; // pour tester decode_trame
+    p=&a;  // on affecte à chache pointeur l'adresse d'une stru
+    p2=&b;
 
     if (5!=5){
         printf ("Erreur Test unitaire basique.\n");
-        exit(-1);
+        exit(-1);printf ("Erreur Test unitaire trame_cmp.\n");
+         exit(-1);
 
     }
    if (trame_cmp("$GPGGA suite chaine","GPGGA")!=1)
@@ -115,7 +166,7 @@
         printf ("Erreur Test unitaire trame_cmp.\n");
         exit(-1);
     }
-    if(decode_int('0')!=0){
+    if(decode_int('0')!=0){                             //tests decode_int
         printf ("Erreur Test unitaire trame_cmp.\n");
          exit(-1);
     }
@@ -123,7 +174,7 @@
         printf ("Erreur Test unitaire trame_cmp.\n");
          exit(-1);
     }
-    if(decode_nombre("5145",2)!=51){
+    if(decode_nombre("5145",2)!=51){                    //test decode_nombre
         printf ("Erreur Test unitaire trame_cmp.\n");
          exit(-1);
     }
@@ -131,15 +182,15 @@
         printf ("Erreur Test unitaire trame_cmp.\n");
          exit(-1);
     }
-    if(conv_lat_flottant("3723.2475")-37.387458>0.0001){ // prise en compte de l'erreur sur la précision
+    if(conv_lat_flottant("3723.2475")-37.387458>0.0001){ // test de la fonction de conversion d'une latitude en flottant/ prise en compte de l'erreur sur la précision
         printf ("Erreur Test unitaire trame_cmp.\n");
          exit(-1);
     }
-     if(conv_long_flottant("00306.6036")-3.11006>0.0001){ // prise en compte de l'erreur sur la précision
+     if(conv_long_flottant("00306.6036")-3.11006>0.0001){ // test de la fonction de conversion d'une longitude en flottant/prise en compte de l'erreur sur la précision
         printf ("Erreur Test unitaire trame_cmp.\n");
          exit(-1);
     }
-    if(conv_sexa_flottant("3723.2475")-37.387458>0.0001){ // prise en compte de l'erreur sur la précision
+    if(conv_sexa_flottant("3723.2475")-37.387458>0.0001){ // test de la fonction de conversion d'une coordonnée sexagésimale en flottant/prise en compte de l'erreur sur la précision
         printf ("Erreur Test unitaire trame_cmp.\n");
          exit(-1);
     } if(conv_lat_flottant("4557.5679")-45.959465>0.0001){ // prise en compte de l'erreur sur la précision
@@ -154,11 +205,28 @@
         printf ("Erreur Test unitaire trame_cmp.\n");
          exit(-1);
     }
+   if(decode_trame("$GPGGA,141915.00,4545.0242,N,00306.6039,E,1,05,3.4,499.5,M,,M,,*72",p2)==0){ // test pour voir si la comparaison marche(trame valide ou non)
+        printf ("Erreur Test unitaire decode_trame.\n");
+         exit(-1);
+    }
+   decode_trame("$GPGGA,141915.00,3723.2475,N,00306.6036,E,1,05,3.4,499.5,M,,M,,*72",p);
+   if((*p).longitude-3.11006>0.0001)
+    {
+         printf ("Erreur Test unitaire decode_trame.\n"); ////test pour voir si le calcul de la longitude extraite de la trame est bon
+         exit(-1);
+   }
+   if((*p).latitude-37.387458>0.0001) //test pour voir si le calcul de la latitude extraite de la trame est bon
+    {
+         printf ("Erreur Test unitaire decode_trame.\n");
+         exit(-1);
 
+   }
+
 
 }
 
 
+
 
 // Ne pas modifier cette fonction
 int main(int argc,char ** argv)
