Main MRPT website > C++ reference for MRPT 1.4.0
gnss_messages_common.h
Go to the documentation of this file.
1/* +---------------------------------------------------------------------------+
2 | Mobile Robot Programming Toolkit (MRPT) |
3 | http://www.mrpt.org/ |
4 | |
5 | Copyright (c) 2005-2016, Individual contributors, see AUTHORS file |
6 | See: http://www.mrpt.org/Authors - All rights reserved. |
7 | Released under BSD License. See details in http://www.mrpt.org/License |
8 +---------------------------------------------------------------------------+ */
9#pragma once
10
11#include <mrpt/utils/CStream.h>
13#include <iostream>
14#include <cstring> // memset()
17
18namespace mrpt {
19namespace obs {
20/** GNSS (GPS) data structures, mainly for use within mrpt::obs::CObservationGPS */
21namespace gnss {
22
23/** Pure virtual base for all message types. \sa mrpt::obs::CObservationGPS */
25 gnss_message_type_t message_type; //!< Type of GNSS message
26
27 gnss_message(gnss_message_type_t msg_type_id) : message_type(msg_type_id) {}
28 void writeToStream(mrpt::utils::CStream &out) const; //!< Save to binary stream. Launches an exception upon error
29 void readFromStream(mrpt::utils::CStream &in); //!< Load from binary stream into this existing object. Launches an exception upon error.
30
31 bool isOfType(const gnss_message_type_t type_id) const;
32 template <class MSG_CLASS>
33 bool isOfClass() const { return isOfType(MSG_CLASS::msg_type); }
34
35 static gnss_message* readAndBuildFromStream(mrpt::utils::CStream &in); //!< Load from binary stream and creates object detecting its type (class factory). Launches an exception upon error
36 static gnss_message* Factory(const gnss_message_type_t msg_id); //!< Creates message \return NULL on unknown msg type
37 static bool FactoryKnowsMsgType(const gnss_message_type_t msg_id); //!< Returns true if Factory() has a registered constructor for this msg type
38
39 virtual void dumpToStream( mrpt::utils::CStream &out ) const = 0; //!< Dumps the contents of the observation in a human-readable form to a given output stream \sa dumpToConsole()
40 void dumpToConsole(std::ostream &o = std::cout) const; //!< Dumps the contents of the observation in a human-readable form to an std::ostream (default=console)
41 virtual bool getAllFieldDescriptions( std::ostream &o ) const { return false; } //!< Dumps a header for getAllFieldValues() \return false if not implemented for this message type
42 virtual bool getAllFieldValues( std::ostream &o ) const { return false; } //!< Dumps a line with the sequence of all field values (without a line feed at the end). \sa getAllFieldDescriptions() \return false if not implemented for this message type
43 const std::string & getMessageTypeAsString() const; //!< Returns "NMEA_GGA", etc.
44 virtual ~gnss_message() {}
45protected:
46 virtual void internal_writeToStream(mrpt::utils::CStream &out) const = 0; //!< Save to binary stream. Launches an exception upon error
47 virtual void internal_readFromStream(mrpt::utils::CStream &in) = 0; //!< Save to binary stream. Launches an exception upon error
48};
49
50/** A smart pointer to a GNSS message. \sa gnss_message, mrpt::obs::CObservationGPS */
52{
53protected:
55public:
56 gnss_message_ptr(); //!< Ctor (default: NULL pointer)
57 gnss_message_ptr(const gnss_message_ptr &o); //!< Makes a copy of the pointee
58 /** Assigns a pointer. Memory now belongs to this class. */
59 explicit gnss_message_ptr(const gnss_message* p);
60 gnss_message_ptr &operator =(const gnss_message_ptr&o); // Makes a copy of the pointee
61 virtual ~gnss_message_ptr(); //!< Dtor: it frees the pointee memory
62 bool operator == ( const gnss_message *o ) const { return o==ptr; }
63 bool operator == ( const gnss_message_ptr &o )const { return o.ptr==ptr; }
64 bool operator != ( const gnss_message *o )const { return o!=ptr; }
65 bool operator != ( const gnss_message_ptr &o )const { return o.ptr!=ptr; }
66 gnss_message*& get() { return ptr; }
67 const gnss_message* get()const { return ptr; }
68 gnss_message *& operator ->() { ASSERT_(ptr); return ptr; }
69 const gnss_message * operator ->() const { ASSERT_(ptr); return ptr; }
70 void set(gnss_message* p); //!< Replaces the pointee with a new pointer. Its memory now belongs to this object, do not free manually.
71};
72
73#define GNSS_MESSAGE_BINARY_BLOCK(DATA_PTR,DATA_LEN) \
74 protected: \
75 void internal_writeToStream(mrpt::utils::CStream &out) const MRPT_OVERRIDE { \
76 out << static_cast<uint32_t>(DATA_LEN); out.WriteBuffer(DATA_PTR,DATA_LEN); } \
77 void internal_readFromStream(mrpt::utils::CStream &in) MRPT_OVERRIDE { \
78 uint32_t nBytesInStream; in >> nBytesInStream; \
79 ASSERT_EQUAL_(nBytesInStream,DATA_LEN); \
80 in.ReadBuffer(DATA_PTR,DATA_LEN); } \
81 public:
82
83#define GNSS_BINARY_MSG_DEFINITION_START(_MSG_ID) \
84 struct OBS_IMPEXP Message_##_MSG_ID : public gnss_message { \
85 GNSS_MESSAGE_BINARY_BLOCK(&fields,sizeof(fields)) \
86 enum { msg_type = _MSG_ID }; /* Static msg type (member expected by templates)*/ \
87 Message_##_MSG_ID() : gnss_message((gnss_message_type_t)msg_type) {} \
88 struct OBS_IMPEXP content_t {
89
90#define GNSS_BINARY_MSG_DEFINITION_MID \
91 content_t() { ::memset(this,0,sizeof(*this)); } \
92 }; \
93 content_t fields; /** Message content, accesible by individual fields */ \
94 void dumpToStream( mrpt::utils::CStream &out ) const MRPT_OVERRIDE;
95
96
97#define GNSS_BINARY_MSG_DEFINITION_MID_END \
98 };
99
100#define GNSS_BINARY_MSG_DEFINITION_END \
101 GNSS_BINARY_MSG_DEFINITION_MID \
102 GNSS_BINARY_MSG_DEFINITION_MID_END
103
104
105// Pragma to ensure we can safely serialize some of these structures
106#pragma pack(push,1)
107
108/** UTC (Coordinated Universal Time) time-stamp structure for GPS messages. \sa mrpt::obs::CObservationGPS */
110{
113 double sec;
114
116 mrpt::system::TTimeStamp getAsTimestamp(const mrpt::system::TTimeStamp &date) const; //!< Build an MRPT timestamp with the hour/minute/sec of this structure and the date from the given timestamp.
117 bool operator == (const UTC_time& o) const { return hour==o.hour && minute==o.minute && sec==o.sec; }
118 bool operator != (const UTC_time& o) const { return hour!=o.hour || minute!=o.minute || sec!=o.sec; }
119 void writeToStream(mrpt::utils::CStream &out) const; //!< Save to binary stream. Launches an exception upon error
120 void readFromStream(mrpt::utils::CStream &in); //!< Save to binary stream. Launches an exception upon error
121};
122
123#pragma pack(pop) // End of pack = 1
124} } } // End of namespaces
125
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
Definition: CStream.h:39
uint64_t TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1,...
Definition: datetime.h:30
#define ASSERT_(f)
Definition: mrpt_macros.h:261
gnss_message_type_t
List of all known GNSS message types.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
unsigned char uint8_t
Definition: pstdint.h:143
UTC (Coordinated Universal Time) time-stamp structure for GPS messages.
mrpt::system::TTimeStamp getAsTimestamp(const mrpt::system::TTimeStamp &date) const
Build an MRPT timestamp with the hour/minute/sec of this structure and the date from the given timest...
void readFromStream(mrpt::utils::CStream &in)
Save to binary stream. Launches an exception upon error.
void writeToStream(mrpt::utils::CStream &out) const
Save to binary stream. Launches an exception upon error.
A smart pointer to a GNSS message.
gnss_message_ptr(const gnss_message *p)
Assigns a pointer.
virtual ~gnss_message_ptr()
Dtor: it frees the pointee memory.
const gnss_message * get() const
gnss_message_ptr(const gnss_message_ptr &o)
Makes a copy of the pointee.
void set(gnss_message *p)
Replaces the pointee with a new pointer. Its memory now belongs to this object, do not free manually.
gnss_message_ptr()
Ctor (default: NULL pointer)
Pure virtual base for all message types.
void dumpToConsole(std::ostream &o=std::cout) const
Dumps the contents of the observation in a human-readable form to an std::ostream (default=console)
gnss_message_type_t message_type
Type of GNSS message.
virtual bool getAllFieldValues(std::ostream &o) const
Dumps a line with the sequence of all field values (without a line feed at the end).
virtual void internal_readFromStream(mrpt::utils::CStream &in)=0
Save to binary stream. Launches an exception upon error.
const std::string & getMessageTypeAsString() const
Returns "NMEA_GGA", etc.
virtual void dumpToStream(mrpt::utils::CStream &out) const =0
Dumps the contents of the observation in a human-readable form to a given output stream.
virtual bool getAllFieldDescriptions(std::ostream &o) const
Dumps a header for getAllFieldValues()
void readFromStream(mrpt::utils::CStream &in)
Load from binary stream into this existing object. Launches an exception upon error.
static gnss_message * readAndBuildFromStream(mrpt::utils::CStream &in)
Load from binary stream and creates object detecting its type (class factory). Launches an exception ...
static bool FactoryKnowsMsgType(const gnss_message_type_t msg_id)
Returns true if Factory() has a registered constructor for this msg type.
virtual void internal_writeToStream(mrpt::utils::CStream &out) const =0
Save to binary stream. Launches an exception upon error.
bool isOfType(const gnss_message_type_t type_id) const
gnss_message(gnss_message_type_t msg_type_id)
void writeToStream(mrpt::utils::CStream &out) const
Save to binary stream. Launches an exception upon error.
static gnss_message * Factory(const gnss_message_type_t msg_id)
Creates message.



Page generated by Doxygen 1.9.6 for MRPT 1.4.0 SVN: at Tue Jan 17 22:27:43 UTC 2023