Index: branch/jouanny2/sp4a12/main.c
===================================================================
--- branch/jouanny2/sp4a12/main.c	(revision 375)
+++ branch/jouanny2/sp4a12/main.c	(revision 376)
@@ -2,7 +2,8 @@
 #include <stdlib.h>
 #include <strings.h>
 #include "trame.h"
-
+
+#define Rt 6400 /*rayon de la terre*/
 //Trames de tests à modifier si nécessaire.
 char * trames[]=  {"$GPGSV,3,2,10,15,03,077,,18,04,041,42,19,85,271,,20,08,214,*7C",
                     "$GPGSV,3,3,10,22,39,053,50,28,15,320,*7E",
@@ -19,41 +20,7 @@
     float Lon; /* lontitude */
 } Position;
 
-float decode_trame(char *trame);
-//Fonction à modifier !!!!!
-void traitement(char * trame)
-{
-    static int cpt=0;
-    Position pos;
-void test_decode_nombre()
-{
-    char t[5];
-    t[0] = '1';
-    t[1] = '2';
-    t[2] = '3';
-    t[3] = '4';
 
-    if (decode_nombre(t,1) != 1)
-    {
-        printf ("Erreur test unitaire decode_nombre_1\n");
-        exit(-1);
-    }
-
-    if (decode_nombre(t,4) != 1234)
-    {
-        printf ("Erreur test unitaire decode_nombre_2\n");
-        exit(-1);
-    }
-}
-    if (trame_cmp(trame, "GPGGA")==1)
-    {
-        printf("> %s\n", trame);
-        decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D");
-        cpt++;
-    }
-}
-
-
 int trame_cmp(char *trame, char *type)
 {
     int i,b=1;
@@ -84,12 +51,11 @@
     return nb;
 }
 
-int decode_nombre(char *ch, int n) /* fonction qui permet de passer d'une chaine de caractere a un entier */
+int decode_nombre(char *ch, int i, int n) /* fonction qui permet de passer d'une chaine de caractere a un entier */
 {
     int res=0; /* initialisation du resultat=0 */
-    int i;
 
-    for (i=0; i<n; i++)
+    for (i; i<=n; i++)
     {
         res=10*res + decode_int(ch[i]); /* permet de reconstituer le nombre terme a terme par puissance de 10 */
     }
@@ -98,40 +64,42 @@
 
 float decode_latitude(char *trame) /* fonction convertissant la chaîne de caractère contenant la latitude en nombre flottant et son test unitaire */
 {
-    int i;
-    char minute[5]; /*caractere de 4 */
-    float degre_Lat, min_Lat, res_decodeLat;
+    float res_decode_Lat, res1, res2, res3;
 
-    for (i=0; i<4; i++)
-        {
-            minute[i] = trame[i+22];
-        }
+    res1 = decode_nombre(trame,17,18);      //retrouver les degrés en sexagesimal dans la trame
+    res2 = decode_nombre(trame,19,20);      //retrouver les minutes en sexagesimal dans la trame
+    res3 = decode_nombre(trame,22,25);      //retrouver les secondes en sexagesimal dans la trame
 
-    degre_Lat = 10*decode_int(trame[17])+ decode_int(trame[18]);
-    min_Lat = 10*decode_int(trame[19]) + decode_int(trame[20]) + 0.0001*decode_nombre(minute,4);
-    res_decodeLat = degre_Lat + min_Lat/60;
+    res_decode_Lat = res1 + (res2 + res3/10000)/60;    //conversion sexagesimal à degrés
 
-    return res_decodeLat;
+    if(trame[27]=='S')     //identifier si la latitude est nord ou sud
+    {
+        res_decode_Lat = -res_decode_Lat;
+    }
+
+    return res_decode_Lat;
 }
 
+
 float decode_longitude(char *trame) /* fonction convertissant la chaîne de caractère contenant la longitude en nombre flottant et son test unitaire */
 {
-    int i;
-    char minute[5];
-    float degre_Lon, min_Lon, res_decodeLon;
+    float res_decode_Lon, res1, res2, res3;
 
-    for (i=0 ; i<4 ; i++)
+    res1 = decode_nombre(trame,30,31);
+    res2 = decode_nombre(trame,32,33);
+    res3 = decode_nombre(trame,35,38);
+
+    res_decode_Lon = res1 + (res2 + res3/10000)/60;
+
+    if(trame[39]=='W')     //identifier si la latitude est ouest ou est
     {
-        minute[i] = trame[i+35];
+        res_decode_Lon = -res_decode_Lon;
     }
 
-    degre_Lon = 100*decode_int(trame[29]) + 10*decode_int(trame[30]) + decode_int(trame[31]);
-    min_Lon = 10*decode_int(trame[32]) + decode_int(trame[33]) + 0.0001*decode_nombre(minute,4);
-    res_decodeLon = degre_Lon + min_Lon/60;
-
-    return res_decodeLon;
+    return res_decode_Lon;
 }
 
+
 Position decode_position(char *trame) /* fonction qui décode indifféremment une latitude ou une longitude */
 {
     Position pos;
@@ -185,19 +153,19 @@
     {
         printf ("Erreur Test unitaire decode_int.\n");
         exit(-1);
-    }
-    test_decode_nombre();
+    }*/
+    /*test_decode_nombre();*/
     if (decode_latitude("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D") != 45.75)
     {
         printf ("Erreur test unitaire decode_latitude\n");
         exit(-1);
     }
-    if (decode_latitude("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D") != 45.75)
+    if (decode_longitude("$GPGGA,141914.00,4545.0000,N,00345.0000,E,1,05,3.4,499.3,M,,M,,*7D") != 3.75)
     {
-        printf ("Erreur test unitaire decode_latitude\n");
+        printf ("Erreur test unitaire decode_longitude\n");
         exit(-1);
     }
-    if (decode_position("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D").Lon != 3.1100599765777588)
+    /*if (decode_position("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D").Lon != 3.1100599765777588)
     {
         printf ("Erreur test unitaire decode_longitude-1\n");
         exit(-1);
@@ -212,25 +180,42 @@
 void test_decode_nombre()
 {
     char t[5];
-    t[0] = '1';
-    t[1] = '2';
-    t[2] = '3';
-    t[3] = '4';
+    t[0] = '1'; t[1] = '2'; t[2] = '3'; t[3] = '4';/*initialisation de la trame test*/
 
-    if (decode_nombre(t,1) != 1)
+    if (decode_nombre(t,0,0) != 1)
     {
         printf ("Erreur test unitaire decode_nombre_1\n");
         exit(-1);
     }
 
-    if (decode_nombre(t,4) != 1234)
+    if (decode_nombre(t,0,3) != 1234)
     {
         printf ("Erreur test unitaire decode_nombre_2\n");
         exit(-1);
     }
+    if (decode_nombre(t,0,3) != 1357)
+    {
+        printf ("Erreur test unitaire decode_nombre_3\n");
+        exit(-1);
+    }
 }
 
+//Fonction à modifier !!!!!
+void traitement(char * trame)
+{
+    static int cpt=0;
+    Position pos;
 
+    if (trame_cmp(trame, "GPGGA")==1)
+    {
+        printf("> %s", trame);
+        /*decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D");*/
+        decode_position(trame);
+        printf("%f\n", pos.Lat);
+        printf("%f\n\n", pos.Lon);
+        cpt++;
+    }
+}
 // Ne pas modifier cette fonction
 int main(int argc,char ** argv)
 {
