/*
*
* NMEA library
* URL: http://nmea.sourceforge.net
* Author: Tim (
[email protected])
* Licence: http://www.gnu.org/licenses/lgpl.html
* $Id: units.h 4 2007-08-27 13:11:03Z xtimor $
*
*/
#ifndef __NMEA_UNITS_H__
#define __NMEA_UNITS_H__
#include "config.h"
/*
* Distance units
*/
//定义了一些单位的转换关系
#define NMEA_TUD_YARDS (1.0936) /**< Yeards, meter * NMEA_TUD_YARDS = yard */
#define NMEA_TUD_KNOTS (1.852) /**< Knots, kilometer / NMEA_TUD_KNOTS = knot */
#define NMEA_TUD_MILES (1.609) /**< Miles, kilometer / NMEA_TUD_MILES = mile */
/*
* Speed units
*/
#define NMEA_TUS_MS (3.6) /**< Meters per seconds, (k/h) / NMEA_TUS_MS= (m/s) */
#endif /* __NMEA_UNITS_H__ */
/*
*
* NMEA library
* URL: http://nmea.sourceforge.net
* Author: Tim (
[email protected])
* Licence: http://www.gnu.org/licenses/lgpl.html
* $Id: context.h 4 2007-08-27 13:11:03Z xtimor $
*
*/
#ifndef __NMEA_CONTEXT_H__
#define __NMEA_CONTEXT_H__
#include "config.h"
#define NMEA_DEF_PARSEBUFF (1024) //缺省的解析buf
#define NMEA_MIN_PARSEBUFF (256) //最小的解析buf
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*nmeaTraceFunc)(const char *str, int str_size); //一般typedef相当于define,但是这里是另一个用法:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换,http://baike.baidu.com/view/1283800.htm
typedef void (*nmeaErrorFunc)(const char *str, int str_size);
//????这两个函数在哪里实现的???
typedef struct _nmeaPROPERTY
{
nmeaTraceFunc trace_func;
nmeaErrorFunc error_func;
int parse_buff_size;
} nmeaPROPERTY;
nmeaPROPERTY * nmea_property();
void nmea_trace(const char *str, ...); //跟踪字符串
void nmea_trace_buff(const char *buff, int buff_size); //跟踪确定大小的buf
void nmea_error(const char *str, ...);
#ifdef __cplusplus
}
#endif
#endif /* __NMEA_CONTEXT_H__ */
/*
*
* NMEA library
* URL: http://nmea.sourceforge.net
* Author: Tim (
[email protected])
* Licence: http://www.gnu.org/licenses/lgpl.html
* $Id: context.c 17 2008-03-11 11:56:11Z xtimor $
*
*/
#include "nmea/context.h" //标识具体路径的调用
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
nmeaPROPERTY * nmea_property()
{
static nmeaPROPERTY prop = {
0, 0, NMEA_DEF_PARSEBUFF
}; //静态的初始值
return ∝
}
void nmea_trace(const char *str, ...)
{
int size;
va_list arg_list;
char buff[NMEA_DEF_PARSEBUFF];
nmeaTraceFunc func = nmea_property()->trace_func; //一开始这里是0,那么什么时候会有值呢?
if(func)
{
va_start(arg_list, str);
size = NMEA_POSIX(vsnprintf)(&buff[0], NMEA_DEF_PARSEBUFF - 1, str, arg_list);
va_end(arg_list);
if(size > 0)
(*func)(&buff[0], size); //!!!!!这个函数在哪里实现??
}
}
void nmea_trace_buff(const char *buff, int buff_size)
{
nmeaTraceFunc func = nmea_property()->trace_func;
if(func && buff_size)
(*func)(buff, buff_size);
}
void nmea_error(const char *str, ...)
{
int size;
va_list arg_list;
char buff[NMEA_DEF_PARSEBUFF];
nmeaErrorFunc func = nmea_property()->error_func;
if(func)
{
va_start(arg_list, str);
size = NMEA_POSIX(vsnprintf)(&buff[0], NMEA_DEF_PARSEBUFF - 1, str, arg_list);
va_end(arg_list);
if(size > 0)
(*func)(&buff[0], size);
}
}
//奇怪!!!问题!!!两个重要的函数不知怎么实现? 暂时未解!!!