Index: branch/BRAVO/sp4a12/main.c
===================================================================
--- branch/BRAVO/sp4a12/main.c	(revision 519)
+++ branch/BRAVO/sp4a12/main.c	(revision 520)
@@ -2,8 +2,36 @@
 #include <stdlib.h>
 #include <strings.h>
 #include <math.h>
-#include "trame.h"
+#include "trame.h"
+
+#define Rterre 6370
+#define PI 3.14159
+
+//Structure
+
+typedef struct
+{
+    float Latitude;
+    float Longitude;
+}Pos;
+
+//Position p1,p2;
+
+typedef struct
+{
+    Pos rp;
+    float vitmax;
+}Zone;
 
+Zone zones[] = {
+ {{44.7887762, -3.012}, 50}, /* Descripteur de la première zone */
+ {{44.7891220, -3,013}, 70},
+ {{46.2514780,  4.000}, 80},
+};
+
+int nb_zone=3;
+
+
 //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",
@@ -15,10 +43,13 @@
                     "$GPZDA,141914.00,01,02,2006,00,00*69",
                     0};
 
-/*void ma_fonction(){
 
-}
-void decode_trame(char * tr){
+
+
+//Fontions personnelles
+
+
+/*void decode_trame(char * tr){
 //implanter une partie de votre code ICI.
 Appel de ma_fonction() ;
 }
@@ -30,25 +61,8 @@
 }
 */
 
-//Structure
-
-typedef struct
+int trame_cmp(char*trame, char*type)
 {
-    float Latitude;
-    float Longitude;
-}Position;
-
-Position p1,p2;
-typedef struct
-{
-    Position rpos;
-    float vitmax;
-}Zone;
-
-//Fontions personnelles
-
-int trame_cmp(char * trame, char * type)
-{
     int i=0, ok=1;
 
     for(i=0;i<6;i++)
@@ -71,14 +85,15 @@
 {
     static int cpt=0 ;
     cpt++ ;
+    Pos p;
 
-   /* if(trame_cmp("$GPGGA suite chaine","GPGGA"))
+    if(trame_cmp(trame,"GPGGA")==1)
     {
+        printf("%s\n",trame);
+        decode_trame(trame,&p);
 
-    }*/
-    printf ("> %s\n",trame);
-
-
+        printf("Latitude= %f , Longtude= %f \n",p.Latitude,p.Longitude);
+    }
 }
 
 
@@ -108,18 +123,20 @@
 
 int decode_int(char c)
 {
+    int b;
+
     if(c>='0' && (c<='9'))
     {
-        c=c-48;
+        b=c-48;
     }
     else
     {
         if((c>='A') && c<='Z')
         {
-            c=64-c;
+            b=64-c;
         }
     }
-    return c;
+    return b;
 }
 void test_decode_int(void)
 {
@@ -155,13 +172,13 @@
    }
 }
 
-int decode_nombre(char *ch, int n)
+int decode_nombre(char *ch,int i,int n)
 {
- int temp=0, i;
+ int temp=0, j;
 
- for(i=0;i<n;i++)
+ for(j=i;j<i+n;j++)
  {
-     temp=(temp*10) + decode_int(ch[i]);
+     temp=(temp*10) + decode_int(ch[j]);
  }
  return temp;
 }
@@ -168,20 +185,27 @@
 
 void test_decode_nombre(void)
 {
-    if(decode_nombre("4325",2)!=43){
+    if(decode_nombre("4325",0,2)!=43){
        printf("Erreur test decode_nombre.\n");
     }
+    if(decode_nombre("6789",1,3)!=789){
+       printf("Erreur test decode_nombre.\n");
+    }
 }
 
 float decode_latitude(char *trame )
 {
-    float degres,reste,flottant,res;
+    float deg,reste,flottant,res;
     int i=17;
-    degres=decode_nombre(trame,i+2);
-    reste=decode_nombre(trame,i+4);
-    flottant=decode_nombre(trame,i+10);
+    deg=decode_nombre(trame,i+2,i);
+    reste=decode_nombre(trame,i+4,i+2);
+    flottant=decode_nombre(trame,i+10,i+5);
+    res=deg+((reste+(flottant/10000))/60);
 
-    res=degres+((reste+(flottant/10000))/60);
+    if(trame[40]=='W')
+    {
+        res-=res;
+    }
     return res;
 
 }
@@ -188,48 +212,60 @@
 
 float decode_longitude(char *trame )
 {
-    float degres,reste,flottant,res;
-    int i=30;
-    degres=decode_nombre(trame,i+2);
-    reste=decode_nombre(trame,i+3);
-    flottant=decode_nombre(trame,i+10);
+    float deg,reste,flottant,res;
+    int j=30;
+    deg=decode_nombre(trame,j+2,j);
+    reste=decode_nombre(trame,j+3,j+2);
+    flottant=decode_nombre(trame,j+10,j+5);
+    res=deg+((reste+(flottant/10000))/60);
 
-    res=degres+((reste+(flottant/10000))/60);
+    if(trame[40]=='S')
+    {
+        res-=res;
+    }
     return res;
 
 }
 
-float decode_position(char *trame,Position Pos)
+void decode_trame(char *trame,Pos *P)
 {
-    Pos.Latitude=decode_latitude(trame);
-    Pos.Longitude=decode_longitude(trame);
+    P->Latitude=decode_latitude(trame);
+    P->Longitude=decode_longitude(trame);
 }
 
 
-float calcule_distance(Position p1, Position p2)
+float calcule_distance(Pos p1, Pos p2)
 {
     float distance;
-    distance=((2*3.14*6370)/360)*sqrt((p2.Latitude-p1.Latitude)*(p2.Latitude-p1.Latitude)+(p2.Longitude-p1.Longitude)*(p2.Longitude-p1.Longitude));
+    distance=((2*3.14*Rterre)/360)*sqrt((p2.Latitude-p1.Latitude)*(p2.Latitude-p1.Latitude)+(p2.Longitude-p1.Longitude)*(p2.Longitude-p1.Longitude));
     return distance;
 }
-float calcule_vitesse(Position p1, Position p2)
+
+
+float calcule_vitesse(Pos p1, Pos p2)
 {
     float vitesse;
-    vitesse=(calcule_distance(p1,p2)*3600);
+    vitesse=(calcule_distance(p1,p2)*3600); /* v(m/s)=d/t le temps est 1s donc on multiplie par 3600 pour l'avoir en km/h */
     return vitesse;
 }
-Zone r[] = {
- {{44.7887762, -3.012}, 50}, /* Descripteur de la première zone */
- {{44.7891220, -3,013}, 70},
-};
 
 
-int distance_la_plus_proche_zone(Position p, Zone r[], int nbzones, float *d)
+int distance_la_plus_proche_zone(Pos p, Zone rp[], int nbzones, float *d)
 {
-    int min_distance;
-    min_distance=2000000;
+   float Dist_int;
+   int i, j;
 
-
+   Dist_int = calcule_distance(&p, &rp[0].rp);
+   for (i=0; i<nbzones; i++)
+   {
+     *d = calcul_distance(&p, &rp[i].rp);
+     if (*d<=Dist_int)
+     {
+         j=i;
+         Dist_int=*d;
+     }
+   }
+   return j;
 }
 
 // Ne pas modifier cette fonction
