亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? test3.c

?? GARMIN的GPS信息解釋器
?? C
字號:
/*
Copyright (c) 2005, David M Howard (daveh at dmh2000.com)
All rights reserved.

This product is licensed for use and distribution under the BSD Open Source License.
see the file COPYING for more details.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 

*/

/*
========================================================================================================
EXAMPLE : SETUP FOR GGA AND RMC SENTENCES + A CUSTOM SENTENCE PARSER WITH CHARACTER BY CHARACTER IO
=======================================================================================================
*/   


/*
$PGRMF

GARMIN PROPRIETARY GPS Position Fix Data

$PGRMF,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15*HH
1 = GPS week number
2 = GPS seconds in current week
3 = UTC date, ddmmyy format
4 = UTC time, hhmmss format
5 = GPS leap second count
6 = Latitude, dddmm.mmmm format
7 = Latitude hemisphere, N or S
8 = Longitude, dddmm.mmmm format
9 = Longitude hemisphere, E or W
10 = Mode (M=Manual, A=Automatic)
11 = Fix type (0=No fix, 1=2D fix, 2=3D fix)
12 = Speed over ground, kilometres / hour
13 = Course over ground, degrees true
14 = PDOP (Position dilution of precision), rounded to nearest integer
15 = TDOP (Time dilution of precision), rounded to nearest integer
HH = Checksum 
*/



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "nmeap.h"

nmeap_gga_t g_gga;

char test_vector[] = {
"$GPGGA,123519,3929.946667,N,11946.086667,E,1,08,0.9,545.4,M,46.9,M,,*4A\r\n"
"$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68\r\n"
"$PGRMF,1,100,191105,123519,13,3929.946667,N,12311.12,W,A,2,100.1,181.2,3,8*35\r\n"
};

char *pvec = test_vector;

/** simulate character by character IO */
int readchar() 
{
    int ch;
    if (*pvec == 0) {
        ch = -1;
    }
    else {
        ch = *pvec++;
    }
    return ch;
}
/* --------------------------------------------------------------*/
/*STEP 1a : define a data structure to contain the sentence data */                                                
/* ------------------------------------------------------------- */
struct garmin_rmf {
    /* field                            position in sentence */
    int            week;             /*    1 = GPS week number                                                          */
    int            seconds_of_week;  /*    2 = GPS seconds in current week                                              */
    unsigned long  date;             /*    3 = UTC date, ddmmyy format                                                  */
    unsigned long  time;             /*    4 = UTC time, hhmmss format                                                  */
    int            leap;             /*    5 = GPS leap second count                                                    */
    double         lat;              /*  6,7 = Latitude, dddmm.mmmm format (north positive)                             */
    double         lon;              /*  8,9 = Longitude, dddmm.mmmm format (east positive)                             */
    int            mode;             /*   10 = Mode (M=Manual, A=Automatic)                                             */
    int            fix;              /*   11 = Fix type (0=No fix, 1=2D fix, 2=3D fix)                                  */
    double         speed;            /*   12 = Speed over ground, kilometres / hour                                     */
    double         course;           /*   13 = Course over ground, degrees true                                         */
    int            pdop;             /*   14 = PDOP (Position dilution of precision), rounded to nearest integer        */
    int            tdop;             /*   15 = TDOP (Time dilution of precision), rounded to nearest integer            */
};
typedef struct garmin_rmf garmin_rmf_t;

/* --------------------------------------------------------------*/
/*STEP 1b : define an id value for the message                   */                                                
/* ------------------------------------------------------------- */
#define GARMIN_PGRMF (NMEAP_USER + 0)


