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.
+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.
*/
extern "C" {
#endif
-/*
+#include "cfg/cfg_nmea.h"
+
+/*
============================================
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
+#define NMEAP_MAX_SENTENCES CONFIG_NMEAP_MAX_SENTENCES
/** 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
+#define NMEAP_MAX_SENTENCE_LENGTH CONFIG_NMEAP_MAX_SENTENCE_LENGTH
/** max tokens in one sentence. 24 is enough for any standard sentence */
-#define NMEAP_MAX_TOKENS 24
+#define NMEAP_MAX_TOKENS CONFIG_NMEAP_MAX_TOKENS
/* predefined message ID's */
struct nmeap_context;
struct nmeap_sentence;
-/*
+/*
============================================
CALLOUTS
============================================
* 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);
/**
* @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);
#include "nmeap_def.h"
-/*
+/*
============================================
STANDARD SENTENCE DATA STRUCTURES
============================================
typedef struct nmeap_rmc nmeap_rmc_t;
-/*
+/*
============================================
METHODS
============================================
* @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.
+ * @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.
+ 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,
void *sentence_data
);
-/**
+/**
* parse a buffer of nmea data.
* @param context nmea object context
* @param buffer buffer of input characters
*/
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
+ * @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
*/
double nmeap_longitude(const char *plat,const char *phem);
+
+/**
+ * extract altitude from 2 tokens in xx.x format.
+ * @param palt pointer to token with numerical altitude
+ * @param punits pointer to token with measure unint
+ * @return altitude in meter or feet
+ */
+double nmeap_altitude(const char *palt,const char *punits);
+
#ifdef __cplusplus
} // extern C
#endif