Index: branch/PUECH_Alexis/sp4a12/main.c
===================================================================
--- branch/PUECH_Alexis/sp4a12/main.c	(revision 266)
+++ branch/PUECH_Alexis/sp4a12/main.c	(revision 267)
@@ -12,8 +12,15 @@
                     "$GPGSA,A,3,,03,,22,14,,01,,18,,,,3.9,3.4,1.9*39",
                     "$GPVTG,99.4,T,,M,0.4,N,0.7,K*57",
                     "$GPZDA,141914.00,01,02,2006,00,00*69",
-                    0};
-
+                    0};
+typedef struct
+{
+    float Latitude;
+    float Longitude;
+}Position;
+
+
+float decode_position(char *trame,Position Pos);
 //Fonction à modifier !!!!!
 void traitement(char * trame)
 {
@@ -31,22 +38,37 @@
         printf ("Erreur Test unitaire basique.\n");
         exit(-1);
     }
-    if (trame_cmp("$GPGGA suite chaine","GPGGA")!=1){
-        printf ("Erreur Test unitaire trame_cmp.\n");
+    /*if (trame_cmp("$GPGGA suite chaine","GPGGA")!=1){
+        printf ("Erreur Test unitaire trame_cmp1.\n");
         exit(-1);
     }
     if (trame_cmp("$GPRMC suite chaine","GPGGA")!=0){
-        printf ("Erreur Test unitaire trame_cmp.\n");
+        printf ("Erreur Test unitaire trame_cmp2.\n");
         exit(-1);
     }
     if (trame_cmp("$GPRMC... ", "GPRMC" )!=1){
-        printf ("Erreur Test unitaire trame_cmp.\n");
+        printf ("Erreur Test unitaire trame_cmp3.\n");
         exit(-1);
     }
     if (trame_cmp("$APRMC...", "GPGGA")!=0){
-        printf ("Erreur Test unitaire trame_cmp.\n");
+        printf ("Erreur Test unitaire trame_cmp4.\n");
         exit(-1);
     }
+    if (test_decode_int()!=1){
+        printf ("Erreur Test unitaire trame_cmp5.\n");
+        exit(-1);
+    }
+    if (test_decode_nombre()!=1){
+        printf ("Erreur Test unitaire trame_cmp6.\n");
+        exit(-1);
+    }
+    if (test_decode_latitude()!=1){
+        printf ("Erreur Test unitaire trame_cmp7.\n");
+        exit(-1);
+    }*/
+    Position pos;
+    printf("%f\n",decode_position("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D",pos));
+
 }
 
 int decode_int(char c)//Fonction qui permet de passer d'un caratere a un entier
@@ -68,39 +90,39 @@
     {
         verif=0;
     }
-    if(decode_int('1')!=0)
+    if(decode_int('1')!=1)
     {
         verif=0;
     }
-    if(decode_int('2')!=0)
+    if(decode_int('2')!=2)
     {
         verif=0;
     }
-    if(decode_int('3')!=0)
+    if(decode_int('3')!=3)
     {
         verif=0;
     }
-    if(decode_int('4')!=0)
+    if(decode_int('4')!=4)
     {
         verif=0;
     }
-    if(decode_int('5')!=0)
+    if(decode_int('5')!=5)
     {
         verif=0;
     }
-    if(decode_int('6')!=0)
+    if(decode_int('6')!=6)
     {
         verif=0;
     }
-    if(decode_int('7')!=0)
+    if(decode_int('7')!=7)
     {
         verif=0;
     }
-    if(decode_int('8')!=0)
+    if(decode_int('8')!=8)
     {
         verif=0;
     }
-    if(decode_int('9')!=0)
+    if(decode_int('9')!=9)
     {
         verif=0;
     }
@@ -107,8 +129,69 @@
 
     return verif;
 }
-
 
+int decode_nombre(char *ch,int n,int i)//Fonction qui permet de passer d'une chaine de caratere a un entier
+{
+    int temp=0;
+    for(i;i<n;i++)
+    {
+        temp=(temp*10)+decode_int(ch[i]);
+    }
+    return temp;
+}
+
+int test_decode_nombre()//A verifier
+{
+    if(decode_nombre("758961",2,0)!=75)
+    {
+        exit(-1);
+    }
+    if(decode_nombre("758961",5,0)!=75896)
+    {
+        exit(-1);
+    }
+    return 1;
+}
+
+float decode_latitude(char *trame )
+{
+    float degres,reste,flottant,res;
+    int i=17;
+    degres=decode_nombre(trame,i+2,i);
+    reste=decode_nombre(trame,i+4,i+2);
+    flottant=decode_nombre(trame,i+10,i+5);
+    res=degres+((reste+(flottant/10000))/60);
+    return res;
+}
+
+int test_decode_latitude()
+{
+    if((-0.00001<=decode_latitude("3723.2475")-37.387458)&&(decode_latitude("3723.2475")-37.387458<=0.00001))
+    {
+        printf("Erreur Test unitaire latitude \n");
+        exit(-1);
+    }
+    return 1;
+}
+
+float decode_longitude(char *trame )
+{
+    float degres,reste,flottant,res;
+    int i=30;
+    degres=decode_nombre(trame,i+2,i);
+    reste=decode_nombre(trame,i+3,i+2);
+    flottant=decode_nombre(trame,i+10,i+5);
+    res=degres+((reste+(flottant/10000))/60);
+    return res;
+
+}
+
+float decode_position(char *trame,Position Pos)
+{
+    Pos.Latitude=decode_latitude(trame);
+    Pos.Longitude=decode_longitude(trame);
+}
+
 int trame_cmp(char * trame,char * type)
 {
     int i;