/* --------------------------------------------------------------*/
/* STEP 1c : write the sentence parser                            */                                                
/* ------------------------------------------------------------- */
int custom_pgrmf(nmeap_context_t *context,nmeap_sentence_t *sentence)
{
#ifndef NDEBUG	
    int i;
#endif
    
	/* get pointer to sentence data */
	garmin_rmf_t *rmf = (garmin_rmf_t *)sentence->data;
	
	if (rmf != 0) {
		/* if the sentence has a data storage element, use it */
		
		
		/* extract data from the tokens */
		rmf->week            = atoi(context->token[1]);
		rmf->seconds_of_week = atoi(context->token[2]);
		rmf->date            = (unsigned long)atol(context->token[3]);
		rmf->time            = (unsigned long)atol(context->token[4]); 
		rmf->leap            = atoi(context->token[5]);
		rmf->lat             = nmeap_latitude(context->token[6],context->token[7]);
		rmf->lon             = nmeap_longitude(context->token[8],context->token[9]);
		rmf->mode            = atoi(context->token[10]);
		rmf->fix             = atoi(context->token[11]);
		rmf->speed           = atof(context->token[12]);
		rmf->course          = atof(context->token[13]);
		rmf->pdop            = atoi(context->token[14]); 
		rmf->tdop            = atoi(context->token[15]);
	}
	/* else there was no data element to store into */

#ifndef NDEBUG    
    /* print raw input string */
    printf("%s",context->debug_input);
    
    /* print some validation data */
    printf("%s==%s %02x==%02x\n",context->input_name,sentence->name,context->icks,context->ccks);
    
    /* print the tokens */
    for(i=0;i<context->tokens;i++) {
        printf("%d:%s\n",i,context->token[i]);
    }
#endif   

    /* if the sentence has a callout, call it */
    if (sentence->callout != 0) {
        (*sentence->callout)(context,rmf,context->user_data);
    }
    
    return GARMIN_PGRMF;
}


/* -------------------------------------------------------------*/
/*STEP 2 : write a function to do something with the data       */                                                
/* ------------------------------------------------------------ */
static void print_pgrmf(garmin_rmf_t *rmf)
{
	assert(rmf != 0);         
	
	printf("                    w sec date   time   lp lat       lon         m f spd    crs    p t\n");
    printf("found PGRMF message %d %d %lu %lu %d %.6f %.6f %d %d %.2f %.2f %d %d\n",
            rmf->week,                   
            rmf->seconds_of_week, 
            rmf->date,            
            rmf->time,            
            rmf->leap,            
            rmf->lat,             
            rmf->lon,             
            rmf->mode,            
            rmf->fix,             
            rmf->speed,           
            rmf->course,          
            rmf->pdop,            
            rmf->tdop            
            );
}

/* -------------------------------------------------------------*/
/*STEP 3 : if using the callout method, write the callout       */                                                
/* ------------------------------------------------------------ */
static void pgrmf_callout(nmeap_context_t *context,void *data,void *user_data)
{
    garmin_rmf_t *rmf = (garmin_rmf_t *)data;
    
    printf("-------------callout\n");
    print_pgrmf(rmf);
}


/* ---------------------------------------------------------------------------------------*/
/* STEP 4 : allocate the data structures. be careful if you put them on the stack because */
/*          they need to be live for the duration of the parser                           */
/* ---------------------------------------------------------------------------------------*/
static nmeap_context_t nmea;       /* parser context */
static nmeap_gga_t     gga;        /* this is where the data from GGA messages will show up */
static nmeap_rmc_t     rmc;        /* this is where the data from RMC messages will show up */
static garmin_rmf_t    rmf;        /* this is where the data from RMF messages will show up */
static int             user_data; /* user can pass in anything. typically it will be a pointer to some user data */

