📄 nmea_test.c
字号:
#include <stdlib.h>#include <stdio.h>#include <string.h>#include "NMEA_Lib.h"#include "NMEA_Test.h"static enum NMEAType NMEAFindNMEAType(CHAR * sentence){ INT16 typeIndex; for(typeIndex=0; typeIndex<(INT16)NMEATypeMax; typeIndex++) { if(0==strncmp(sentence+2, NMEAObject[typeIndex].TypeStr, 3)) { break; } } return (enum NMEAType)typeIndex;} /* NMEAFindNMEAType */static enum NMEAType NMEAFindProprietaryType(CHAR * sentence){ INT16 typeIndex; for(typeIndex=0; typeIndex<(INT16)NMEATypeMax; typeIndex++) { if(0==strncmp(sentence+1, NMEAObject[typeIndex].TypeStr, 4)) { break; } } return (enum NMEAType)typeIndex;} /* NMEAFindProprietaryType() */static void NMEAParseSentence(CHAR * sentence){ enum NMEAType typeIndex; struct NMEAObject_t LocalNMEAObject; CHAR Talker[2]; INT16 i; if('P' == sentence[0]) { typeIndex = NMEAFindProprietaryType(sentence); } else { Talker[0] = sentence[0]; Talker[1] = sentence[1]; for(i=0; i<(INT16)NMEATalkerMax; i++) { if(Talker[0] == NMEATalkerStr[i][0] && Talker[1] == NMEATalkerStr[i][1] ) { printf("Talker is %s (%d)\n", NMEATalkerStr[i], i); } } typeIndex = NMEAFindNMEAType(sentence); } printf("typeIndex=%d (%s)\n\n", typeIndex, (typeIndex<NMEATypeMax)?NMEAObject[typeIndex].TypeStr:"INVALID TYPE"); memcpy(sentence, sentence+2, strlen(sentence)); if(NMEATypeMax > typeIndex) { if(NULL != NMEAObject[typeIndex].parseFunc) { UINT32 flags = 0; (NMEAObject[typeIndex].parseFunc)(sentence, &LocalNMEAObject, &flags); } }} /* end of NMEAParseSentence() */static void NMEAExtractSubSentence(CHAR * sentence){ int sentence_index = 1; while('*' != sentence[sentence_index]) { sentence[sentence_index-1] = sentence[sentence_index]; sentence_index++; } sentence[sentence_index-1] = '\0'; return;}/*char test_data[100][100] ={ "$PGRMM,WGS 84*06", "$PGRME,,M,,M,,M*00", "$GPBOD,,T,,M,,*47", "$GPRMC,204149,V,,,,,,,,170698,,*3A", "$GPGSA,A,3,19,28,14,18,27,22,31,39,,,,,1.7,1.0,1.3*35", "$GPRMC,154232,A,2758.612,N,08210.515,W,085.4,084.4,230394,003.1,W*43", "$GPGSV,4,1,13,02,02,213,,03,-3,000,,11,00,121,,14,13,172,05*67", "$GPRTE,1,1,c,0*07", "$GPJMC,1,1,c,0*00",};*/int main(int argc, char *argv[]) /*lint !e715 argc & argv not referenced*/{ char calced_checksum[3]; char read_checksum[3]; char * sentence; char buff[256]; FILE * fp; fp = fopen("test_sentences.txt", "r"); if(NULL != fp) { while(fgets(buff, 255, fp) != NULL) { sentence = buff; printf("%s", sentence); NMEACalcChecksum(sentence, calced_checksum); strncpy(read_checksum,sentence+(strlen(sentence)-3),2); read_checksum[2] = '\0'; printf("checksum %s %s %s ", read_checksum, calced_checksum, (0==strcmp(read_checksum,calced_checksum)?"PASSED":"FAILED")); NMEAExtractSubSentence(sentence); NMEAParseSentence(sentence); } fclose(fp); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -