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

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

?? nmeap.h

?? GARMIN的GPS信息解釋器
?? H
字號:
/*
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. 

*/

#ifndef __NMEAP_H__
#define __NMEAP_H__

#ifdef __cplusplus
extern "C" {
#endif

/* 
============================================
COMPILE TIME CONFIGURATION CONSTANTS
============================================
*/

/* these constants affect the size of the context object. tweak them as desired but know what you are doing */

/** maximum number of sentence parsers supported */
#define NMEAP_MAX_SENTENCES            8
/** length of sentence name. leave this at 5 unless you really know what you are doing */
#define NMEAP_MAX_SENTENCE_NAME_LENGTH 5
/** max length of a complete sentence. the standard says 82 bytes, but its probably better to go at least 128 since
 * some units don't adhere to the 82 bytes especially for proprietary sentences */
#define NMEAP_MAX_SENTENCE_LENGTH      255
/** max tokens in one sentence. 24 is enough for any standard sentence */
#define NMEAP_MAX_TOKENS               24

/* predefined message ID's */

/* GGA MESSAGE ID */
#define NMEAP_GPGGA 1
/* RMC MESSAGE ID */
#define NMEAP_GPRMC 2

/** user defined parsers should make ID numbers using NMEAP_USER as the base value, plus some increment */
#define NMEAP_USER  100

/* forward references */
struct nmeap_context;
struct nmeap_sentence;

/* 
============================================
CALLOUTS
============================================
*/

/**
 * sentence callout function type
 * a callout is fired for each registered sentence type
 * the callout gets the object context and a pointer to sentence specific data.
 * the callout must cast the 'sentence_data' to the appropriate type for that callout
 * @param context			nmea object context
 * @param sentence_data		sentence specific data
*/ 
typedef void (*nmeap_callout_t)(struct nmeap_context *context,void *sentence_data,void *user_data);

/**
 * sentence parser function type
 * stored in the object context and called internally when the sentence name matches
 * the specified value
 * the callout gets the object context and a pointer to sentence specific data.
 * the callout must cast the 'sentence_data' to the appropriate type for that callout
 * @param context			nmea object context
 * @param sentence_data		sentence specific data
 * @return id of sentence  (each sentence parser knows its own ID)
*/ 
typedef int (*nmeap_sentence_parser_t)(struct nmeap_context *context,struct nmeap_sentence *sentence);


/* ==== opaque types === */
#include "nmeap_def.h"


/* 
============================================
STANDARD SENTENCE DATA STRUCTURES
============================================
*/

/** extracted data from a GGA message */
struct nmeap_gga {
	double        latitude;
	double        longitude;
	double        altitude;
	unsigned long time;
	int           satellites;
	int           quality;
	double        hdop;
	double        geoid;
};
typedef struct nmeap_gga nmeap_gga_t;

/** extracted data from an RMC message */
struct nmeap_rmc {
	unsigned long time;
	char          warn;
	double        latitude;
	double        longitude;
	double        speed;
	double        course;
	unsigned long date;
	double        magvar;
};

typedef struct nmeap_rmc nmeap_rmc_t;

/* 
============================================
METHODS
============================================
*/

/**
 * initialize an NMEA parser. call this function to initialize a user allocated context object
 * @param context 		nmea object context. allocated by user statically or dynamically.
 * @param user_data 	pointer to user defined data
 * @return 0 if ok, -1 if initialization failed
 */
int nmeap_init(nmeap_context_t *context,void *user_data);

/**
 * register an NMEA sentence parser
 * @param context 		   nmea object context
 * @param sentence_name    string matching the sentence name for this parser. e.g. "GPGGA". not including the '$'
 * @param sentence_parser  parser function for this sentence
 * @param sentence_callout callout triggered when this sentence is received and parsed. 
 *                         if null, no callout is triggered for this sentence
 * @param sentence_data    user allocated sentence specific data defined by the application. the parser uses
                           this data item to store the extracted data. This data object needs to persist over the life
						   of the parser, so be careful if allocated on the stack. 
 * @return 0 if registered ok, -1 if registration failed
 */
int nmeap_addParser(nmeap_context_t         *context,
					 const char             *sentence_name,
					 nmeap_sentence_parser_t sentence_parser,
					 nmeap_callout_t         sentence_callout,
					 void                   *sentence_data
					 );

/** 
 * parse a buffer of nmea data.
 * @param context 		   nmea object context
 * @param buffer          buffer of input characters
 * @param length          [in,out] pointer to length of buffer. on return, contains number of characters not used for
 *                        the current sentence
 * @return -1 if error, 0 if the data did not complete a sentence, sentence code if a sentence was found in the stream
 */
int nmeap_parseBuffer(nmeap_context_t *context,const char *buffer,int *length);

/** 
 * parse one character of nmea data.
 * @param context 		   nmea object context
 * @param ch              input character
 * @return -1 if error, 0 if the data did not complete a sentence, sentence code if a sentence was found in the stream  
 */
int nmeap_parse(nmeap_context_t *context,char ch);


/** 
 * built-in parser for GGA sentences.
 * @param context 		   nmea object context
 * @param sentence         sentence object for this parser
  */
int nmeap_gpgga(nmeap_context_t *context,nmeap_sentence_t *sentence);

/** 
 * built-in parser for RMC sentences.
 * @param context 		   nmea object context
 * @param sentence         sentence object for this parser
 */
int nmeap_gprmc(nmeap_context_t *context,nmeap_sentence_t *sentence);

/**
 * extract latitude from 2 tokens in ddmm.mmmm,h format.
 * @param plat pointer to token with numerical latitude
 * @param phem pointer to token with hemisphere
 * @return latitude in degrees and fractional degrees
 */
double nmeap_latitude(const char *plat,const char *phem);


/**
 * extract longitude from 2 tokens in ddmm.mmmm,h format.
 * @param plat pointer to token with numerical longitude
 * @param phem pointer to token with hemisphere
 * @return longitude in degrees and fractional degrees
 */
double nmeap_longitude(const char *plat,const char *phem);

#ifdef __cplusplus
} // extern C
#endif


#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜看片网址| 成人中文字幕电影| 亚洲一区免费在线观看| 最好看的中文字幕久久| 中文字幕一区在线观看视频| 国产欧美精品一区二区色综合| 欧美一区二区黄| 日韩一级免费观看| 欧美不卡123| 久久视频一区二区| 国产香蕉久久精品综合网| 欧美韩日一区二区三区四区| 中文字幕一区二区三区av| 中文字幕亚洲精品在线观看| 一级精品视频在线观看宜春院| 亚洲在线成人精品| 日韩成人免费在线| 久久精品国产99久久6| 国产高清久久久| 91猫先生在线| 欧美日韩精品三区| 久久亚洲综合色一区二区三区| 久久综合九色综合97_久久久| 国产欧美一区二区精品婷婷| 亚洲色图制服丝袜| 日韩专区一卡二卡| 国产在线播放一区三区四| 国产mv日韩mv欧美| 日本精品视频一区二区三区| 日韩午夜在线观看视频| 国产精品国产三级国产普通话99 | 欧美一区二区在线观看| 亚洲精品一区在线观看| 1024亚洲合集| 蜜臀精品久久久久久蜜臀| 成人av影院在线| 欧美日韩中文另类| 国产亚洲午夜高清国产拍精品| 一区2区3区在线看| 国产成人精品亚洲777人妖 | 亚洲精品视频观看| 美女视频黄频大全不卡视频在线播放| 国产乱码精品一区二区三区忘忧草| 91精品福利视频| xvideos.蜜桃一区二区| 午夜精品久久久久久久99水蜜桃| 成人午夜视频网站| 欧美一卡二卡三卡四卡| 亚洲啪啪综合av一区二区三区| 激情五月激情综合网| 欧美日韩在线播放三区四区| 国产精品久久久久国产精品日日| 蜜臀a∨国产成人精品| 一本色道久久综合亚洲91 | 99久久婷婷国产| 欧美大黄免费观看| 亚洲成人免费看| 色成人在线视频| 国产欧美一区在线| 国产尤物一区二区| 欧美草草影院在线视频| 日产国产欧美视频一区精品| 91搞黄在线观看| 亚洲一区二区在线视频| 成人国产精品免费网站| 久久色中文字幕| 老司机午夜精品| 这里是久久伊人| 亚洲超丰满肉感bbw| 欧洲激情一区二区| 亚洲女与黑人做爰| 色婷婷国产精品| 亚洲色图另类专区| 色综合中文字幕国产| 中文字幕在线不卡一区| 99麻豆久久久国产精品免费优播| 久久久91精品国产一区二区三区| 狠狠色综合播放一区二区| 欧美mv日韩mv| 国产老女人精品毛片久久| 精品99一区二区三区| 国产精品18久久久| 中文字幕免费观看一区| 不卡一区二区在线| 一区二区三区蜜桃| 欧美顶级少妇做爰| 欧美aaa在线| 久久亚洲欧美国产精品乐播 | 成人激情av网| 亚洲激情男女视频| 欧美日韩大陆一区二区| 奇米精品一区二区三区四区| 精品精品国产高清一毛片一天堂| 国产精品18久久久久久久久久久久| 久久久久久久久久久久久久久99 | 日韩高清在线不卡| 精品成人一区二区三区| 国产98色在线|日韩| 亚洲精品美腿丝袜| 91麻豆精品国产| 国产麻豆视频一区| 一区二区三区在线观看国产| 在线不卡中文字幕| 国产成人av一区二区三区在线| 亚洲人成精品久久久久| 日韩一区二区高清| 不卡的电影网站| 天涯成人国产亚洲精品一区av| www国产亚洲精品久久麻豆| 91亚洲精品乱码久久久久久蜜桃| 偷窥国产亚洲免费视频| 亚洲国产成人私人影院tom| 91小视频在线| 老司机免费视频一区二区三区| 国产精品美女久久久久久久久 | 欧美日韩精品一区二区| 国产一区欧美二区| 香港成人在线视频| 1024成人网| 精品久久久久久综合日本欧美| 91小视频免费看| 国产一区二区三区av电影| 亚洲国产精品天堂| 国产精品理论片在线观看| 日韩视频永久免费| 欧美午夜免费电影| 成人黄色免费短视频| 青青草精品视频| 亚洲国产视频网站| 亚洲欧洲美洲综合色网| www成人在线观看| 欧美一区二区三区四区五区| av成人免费在线| 懂色av一区二区夜夜嗨| 免费一级欧美片在线观看| 亚洲精品国产精品乱码不99| 国产三级三级三级精品8ⅰ区| 91精品视频网| 欧美精品视频www在线观看| 91麻豆蜜桃一区二区三区| 国产激情精品久久久第一区二区| 另类小说视频一区二区| 首页欧美精品中文字幕| 亚洲h动漫在线| 亚洲18色成人| 亚洲电影激情视频网站| 亚洲午夜电影网| 一区二区三区四区不卡在线 | 色丁香久综合在线久综合在线观看| 国产酒店精品激情| 国产一区二区剧情av在线| 久久av老司机精品网站导航| 麻豆成人免费电影| 免费日韩伦理电影| 蜜桃精品视频在线| 久久99精品国产.久久久久久| 美女国产一区二区| 国产精品一区在线| 国产高清久久久| a在线欧美一区| 欧美亚洲尤物久久| 7777女厕盗摄久久久| 欧美电影免费观看高清完整版| 日韩欧美视频一区| 国产人久久人人人人爽| 中文字幕一区二区三区视频 | 日韩一级黄色片| 精品国产乱码91久久久久久网站| www国产成人| 亚洲色图第一区| 日韩激情中文字幕| 国产一区二区在线电影| av不卡免费电影| 欧美图区在线视频| 欧美tickle裸体挠脚心vk| 久久精品人人做| 一区二区不卡在线视频 午夜欧美不卡在| 一区二区欧美视频| 久久国产精品露脸对白| 成人国产在线观看| 欧美在线影院一区二区| 日韩欧美在线123| 国产精品色呦呦| 亚洲动漫第一页| 国产传媒一区在线| 欧美日韩国产不卡| 久久精品视频免费观看| 亚洲电影一区二区三区| 国产酒店精品激情| 欧美三级韩国三级日本一级| 久久综合999| 亚洲444eee在线观看| 国产宾馆实践打屁股91| 国模大尺度一区二区三区| 在线免费不卡电影| 欧美国产欧美综合| 免费高清不卡av| bt欧美亚洲午夜电影天堂| 欧美刺激午夜性久久久久久久| 亚洲女性喷水在线观看一区|