⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nmea_test.c

📁 the example file that can decode the NMEA protocol
💻 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 + -