int main(int argc,char *argv[])
{
    int             status;
    char            ch;
    
    /* ---------------------------------------*/
    /*STEP 5 : initialize the nmea context    */                                                
    /* ---------------------------------------*/
    status = nmeap_init(&nmea,(void *)&user_data);
    if (status != 0) {
        printf("nmeap_init %d\n",status);
        exit(1);
    }
    
    /* ---------------------------------------*/
    /*STEP 6 : add standard GPGGA parser      */
	/*         (no callout this time)         */
    /* -------------------------------------- */
    status = nmeap_addParser(&nmea,"GPGGA",nmeap_gpgga,0,&gga);
    if (status != 0) {
        printf("nmeap_add %d\n",status);
        exit(1);
    }

    /* ---------------------------------------*/
    /*STEP 7 : add standard GPRMC parser      */                                                
	/*         (no callout this time)         */
    /* -------------------------------------- */
    status = nmeap_addParser(&nmea,"GPRMC",nmeap_gprmc,0,&rmc);
    if (status != 0) {
        printf("nmeap_add %d\n",status);
        exit(1);
    }
    
    /* ---------------------------------------*/
    /*STEP 8 : ADD THE CUSTOM PARSER          */                                                
	/*         with callout         )         */
    /* -------------------------------------- */
    status = nmeap_addParser(&nmea,"PGRMF",custom_pgrmf,pgrmf_callout,&rmf);
    if (status != 0) {
        printf("nmeap_add %d\n",status);
        exit(1);
    }
    /* ---------------------------------------*/
    /*STEP 9 : process input until done       */                                                
    /* -------------------------------------- */
    for(;;) {
        /* ---------------------------------------*/
        /*STEP 10: get a byte at a time           */                                                
        /* -------------------------------------- */
        ch = readchar();
        if (ch <= 0) {
            break;
        }
        
        /* --------------------------------------- */
        /*STEP 11: pass it to the parser          */
        /* status indicates whether a complete msg */
        /* arrived for this byte                   */
        /* NOTE : in addition to the return status */
        /* the message callout will be fired when  */
        /* a complete message is processed         */
        /* --------------------------------------- */
        status = nmeap_parse(&nmea,ch);
        
        /* ---------------------------------------*/
        /*STEP 12 : process the return code       */                                                
        /* -------------------------------------- */
        switch(status) {
        case NMEAP_GPGGA:
            /* GOT A GPGGA MESSAGE */
            printf("-------------switch\n");
            printf("GPGGA\n");
            printf("-------------\n");
            break;
        case NMEAP_GPRMC:
            /* GOT A GPRMC MESSAGE */
            printf("-------------switch\n");
            printf("GPRMC\n");
            printf("-------------\n");
            break;
        case GARMIN_PGRMF:
            /* GOT A PGRMF MESSAGE */
            printf("-------------switch\n");
            print_pgrmf(&rmf);
            printf("-------------\n");
            break;
        default:
            break;
        }
    }
    
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品午夜久久福利影院| 亚洲精品视频在线| 欧美丝袜丝nylons| av欧美精品.com| 93久久精品日日躁夜夜躁欧美| 国内精品写真在线观看| 毛片av一区二区| 韩日av一区二区| 国产不卡高清在线观看视频| 国产高清在线观看免费不卡| 国产成人在线看| 91啪亚洲精品| 欧美视频在线播放| 日韩欧美国产一二三区| 欧美成人a在线| 亚洲视频综合在线| 亚洲男人天堂av网| 天天av天天翘天天综合网色鬼国产 | 国产日韩成人精品| 国产精品成人免费在线| 一区二区三区在线观看国产| 日韩精品视频网站| 国产综合久久久久影院| 国产999精品久久| 色综合一个色综合| 日韩一级片在线观看| 久久久国际精品| 亚洲一级二级在线| 久久99国产精品久久| 成人高清免费在线播放| 日韩中文字幕区一区有砖一区| 国产一区二区不卡老阿姨| 亚洲精品一区二区精华| 狠狠v欧美v日韩v亚洲ⅴ| 欧美精品一区二区三区在线| 国产在线乱码一区二区三区| 日韩一区二区三区在线视频| 青青草原综合久久大伊人精品| 5月丁香婷婷综合| 老司机精品视频在线| 精品黑人一区二区三区久久 | 亚洲欧美另类久久久精品2019 | 国产乱码字幕精品高清av| 精品国产乱码久久久久久图片 | 欧美色国产精品| 偷拍自拍另类欧美| 精品国产一区二区精华| 精品一区二区综合| 国产日韩欧美不卡在线| 91蜜桃免费观看视频| 性感美女极品91精品| 日韩美女一区二区三区四区| 国产乱人伦偷精品视频不卡 | 久久精品人人做人人综合 | 亚洲美女精品一区| 欧美色涩在线第一页| 免费看欧美女人艹b| 久久久精品日韩欧美| 99久久精品久久久久久清纯| 日韩美女精品在线| 日韩欧美在线影院| 一区二区国产盗摄色噜噜| 懂色av中文字幕一区二区三区 | 26uuu另类欧美| 免费日本视频一区| 欧美日本视频在线| 亚洲第一久久影院| 欧美日韩综合在线免费观看| 亚洲日本免费电影| 99久久久精品| 亚洲人成精品久久久久久| av电影在线观看一区| 欧美性三三影院| 日韩av网站免费在线| 国产日韩v精品一区二区| 欧美日韩精品电影| 成人教育av在线| 亚洲国产乱码最新视频| 国产精品你懂的| 欧美一区二区播放| 欧美在线观看你懂的| 国产河南妇女毛片精品久久久| 亚洲综合偷拍欧美一区色| 久久久久久久久久久久久久久99| 91精品福利视频| 国产不卡视频在线播放| 蜜桃精品在线观看| 午夜欧美大尺度福利影院在线看| 欧美高清在线一区| 亚洲精品在线免费观看视频| 精品视频一区二区三区免费| 成人免费看片app下载| 欧美天天综合网| 男女男精品网站| 久久久久久久久久久黄色| 成人av在线资源网站| 一区二区在线观看av| 欧美日韩卡一卡二| 精品亚洲成av人在线观看| 国产精品天天看| 欧美日韩成人在线一区| 久久99精品久久久| 自拍偷拍国产精品| 欧美一级理论性理论a| 激情小说欧美图片| 亚洲人吸女人奶水| 日韩一级精品视频在线观看| 韩国精品一区二区| 一区二区日韩av| 久久精品亚洲精品国产欧美kt∨| 一本色道a无线码一区v| 青青草91视频| 亚洲欧美一区二区不卡| 日韩精品一区二区三区在线| 9色porny自拍视频一区二区| 亚洲18色成人| 日韩一区在线免费观看| 日韩精品资源二区在线| 91片在线免费观看| 国产一区二区不卡| 污片在线观看一区二区| 亚洲三级小视频| 久久久久久久久久久99999| 欧美影院午夜播放| 成人午夜电影久久影院| 乱一区二区av| 午夜日韩在线电影| 中文字幕一区二区三区在线不卡| 欧美一区二区三区在线| 欧美中文字幕一二三区视频| 夫妻av一区二区| 狠狠久久亚洲欧美| 另类综合日韩欧美亚洲| 石原莉奈在线亚洲三区| 亚洲在线一区二区三区| 亚洲男人的天堂在线aⅴ视频| 2023国产一二三区日本精品2022| 91精品国产一区二区| 一本久道久久综合中文字幕| 成人美女在线观看| 国产不卡视频在线观看| 国产在线精品不卡| 国产在线精品一区二区夜色| 免费成人小视频| 国产高清久久久久| 国产一区二区三区最好精华液| 天堂影院一区二区| 亚洲午夜免费福利视频| 亚洲一二三四区| 午夜伦欧美伦电影理论片| 亚洲午夜羞羞片| 天天综合色天天综合色h| 水蜜桃久久夜色精品一区的特点| 一区二区在线电影| 亚洲一区在线免费观看| 亚洲国产一区二区三区| 精品国产亚洲一区二区三区在线观看| 欧美韩日一区二区三区四区| 成人欧美一区二区三区视频网页 | 一区二区三区不卡视频在线观看 | 欧美一二三四在线| 国产精品家庭影院| 日韩成人精品在线观看| 成人免费看视频| 精品人在线二区三区| 亚洲一区二区中文在线| 国产成人三级在线观看| 欧美日本高清视频在线观看| 欧美激情一区二区三区全黄| 人禽交欧美网站| 在线视频综合导航| 国产精品美女久久福利网站| 日韩激情一二三区| 欧美三级在线看| 亚洲视频一区二区免费在线观看| 九一久久久久久| 91精品国产免费久久综合| 夜夜嗨av一区二区三区网页| 国产传媒日韩欧美成人| 日韩一区国产二区欧美三区| 亚洲午夜激情网页| 在线观看日韩毛片| 国产精品久久久久久久久免费相片| 乱一区二区av| 日韩一区二区三区av| 无吗不卡中文字幕| 69久久夜色精品国产69蝌蚪网| 一区二区三区丝袜| 色综合久久88色综合天天| 欧美激情艳妇裸体舞| 丰满白嫩尤物一区二区| 国产欧美一区二区精品性色 | 日本亚洲天堂网| 欧美日本在线视频| 日韩国产欧美三级| 日韩一区和二区| 激情综合色播五月| 久久精品人人做人人爽人人| 国产福利一区二区三区| 亚洲国产精品激情在线观看|