OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ossimNmeaMessage Class Reference

#include <ossimNmeaMessage.h>

Inheritance diagram for ossimNmeaMessage:
ossimReferenced

Public Types

typedef std::vector< ossimStringFieldListType
 

Public Member Functions

 ossimNmeaMessage (const std::string &acceptedStartingCharacters="!$")
 
virtual void parseMessage (std::istream &in) throw (ossimException)
 Parses a standard formatted NMEA message. More...
 
virtual bool valid () const
 
bool validCheckSum () const
 
ossim_uint32 numberOfFields () const
 
const std::string & getField (ossim_uint32 idx)
 
const std::string & operator[] (int idx) const
 
void setStartChars (const std::string &acceptedStartingCharacters="!$")
 
virtual void reset ()
 
const std::string & message () const
 
- Public Member Functions inherited from ossimReferenced
 ossimReferenced ()
 
 ossimReferenced (const ossimReferenced &)
 
ossimReferencedoperator= (const ossimReferenced &)
 
void ref () const
 increment the reference count by one, indicating that this object has another pointer which is referencing it. More...
 
void unref () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
void unref_nodelete () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
int referenceCount () const
 

Static Public Member Functions

static ossim_uint32 checksum (std::string::const_iterator start, std::string::const_iterator end)
 

Protected Member Functions

virtual void setFields (std::string::const_iterator start, std::string::const_iterator end)
 
bool isValidStartChar (char c) const
 
- Protected Member Functions inherited from ossimReferenced
virtual ~ossimReferenced ()
 

Protected Attributes

std::string m_message
 
FieldListType m_fields
 
bool m_validCheckSum
 
std::string m_startChars
 

Detailed Description

Definition at line 26 of file ossimNmeaMessage.h.

Member Typedef Documentation

◆ FieldListType

Definition at line 29 of file ossimNmeaMessage.h.

Constructor & Destructor Documentation

◆ ossimNmeaMessage()

ossimNmeaMessage::ossimNmeaMessage ( const std::string &  acceptedStartingCharacters = "!$")
inline

Definition at line 31 of file ossimNmeaMessage.h.

31 :m_startChars(acceptedStartingCharacters){}
std::string m_startChars

Member Function Documentation

◆ checksum()

ossim_uint32 ossimNmeaMessage::checksum ( std::string::const_iterator  start,
std::string::const_iterator  end 
)
static

Definition at line 18 of file ossimNmeaMessage.cpp.

19 {
20  ossim_uint32 sum = 0;
21 
22  while(start!=end&&((*start)!='*'))
23  {
24  sum ^= ((*start)%128);
25  ++start;
26  }
27  return sum;
28 }
unsigned int ossim_uint32

◆ getField()

const std::string& ossimNmeaMessage::getField ( ossim_uint32  idx)
inline

Definition at line 45 of file ossimNmeaMessage.h.

46  {
47  static ossimString empty="";
48 
49  if(idx < m_fields.size()) return m_fields[idx];
50 
51  return empty;
52  }
FieldListType m_fields

◆ isValidStartChar()

bool ossimNmeaMessage::isValidStartChar ( char  c) const
protected

Definition at line 53 of file ossimNmeaMessage.cpp.

References m_startChars.

54 {
55  std::string::const_iterator iter = std::find(m_startChars.begin(), m_startChars.end(), c);
56  return (iter != m_startChars.end());
57 }
std::string m_startChars

◆ message()

const std::string& ossimNmeaMessage::message ( ) const
inline

Definition at line 69 of file ossimNmeaMessage.h.

69 {return m_message;}
std::string m_message

◆ numberOfFields()

ossim_uint32 ossimNmeaMessage::numberOfFields ( ) const
inline

Definition at line 43 of file ossimNmeaMessage.h.

43 {return m_fields.size();}
FieldListType m_fields

◆ operator[]()

const std::string& ossimNmeaMessage::operator[] ( int  idx) const
inline

Definition at line 53 of file ossimNmeaMessage.h.

54  {
55  static ossimString empty="";
56 
57  if ( idx < static_cast<int>( m_fields.size() ) ) return m_fields[idx];
58 
59  return empty;
60  }
FieldListType m_fields

◆ parseMessage()

void ossimNmeaMessage::parseMessage ( std::istream &  in)
throw (ossimException
)
virtual

Parses a standard formatted NMEA message.

No exceptions are created for checksums. The checksum needs to be checked after parsing by calling validCheckSum().

