Index: branch/DEMAGALHAES/sp4a12/main.c
===================================================================
--- branch/DEMAGALHAES/sp4a12/main.c	(revision 788)
+++ branch/DEMAGALHAES/sp4a12/main.c	(revision 789)
@@ -26,8 +26,7 @@
 {{44.7891220, -3.013}, 70},
 };
 
-int trame_cmp(char * trame, char * type)
-{
+int trame_cmp(char * trame, char * type){
     int indice=1;
     char mot[10]="";
     //Extraction du mot entre le symbole $ et la virgule
@@ -92,9 +91,7 @@
         return 0;
     }
 }
-
-int decode_int(char c)
-{
+int decode_int(char c){
     int code;
     char i;
     if(c >= '0' && c <= '9')
@@ -117,9 +114,7 @@
         return -1;
     }
 }
-
-int decode_nombrdistance_a_la_plus_proche_zone(pos1, zones, 2)e(char * ch, int n)
-{
+int decode_nombre(char * ch, int n){
     int longueurMot=0;
     char caratereCourrant=0;
     //Obtention de la longueur du Mot extrait entre le symbole $ et la virgule
@@ -136,7 +131,7 @@
     else{
         int j=0,sum=0;
         char nb[n];
-        for(j=0; j<n; j++)
+        for(j=0; j<=n; j++)
         {
             if(ch[j] < 48 || ch[j] > 57)
             {
@@ -151,8 +146,7 @@
     }
 }
 
-float CharVersDegre(char * ch)
-{
+float CharVersDegreV1(char * ch){
       char * nombre=ch;
       float dec;
       int compte=0,n,degre;
@@ -171,11 +165,14 @@
                   n=compte-1;
                   continue;
             }
-            float d = *ch - '0';
+            int d = *ch - '0';
             if (d >= 0 && d <= 9)
             {
-                  if (virguleVu) fact /= 10.0;
-                  res = res * 10.0 + d;
+                  if (virguleVu!=0)
+                  {
+                        fact /= 10.0;
+                  }
+                  res = res * 10.0 + (float)d;
             }
             if (*ch == ',')
             {
@@ -185,20 +182,54 @@
       dec=(res * fact);
       if (n==4)
       {
-            degre=decode_nombre(nombre,2);
+            degre=decode_nombre(nombre,1);
             dec=(dec-degre*100)/60;
       }
       else if (n==5)
       {
-            degre=decode_nombre(nombre,3);
+            degre=decode_nombre(nombre,2);
             dec=(dec-degre*100)/60;
       }
       dec = degre + dec;
       return dec;
 }
+int CharVersDegreV2(char * ch){
+      int resultat=0;
+      int longueurCh=0;
+      char caratereCourrant=0;
+      do
+      {
+            caratereCourrant=ch[longueurCh];
+            longueurCh++;
+      }
+      while (caratereCourrant != '\0');
+      longueurCh--;
 
-Position decode_trame(char * ch)
-{
+      if (longueurCh == 9)
+      {
+            int nombre=decode_nombre(ch,8);
+            int nombre_avant_vir=decode_nombre(ch,4);
+            int deg=decode_nombre(ch,1);
+            int minute_avant_vir=nombre_avant_vir-deg*100;
+            int minute_apres_vir=(nombre-nombre_avant_vir*10000);
+
+            resultat=(deg+(minute_avant_vir+minute_apres_vir*0.0001)/60)*256;
+
+      }
+      else
+      {
+            int nombre=decode_nombre(ch,9);
+            int nombre_avant_vir=decode_nombre(ch,5);
+            int deg=decode_nombre(ch,2);
+            int minute_avant_vir=nombre_avant_vir-deg*100;
+            int minute_apres_vir=(nombre-nombre_avant_vir*10000);
+
+            resultat=(deg+(minute_avant_vir+minute_apres_vir*0.0001)/60)*256;
+      }
+      return resultat;
+}
+
+Position decode_trameV1(char * ch){
       Position pos;
       int i,indice=0;
       char longitude[10]="";
@@ -229,7 +260,7 @@
 
                   if (compteur_de_virgule==4)
                   {
-                        for (int i = 0; i < 9; i++)
+                        for (int i = 0; i < 10; i++)
                         {
                               longitude[i]=ch[indice+1];
                               indice++;
@@ -238,26 +269,66 @@
                   }
                   indice++;
             } while (ch[indice]!='\0');
-            pos.latitude = CharVersDegre(latitude);
-            pos.longitude = CharVersDegre(longitude);
+            pos.latitude = CharVersDegreV1(latitude);
+            pos.longitude = CharVersDegreV1(longitude);
       }
       return pos;
 }
+Position decode_trameV2(char * ch){
+      Position pos1;
+      int i,indice=0;
+      char longitude[20]="";
+      char latitude[20]="";
+      int compteur_de_virgule = 0;
+      if (trame_cmp(ch,"GPGGA")==0)
+      {
+            return pos1;
+      }
+      else
+      {
 
-float calcul_distance(Position p1,Position p2)
-{
+            do
+            {
+                  if (ch[indice]==',')
+                  {
+                        compteur_de_virgule++;
+                  }
+
+                  if (compteur_de_virgule==2)
+                  {
+                        for (int i = 0; i < 9; i++)
+                        {
+                              latitude[i]=ch[indice+1];
+                              indice++;
+                        }
+                  }
+
+                  if (compteur_de_virgule==4)
+                  {
+                        for (int i = 0; i < 10; i++)
+                        {
+                              longitude[i]=ch[indice+1];
+                              indice++;
+                        }
+                        break;
+                  }
+                  indice++;
+            } while (ch[indice]!='\0');
+            pos1.latitude = (float)CharVersRadiansV2(latitude)/256;
+            pos1.longitude = (float)CharVersRadiansV2(longitude)/256;
+      }
+      return pos1;
+}
+
+float calcul_distance(Position p1,Position p2){
       float R_terre=6378.137;
       float distance = R_terre*(p1.latitude-p2.latitude)*(3.14/180);
       return distance;
 }
-
-float calcul_vitesse(float distance)
-{
+float calcul_vitesse(float distance){
       return distance*3600;
 }
-
-float distance_a_la_plus_proche_zone(Position pos_voiture, Zone r[], int nb_zones)
-{
+float distance_a_la_plus_proche_zone(Position pos_voiture, Zone r[], int nb_zones){
       Position t[nb_zones];
       for (int i = 0; i < nb_zones; i++)
       {
@@ -283,13 +354,11 @@
 }
 
 //Fonction à modifier !!!!!
-void traitement(char * trame)
-{
+void traitement(char * trame){
     static int cpt=0;
     cpt++;
     printf ("> %s\n",trame);
 }
-distance_a_la_plus_proche_zone(pos1, zones, 2)
 //Ajouter vos tests unitaires dans cette fonction.
 void tests_unitaires(void){
     printf("Test de la fonction trame_cmp \n");
@@ -318,8 +387,7 @@
     {
         printf("Pas d'erreur fonction potentiellement valide !\n");
     }
-}
-
+}
 //Fonction de tests unitaires pour decode_int
 void test_decode_int(void){
     printf("Test de la fonction decode_int \n");
@@ -338,7 +406,6 @@
         printf("Pas d'erreur fonction potentiellement valide ! \n");
     }
 }
-
 //Fonction de tests unitaires pour decode_nombre
 void test_decode_nombre(void){
    printf("Test de la fonction decode_nombre \n");
@@ -359,7 +426,6 @@
         printf("Pas d'erreur fonction potentiellement valide ! \n");
     }
 }
-
 void test_decode_trame(){
     printf("Test de la fonction test_decode_trame \n");
     if (5!=5){
