Révision 509
Ajouté par Hamza MOUBTASSIME il y a presque 3 ans
branch/moubtassime/sp4a12/main.c | ||
---|---|---|
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <strings.h>
|
||
#include "trame.h"
|
||
#include "trame.h"
|
||
#include <maths.h>
|
||
|
||
//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",
|
||
... | ... | |
"$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};
|
||
|
||
|
||
//Fonction ? modifier !!!!!
|
||
void traitement(char * trame)
|
||
{
|
||
static int cpt=0;
|
||
if (trame_cmp(trame,"GPGGA")==1){
|
||
printf ("> %s\n",trame);}
|
||
cpt++;
|
||
printf ("> %s\n",trame);
|
||
}
|
||
|
||
|
||
... | ... | |
if (5!=5){
|
||
printf ("Erreur Test unitaire basique.\n");
|
||
exit(-1);
|
||
}
|
||
/*if (trame_cmp("$GPGGA suite chaine","GPGGA")!=1){
|
||
printf ("Erreur Test unitaire trame_cmp.\n");
|
||
exit(-1);
|
||
}*/
|
||
}
|
||
|
||
if (trame_cmp("$GPGGA suite chaine","GPGGA")!=1){
|
||
printf ("Erreur Test unitaire trame_cmp.\n");
|
||
... | ... | |
exit(-1);
|
||
|
||
}
|
||
test_decode_int();
|
||
test_decode_nombre();
|
||
}
|
||
|
||
int trame_cmp(char * trame , char * type) {
|
||
int trame_cmp(char* trame,char* type){
|
||
int i=0, nombre = 0;
|
||
while (type[i] != '\0'){
|
||
if (type[i] == trame[i+1]){
|
||
nombre += 1;
|
||
}
|
||
i += 1;}
|
||
if (nombre == i){
|
||
return 1;
|
||
}
|
||
else{
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
int i,n=1;
|
||
int resultat=1;
|
||
while ( type[n] != 'A'){
|
||
n++;
|
||
n++;
|
||
|
||
|
||
int decode_int( char c) {
|
||
int n;
|
||
if ((c >= '0') && (c <= '9')){
|
||
c -= 48; // Affectation du code ASCII correspondant au caractere ASCII
|
||
n = c;
|
||
}
|
||
else{
|
||
n = -1;
|
||
}
|
||
return n;
|
||
}
|
||
|
||
for ( i=1;i<n;i++) {
|
||
if ( trame[i+1] != type[i]){
|
||
resultat=0;
|
||
}}
|
||
return(resultat);
|
||
|
||
|
||
void test_decode_int(void) {
|
||
if (decode_int("3")!=3) {
|
||
printf("erreur test unitaire decode_int \n");
|
||
}
|
||
}
|
||
|
||
|
||
int decode_nombre( char *c , int n) {
|
||
|
||
int i;
|
||
for(i = n; i <= 10 ; i++){
|
||
c[i] = '\0';
|
||
}
|
||
}
|
||
|
||
|
||
int decode_int( char c) {
|
||
|
||
int n;
|
||
n=(int)c;
|
||
return(n);
|
||
|
||
}
|
||
|
||
void test_decode_int(void) {
|
||
if (decode_int("3")!=3) {
|
||
printf("erreur test unitaire decode_int \n");
|
||
exit(-1);
|
||
}
|
||
|
||
|
||
|
||
struct position {
|
||
int longitude;
|
||
int latitude;
|
||
}
|
||
|
||
|
||
int decode_nombre( char c[2]) {
|
||
|
||
int n,dec,uni;
|
||
void decode_trame ( char *trame[1000] , int* longitude , int* latitude ) {
|
||
|
||
dec= decode_int(c[0]);
|
||
uni= decode_int(c[1]);
|
||
n= dec*10 + uni;
|
||
return(n);
|
||
int i;
|
||
for ( i=17; i<21;i++) {
|
||
*latitude= *latitude*10 + trame[i-48]; //partie enti?re de la lat
|
||
}
|
||
for ( i=22;i<26;i++) {
|
||
*latitude= *latitude*10 + trame[i-48]; // partie d?cimale de la lat
|
||
}
|
||
for ( i=27;i<31;i++) {
|
||
*longitude= *longitude*10 + trame[i-48]; //partie enti?re de la long
|
||
}
|
||
for( i=32; i<36;i++) {
|
||
*longitude= *longitude*10 + trame[i-48]; // partie d?cimale de la long
|
||
}
|
||
|
||
*latitude = *latitude - *latitude%1000000 + *latitude%1000000 * 5/3; //reste ? convertir la latitude en h?xa
|
||
*longitude = *longitude - *longitude%1000000 + *longitude%1000000 * 5/3; //reste ? convertir la longitude
|
||
|
||
}
|
||
|
||
|
||
float calcule_distance(struct position p1,struct position p2 ){
|
||
|
||
float distance;
|
||
float lat1= p1.latitude;
|
||
float lat2= p2.latitude;
|
||
float lon1= p1.longitude;
|
||
float lon2= p2.longitude;
|
||
|
||
lat1 = lat1/1000000; //conversion lat et long
|
||
lat2 = lat2/1000000;
|
||
lon1 = lon1/1000000;
|
||
lon2 = lon2/1000000;
|
||
|
||
position= acos(sin(lat1*M_PI/180)*sin(lat2*M_PI/180) + cos(lon1*M_PI/180)*cos(lon2*M_PI/180)*cos(lon1*M_PI/180 -lon2*M_PI/180)*6378; //distance en km
|
||
|
||
printf("distance est ?gale ? %f km \n", distance);
|
||
|
||
return(distance);
|
||
}
|
||
|
||
|
||
float calcule_vitesse( struct position p1, struct position p2 ){
|
||
float vitesse ;
|
||
float distance;
|
||
distance = calcule_distance( position p1, position p2);
|
||
vitesse= distance*3600;
|
||
printf("la vitesse est ?gale ? %f km/h \n", vitesse);
|
||
}
|
||
|
||
|
||
int distance_a_la_proche_zone( struct position p, float Zone[],int nb_zones, float *d){
|
||
|
||
|
||
|
||
}
|
||
|
||
// Ne pas modifier cette fonction
|
||
int main(int argc,char ** argv)
|
||
... | ... | |
traitement(trame);
|
||
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
|
Formats disponibles : Unified diff