Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h> // sprintf,...
- #include <stdlib.h> // definice standardnich funkci
- #include <string.h> // fce na praci s daty v pameti
- #include <avr/pgmspace.h> // fce na praci s daty v prog. pameti
- //***************** struktura UTC casu **************************************
- typedef struct {
- uint8_t h; // hodiny [0-23]
- uint8_t m; // minuty [0-59]
- uint8_t s; // vteriny [0-59]
- uint16_t d; // decimalni zlomky vteriny [0-999]
- } __attribute__((packed)) GPS_UTC_TIME;
- //***************** struktura souradnice ************************************
- typedef struct {
- uint8_t d; // stupne [0-90/180]
- uint8_t m; // minuty [0-59]
- uint32_t dd; // decimalni zlomky minut [0-99999]
- char u; // typ <N|S|E|W>
- } __attribute__((packed)) GPS_COORDINATE;
- //***************** struktura GPS dat ***************************************
- typedef struct {
- GPS_UTC_TIME utc_time; // UTC cas
- GPS_COORDINATE latitude; // zemepisna sirka severni/jizni
- } __attribute__((packed)) GPS_DATA;
- GPS_DATA gps_data; // struktura pro ukladani prijatych GPS dat
- //***************** zpracuje retezec GPS NMEA a pripadne nastavi prislusne polozky globalni struktury
- void gps_parse_string(char *str) // vraci 0 pokud byl retezec zpracovan a byla nalezena platna data
- {
- uint8_t param=0;
- if (strncasecmp_P(str,PSTR("$GPGGA"),6)==0) // Time, position and fix releated data
- {
- while ((str=strchr(str,','))!=NULL)// opakuj dokud retezec obsahuje carky
- {
- if (*(++str)!=',') // pokud za carkou hned neni dalsi carka
- {
- switch (param) // dekoduj parametr
- { // pro dany parametr pouzij specificky format
- case 0 : sscanf_P(str,PSTR("%02u%02u%02u.%u"),&gps_data.utc_time.h,&gps_data.utc_time.m,&gps_data.utc_time.s,&gps_data.utc_time.d); break; // UTC time hhmmss.ddd
- case 1 : sscanf_P(str,PSTR("%02u%02u.%lu"),&gps_data.latitude.d,&gps_data.latitude.m,&gps_data.latitude.dd); break; // latitude llmm.dddd(d)
- // More case branches removed. If you leave only one, it will compile without push_reload error
- } // dalsi parametry ignoruj
- } // jinak se parametr nenacte a v promenne zustane puvodni hodnota
- param++; // inkrementuj pocitadlo parametru
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement