GPS Library  0.1
GPS driver and NMEA parser
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Macros
NMEAInfo.h
Go to the documentation of this file.
1 #ifndef __NMEAINFO_H__
2 #define __NMEAINFO_H__
3 
4 #include <Position/Position.h>
5 #include <GPS/Info/GPSInfo.h>
6 #include <Exceptions/Exceptions.h>
7 
8 namespace NMEA
9 {
10  int ToInt(const char * format, int digits = 8);
11  float ToFloat(const char * format);
12  float ToMeter(const char * format, const char * unit);
13 
14  class FloatData
15  {
16  public:
17  FloatData(void):
18  format(NULL),
19  up2date(false)
20  {
21  }
22 
23  FloatData(const char * p_format):
24  format(p_format),
25  up2date(false)
26  {
27  }
28 
29  inline operator float() const
30  {
31  return const_cast<FloatData&>(*this).toFloat();
32  }
33 
34  protected:
35  float toFloat(void);
36 
37  private:
38  SYS_DEFINE_CLASS_NAME("NMEA::FloatData");
39 
40  const char * format;
41 
42  bool up2date;
43 
44  float value;
45  };
46 
48  {
49  public:
51  format(NULL),
52  direction(NULL),
53  up2date(false)
54  {
55  }
56 
57  VariationData(const char * p_format, const char * p_direction):
58  format(p_format),
59  direction(p_direction),
60  up2date(false)
61  {
62  }
63 
64  inline operator float() const
65  {
66  return const_cast<VariationData&>(*this).toFloat();
67  }
68 
69  protected:
70  float toFloat(void);
71 
72  private:
73  SYS_DEFINE_CLASS_NAME("NMEA::VariationData");
74 
75  const char * format;
76 
77  const char * direction;
78 
79  bool up2date;
80 
81  float value;
82  };
83 
84  class Miles2Kmph: public FloatData
85  {
86  public:
87  Miles2Kmph(void)
88  {
89  }
90 
91  Miles2Kmph(const char * format):
92  FloatData(format)
93  {
94  }
95 
96  inline operator float() const
97  {
98  return const_cast<Miles2Kmph&>(*this).toFloat() * 1.852;
99  }
100 
101  private:
102  SYS_DEFINE_CLASS_NAME("NMEA::Miles2Kmph");
103  };
104 
105  class MeterData
106  {
107  public:
108  MeterData(void):
109  format(NULL),
110  unit(NULL),
111  up2date(false)
112  {
113  }
114 
115  MeterData(const char * p_format, const char * p_unit = NULL):
116  format(p_format),
117  unit(p_unit),
118  up2date(false)
119  {
120  }
121 
122  float toMeters(void);
123 
124  inline operator float() const
125  {
126  return const_cast<MeterData&>(*this).toMeters();
127  }
128 
129  private:
130  SYS_DEFINE_CLASS_NAME("NMEA::MeterData");
131 
132  const char * format;
133 
134  const char * unit;
135 
136  bool up2date;
137 
138  float value;
139  };
140 
141  class Position: public GPS::Position
142  {
143  public:
144  Position(void):
145  myFormat(NULL),
146  up2date(false),
147  negative(false)
148  {
149  }
150 
151  Position(const char * format):
152  myFormat(format),
153  up2date(false),
154  negative(false)
155  {
156  }
157 
158  void HemisphereEW(const char * hemisphere)
159  {
160  switch(*hemisphere)
161  {
162  case 'E':
163  negative = false;
164  break;
165  case 'W':
166  negative = true;
167  break;
168  default:
169  throw EX::Error("NMEA angle: bad hemisphere (E/W)");
170  break;
171  }
172  }
173 
174  void HemisphereNS(const char * hemisphere)
175  {
176  switch(*hemisphere)
177  {
178  case 'N':
179  negative = false;
180  break;
181  case 'S':
182  negative = true;
183  break;
184  default:
185  throw EX::Error("NMEA angle: bad hemisphere (N/S)");
186  break;
187  }
188  }
189 
190  private:
191  SYS_DEFINE_CLASS_NAME("NMEA::Position");
192 
193  virtual void Update(void);
194 
195  const char * myFormat;
196 
197  bool up2date;
198 
199  bool negative;
200  };
201 
202  class Time: public GPS::Time
203  {
204  public:
205  Time(void)
206  {
207  }
208 
209  Time(float s, int m, int h, int d = 0):
210  GPS::Time(s, m, h, d)
211  {
212  }
213 
214  Time(const char * format);
215 
216  private:
217  SYS_DEFINE_CLASS_NAME("NMEA::Time");
218  };
219 
220  class Date: public GPS::Date
221  {
222  public:
223  Date(void)
224  {
225  }
226 
227  Date(const char * format);
228 
229  private:
230  SYS_DEFINE_CLASS_NAME("NMEA::Date");
231  };
232 }
233 
234 #endif /* __NMEAINFO_H__ */
235 
236 /* * * * * * * * * * * * * End - of - File * * * * * * * * * * * * * * */