Definition at line 60 of file ossimNmeaMessage.cpp.

References ossimString::downcase(), and ossim::skipws().

Referenced by ossimNmeaMessageSequencer::next().

61 {
62  ossim::skipws(in);
63  m_validCheckSum = false;
64  m_message = "";
65  if(!isValidStartChar(static_cast<char>(in.peek())))
66  {
67  throw ossimException(ossimString("Starting NMEA message indicator not found, expected one of ") +
68  m_startChars + " but found " +
69  ossimString((char)in.peek()));
70  }
71 
72  char c = static_cast<char>(in.get());
73  while(((c!='\n')&&(c!='\r'))&&
74  !in.eof()&&!in.bad())
75  {
76  m_message += c;
77  c = static_cast<char>(in.get());
78  }
79  std::string::iterator iter = std::find(m_message.begin(), m_message.end(), '*');
80 
81  if(iter != m_message.end())
82  {
83  setFields(m_message.begin()+1, m_message.end());
84  ossim_uint32 check = checksum(m_message.begin()+1, iter);
86  out << std::setw(2) << std::setfill('0') << std::hex << check;
87  std::string::iterator endChecksumIter = iter+1;
88  while((endChecksumIter!= m_message.end())&&(*endChecksumIter!=',')) ++endChecksumIter;
89  if(out.str() == ossimString(iter+1, endChecksumIter).downcase())
90  {
91  m_validCheckSum = true;
92  }
93  }
94  else
95  {
96  throw ossimException("Terminating * indicator for cbecksum not found in NMEA message format");
97  }
98 }
static ossim_uint32 checksum(std::string::const_iterator start, std::string::const_iterator end)
bool isValidStartChar(char c) const
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
OSSIM_DLL std::istream & skipws(std::istream &in)
Definition: ossimCommon.cpp:38
unsigned int ossim_uint32
static ossimString downcase(const ossimString &aString)
Definition: ossimString.cpp:48
std::string m_startChars
virtual void setFields(std::string::const_iterator start, std::string::const_iterator end)
std::string m_message

◆ reset()

virtual void ossimNmeaMessage::reset ( void  )
inlinevirtual

Definition at line 63 of file ossimNmeaMessage.h.

64  {
65  m_fields.clear();
66  m_message = "";
67  m_validCheckSum = false;
68  }
std::string m_message
FieldListType m_fields

◆ setFields()

void ossimNmeaMessage::setFields ( std::string::const_iterator  start,
std::string::const_iterator  end 
)
protectedvirtual

Definition at line 30 of file ossimNmeaMessage.cpp.

References m_fields.

31 {
32  m_fields.clear();
33  ossim_uint32 idx = 0;
34  while(start != end)
35  {
36  m_fields.push_back("");
37 
38  while((start!=end)&&
39  (*start!=','))
40  {
41  m_fields[idx]+=*start;
42  ++start;
43  }
44 
45  if(start!=end)
46  {
47  ++start;
48  }
49  ++idx;
50  }
51 }
unsigned int ossim_uint32
FieldListType m_fields

◆ setStartChars()

void ossimNmeaMessage::setStartChars ( const std::string &  acceptedStartingCharacters = "!$")
inline

Definition at line 61 of file ossimNmeaMessage.h.

61 {m_startChars = acceptedStartingCharacters;}
std::string m_startChars

◆ valid()

virtual bool ossimNmeaMessage::valid ( ) const
inlinevirtual

Definition at line 39 of file ossimNmeaMessage.h.

39 {return validCheckSum();}
bool validCheckSum() const

◆ validCheckSum()

bool ossimNmeaMessage::validCheckSum ( ) const
inline

Definition at line 40 of file ossimNmeaMessage.h.

40 {return m_validCheckSum;}

Member Data Documentation

◆ m_fields

FieldListType ossimNmeaMessage::m_fields
protected

Definition at line 79 of file ossimNmeaMessage.h.

Referenced by setFields().

◆ m_message

std::string ossimNmeaMessage::m_message
protected

Definition at line 78 of file ossimNmeaMessage.h.

◆ m_startChars

std::string ossimNmeaMessage::m_startChars
protected

Definition at line 82 of file ossimNmeaMessage.h.

Referenced by isValidStartChar().

◆ m_validCheckSum

bool ossimNmeaMessage::m_validCheckSum
protected

Definition at line 81 of file ossimNmeaMessage.h.


The documentation for this class was generated from the following files: