void gps_sleep(void) { char message[] = {0xB5, 0x62, 0x02, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x4D, 0x3B}; //tfp_printf("size : %d\n\r",sizeof(message)); TD_UART_Send(message,sizeof(message)); // TODO : être sur des informations envoyés //TD_UART_SendString(message); } void gps_hot_on(void) { char message[] = {0xB5, 0x62, 0x02, 0x41, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x3D, 0xCB}; TD_UART_Send(message,sizeof(message)); // TODO : être sur des informations envoyés //TD_UART_SendString(message); } void gps_output_config_GLL(void) { TD_UART_SendString("$PUBX,40,GSA,0,0,0,0,0,0*4E\n\r"); TD_UART_SendString("$PUBX,40,GSV,0,0,0,0,0,0*59\n\r"); TD_UART_SendString("$PUBX,40,GGA,0,0,0,0,0,0*5A\n\r"); TD_UART_SendString("$PUBX,40,RMC,0,0,0,0,0,0*47\n\r"); TD_UART_SendString("$PUBX,40,VTG,0,0,0,0,0,0*5E\n\r"); } char* get_status_fix_gps(char* full_string) { char *token; char status[2] = ","; int i = 0; token = strtok(full_string, status); while ( token[0] != 'V' && token[0] != 'A' && token != NULL ) // on strtok tant qu'on a pas de bonne informations { token = strtok(NULL, status); i++; } return token; } // fonction pour l'obtention des coordonnées GPS, le timer passé dasn int gps_get_coordinates(char lat[50], char lng[50] , int timer) { int car = -1; int i; char * status; char debug[100]; char trammeGPS[70]; char copy_trammeGPS[70]; char *coordinates_token; char token_virgule[2] = ","; gps_hot_on(); TD_RTC_Delay(T1S); gps_output_config_GLL(); TD_RTC_Delay(T1S); // on elimone tout les elemenent de tramme, avant la reception de GPGLL // attente tant que le GPS n'a pas véroullé do { while ((char)car != '$') { car = TD_UART_GetChar(); } // si c'est un caractère de début, on lit et on stocke tant qu'on ne rencontre pas le cr cf trammeGPS[0] = (char)car; i = 1; // on lit le reste, tant que car ne correspond pas à la derniere ligne while ((char)car != '*') { car = TD_UART_GetChar(); if (car != -1) { trammeGPS[i] = (char)car; i++; } } trammeGPS[i] = '\0'; strcpy_custom(copy_trammeGPS, trammeGPS); //tfp_printf("Attente verouillage\n\r"); //tfp_printf("%s\n\r",trammeGPS); if(strlen(trammeGPS)==48) { status = get_status_fix_gps(copy_trammeGPS); } } while (strcmp(status, "A")); strtok(trammeGPS, token_virgule); strcpy_custom(lat, strtok(NULL, token_virgule)); strtok(NULL, token_virgule); strcpy_custom(lng, strtok(NULL, token_virgule)); gps_sleep(); return 0; }